--- GNU RISC-V vocabulary for Lx
-- @module vocabulary_gnu_riscv

-- Sources:
-- https://github.com/riscv/riscv-opcodes/tree/6bf30f5d2862f3a25400621cf32bac85749314a4
-- https://github.com/riscv-non-isa/riscv-asm-manual/tree/25a158484b831a40a8f5273b135390ce17e8ca4a

local instructions = {
	"aadd",
	"aaddu",
	"abs",
	"absw",
	"add",
	"add.uw",
	"addd",
	"addi",
	"addiw",
	"addw",
	"aes32dsi",
	"aes32dsmi",
	"aes32esi",
	"aes32esmi",
	"aes64ds",
	"aes64dsm",
	"aes64es",
	"aes64esm",
	"aes64im",
	"aes64ks1i",
	"aes64ks2",
	"amoadd.b",
	"amoadd.d",
	"amoadd.h",
	"amoadd.w",
	"amoand.b",
	"amoand.d",
	"amoand.h",
	"amoand.w",
	"amocas.b",
	"amocas.d",
	"amocas.h",
	"amocas.q",
	"amocas.w",
	"amomax.b",
	"amomax.d",
	"amomax.h",
	"amomax.w",
	"amomaxu.b",
	"amomaxu.d",
	"amomaxu.h",
	"amomaxu.w",
	"amomin.b",
	"amomin.d",
	"amomin.h",
	"amomin.w",
	"amominu.b",
	"amominu.d",
	"amominu.h",
	"amominu.w",
	"amoor.b",
	"amoor.d",
	"amoor.h",
	"amoor.w",
	"amoswap.b",
	"amoswap.d",
	"amoswap.h",
	"amoswap.w",
	"amoxor.b",
	"amoxor.d",
	"amoxor.h",
	"amoxor.w",
	"and",
	"andi",
	"andn",
	"asub",
	"asubu",
	"auipc",
	"bclr",
	"bclri",
	"bclri.rv32",
	"beq",
	"beqi",
	"beqz",
	"bext",
	"bexti",
	"bexti.rv32",
	"bge",
	"bgeu",
	"bgez",
	"bgt",
	"bgtu",
	"bgtz",
	"binv",
	"binvi",
	"binvi.rv32",
	"ble",
	"bleu",
	"blez",
	"blt",
	"bltu",
	"bltz",
	"bne",
	"bnei",
	"bnez",
	"brev8",
	"bset",
	"bseti",
	"bseti.rv32",
	"c.add",
	"c.addi",
	"c.addi16sp",
	"c.addi4spn",
	"c.addiw",
	"c.addw",
	"c.and",
	"c.andi",
	"c.beqz",
	"c.bnez",
	"c.ebreak",
	"c.fld",
	"c.fldsp",
	"c.flw",
	"c.flwsp",
	"c.fsd",
	"c.fsdsp",
	"c.fsw",
	"c.fswsp",
	"c.j",
	"c.jal",
	"c.jalr",
	"c.jr",
	"c.lbu",
	"c.ld",
	"c.ldsp",
	"c.lh",
	"c.lhu",
	"c.li",
	"c.lui",
	"c.lw",
	"c.lwsp",
	"c.mop.1",
	"c.mop.11",
	"c.mop.13",
	"c.mop.15",
	"c.mop.3",
	"c.mop.5",
	"c.mop.7",
	"c.mop.9",
	"c.mop.N",
	"c.mul",
	"c.mv",
	"c.nop",
	"c.not",
	"c.ntl.all",
	"c.ntl.p1",
	"c.ntl.pall",
	"c.ntl.s1",
	"c.or",
	"c.sb",
	"c.sd",
	"c.sdsp",
	"c.sext.b",
	"c.sext.h",
	"c.sext.w",
	"c.sh",
	"c.slli",
	"c.slli_rv32",
	"c.srai",
	"c.srai_rv32",
	"c.srli",
	"c.srli_rv32",
	"c.sspopchk.x5",
	"c.sspush.x1",
	"c.sub",
	"c.subw",
	"c.sw",
	"c.swsp",
	"c.xor",
	"c.zext.b",
	"c.zext.h",
	"c.zext.w",
	"call",
	"cbo.clean",
	"cbo.flush",
	"cbo.inval",
	"cbo.zero",
	"clmul",
	"clmulh",
	"clmulr",
	"cls",
	"clsw",
	"clz",
	"clzw",
	"cm.jalt",
	"cm.mva01s",
	"cm.mvsa01",
	"cm.pop",
	"cm.popret",
	"cm.popretz",
	"cm.push",
	"cpop",
	"cpopw",
	"csrc",
	"csrci",
	"csrr",
	"csrrc",
	"csrrci",
	"csrrs",
	"csrrsi",
	"csrrw",
	"csrrwi",
	"csrs",
	"csrsi",
	"csrw",
	"csrwi",
	"ctz",
	"ctzw",
	"czero.eqz",
	"czero.nez",
	"div",
	"divu",
	"divuw",
	"divw",
	"dret",
	"ebreak",
	"ecall",
	"fabs.d",
	"fabs.h",
	"fabs.q",
	"fabs.s",
	"fadd.d",
	"fadd.h",
	"fadd.q",
	"fadd.s",
	"fclass.d",
	"fclass.h",
	"fclass.q",
	"fclass.s",
	"fcvt.bf16.s",
	"fcvt.d.h",
	"fcvt.d.l",
	"fcvt.d.lu",
	"fcvt.d.q",
	"fcvt.d.s",
	"fcvt.d.w",
	"fcvt.d.wu",
	"fcvt.h.d",
	"fcvt.h.l",
	"fcvt.h.lu",
	"fcvt.h.q",
	"fcvt.h.s",
	"fcvt.h.w",
	"fcvt.h.wu",
	"fcvt.l.d",
	"fcvt.l.h",
	"fcvt.l.q",
	"fcvt.l.s",
	"fcvt.lu.d",
	"fcvt.lu.h",
	"fcvt.lu.q",
	"fcvt.lu.s",
	"fcvt.q.d",
	"fcvt.q.h",
	"fcvt.q.l",
	"fcvt.q.lu",
	"fcvt.q.s",
	"fcvt.q.w",
	"fcvt.q.wu",
	"fcvt.s.bf16",
	"fcvt.s.d",
	"fcvt.s.h",
	"fcvt.s.l",
	"fcvt.s.lu",
	"fcvt.s.q",
	"fcvt.s.w",
	"fcvt.s.wu",
	"fcvt.w.d",
	"fcvt.w.h",
	"fcvt.w.q",
	"fcvt.w.s",
	"fcvt.wu.d",
	"fcvt.wu.h",
	"fcvt.wu.q",
	"fcvt.wu.s",
	"fcvtmod.w.d",
	"fdiv.d",
	"fdiv.h",
	"fdiv.q",
	"fdiv.s",
	"fence",
	"fence.i",
	"fence.tso",
	"feq.d",
	"feq.h",
	"feq.q",
	"feq.s",
	"fge.d",
	"fge.h",
	"fge.q",
	"fge.s",
	"fgt.d",
	"fgt.h",
	"fgt.q",
	"fgt.s",
	"fld",
	"fle.d",
	"fle.h",
	"fle.q",
	"fle.s",
	"fleq.d",
	"fleq.h",
	"fleq.q",
	"fleq.s",
	"flh",
	"fli.d",
	"fli.h",
	"fli.q",
	"fli.s",
	"flq",
	"flt.d",
	"flt.h",
	"flt.q",
	"flt.s",
	"fltq.d",
	"fltq.h",
	"fltq.q",
	"fltq.s",
	"flw",
	"fmadd.d",
	"fmadd.h",
	"fmadd.q",
	"fmadd.s",
	"fmax.d",
	"fmax.h",
	"fmax.q",
	"fmax.s",
	"fmaxm.d",
	"fmaxm.h",
	"fmaxm.q",
	"fmaxm.s",
	"fmin.d",
	"fmin.h",
	"fmin.q",
	"fmin.s",
	"fminm.d",
	"fminm.h",
	"fminm.q",
	"fminm.s",
	"fmsub.d",
	"fmsub.h",
	"fmsub.q",
	"fmsub.s",
	"fmul.d",
	"fmul.h",
	"fmul.q",
	"fmul.s",
	"fmv.d",
	"fmv.d.x",
	"fmv.h",
	"fmv.h.x",
	"fmv.q",
	"fmv.s",
	"fmv.s.x",
	"fmv.w.x",
	"fmv.x.d",
	"fmv.x.h",
	"fmv.x.s",
	"fmv.x.w",
	"fmvh.x.d",
	"fmvh.x.q",
	"fmvp.d.x",
	"fmvp.q.x",
	"fneg.d",
	"fneg.h",
	"fneg.q",
	"fneg.s",
	"fnmadd.d",
	"fnmadd.h",
	"fnmadd.q",
	"fnmadd.s",
	"fnmsub.d",
	"fnmsub.h",
	"fnmsub.q",
	"fnmsub.s",
	"frcsr",
	"frflags",
	"fround.d",
	"fround.h",
	"fround.q",
	"fround.s",
	"froundnx.d",
	"froundnx.h",
	"froundnx.q",
	"froundnx.s",
	"frrm",
	"fscsr",
	"fsd",
	"fsflags",
	"fsflagsi",
	"fsgnj.d",
	"fsgnj.h",
	"fsgnj.q",
	"fsgnj.s",
	"fsgnjn.d",
	"fsgnjn.h",
	"fsgnjn.q",
	"fsgnjn.s",
	"fsgnjx.d",
	"fsgnjx.h",
	"fsgnjx.q",
	"fsgnjx.s",
	"fsh",
	"fsq",
	"fsqrt.d",
	"fsqrt.h",
	"fsqrt.q",
	"fsqrt.s",
	"fsrm",
	"fsrmi",
	"fsub.d",
	"fsub.h",
	"fsub.q",
	"fsub.s",
	"fsw",
	"gorci",
	"grevi",
	"hfence.gvma",
	"hfence.vvma",
	"hinval.gvma",
	"hinval.vvma",
	"hlv.b",
	"hlv.bu",
	"hlv.d",
	"hlv.h",
	"hlv.hu",
	"hlv.w",
	"hlv.wu",
	"hlvx.hu",
	"hlvx.wu",
	"hsv.b",
	"hsv.d",
	"hsv.h",
	"hsv.w",
	"j",
	"jal",
	"jalr",
	"jr",
	"jump",
	"la",
	"lb",
	"lb.aq",
	"lbu",
	"ld",
	"ld.aq",
	"lga",
	"lh",
	"lh.aq",
	"lhu",
	"li",
	"lla",
	"lpad",
	"lr.b",
	"lr.d",
	"lr.h",
	"lr.w",
	"lui",
	"lw",
	"lw.aq",
	"lwu",
	"macc.h00",
	"macc.h01",
	"macc.h11",
	"macc.w00",
	"macc.w01",
	"macc.w11",
	"maccsu.h00",
	"maccsu.h11",
	"maccsu.w00",
	"maccsu.w11",
	"maccu.h00",
	"maccu.h01",
	"maccu.h11",
	"maccu.w00",
	"maccu.w01",
	"maccu.w11",
	"max",
	"maxu",
	"merge",
	"mhacc",
	"mhacc.h0",
	"mhacc.h1",
	"mhaccsu",
	"mhaccsu.h0",
	"mhaccsu.h1",
	"mhaccu",
	"mhracc",
	"mhraccsu",
	"mhraccu",
	"min",
	"minu",
	"mnret",
	"mop.r.0",
	"mop.r.1",
	"mop.r.10",
	"mop.r.11",
	"mop.r.12",
	"mop.r.13",
	"mop.r.14",
	"mop.r.15",
	"mop.r.16",
	"mop.r.17",
	"mop.r.18",
	"mop.r.19",
	"mop.r.2",
	"mop.r.20",
	"mop.r.21",
	"mop.r.22",
	"mop.r.23",
	"mop.r.24",
	"mop.r.25",
	"mop.r.26",
	"mop.r.27",
	"mop.r.28",
	"mop.r.29",
	"mop.r.3",
	"mop.r.30",
	"mop.r.31",
	"mop.r.4",
	"mop.r.5",
	"mop.r.6",
	"mop.r.7",
	"mop.r.8",
	"mop.r.9",
	"mop.r.N",
	"mop.rr.0",
	"mop.rr.1",
	"mop.rr.2",
	"mop.rr.3",
	"mop.rr.4",
	"mop.rr.5",
	"mop.rr.6",
	"mop.rr.7",
	"mop.rr.N",
	"mqacc.h00",
	"mqacc.h01",
	"mqacc.h11",
	"mqacc.w00",
	"mqacc.w01",
	"mqacc.w11",
	"mqracc.h00",
	"mqracc.h01",
	"mqracc.h11",
	"mqracc.w00",
	"mqracc.w01",
	"mqracc.w11",
	"mqrwacc",
	"mqwacc",
	"mret",
	"mseq",
	"mslt",
	"msltu",
	"mul",
	"mul.h00",
	"mul.h01",
	"mul.h11",
	"mul.w00",
	"mul.w01",
	"mul.w11",
	"mulh",
	"mulh.h0",
	"mulh.h1",
	"mulhr",
	"mulhrsu",
	"mulhru",
	"mulhsu",
	"mulhsu.h0",
	"mulhsu.h1",
	"mulhu",
	"mulq",
	"mulqr",
	"mulsu.h00",
	"mulsu.h11",
	"mulsu.w00",
	"mulsu.w11",
	"mulu.h00",
	"mulu.h01",
	"mulu.h11",
	"mulu.w00",
	"mulu.w01",
	"mulu.w11",
	"mulw",
	"mv",
	"mvm",
	"mvmn",
	"nclip",
	"nclipi",
	"nclipiu",
	"nclipr",
	"nclipri",
	"nclipriu",
	"nclipru",
	"nclipu",
	"neg",
	"negw",
	"nop",
	"not",
	"nsra",
	"nsrai",
	"nsrar",
	"nsrari",
	"nsrl",
	"nsrli",
	"ntl.all",
	"ntl.p1",
	"ntl.pall",
	"ntl.s1",
	"or",
	"orc.b",
	"ori",
	"orn",
	"paadd.b",
	"paadd.db",
	"paadd.dh",
	"paadd.dw",
	"paadd.h",
	"paadd.w",
	"paaddu.b",
	"paaddu.db",
	"paaddu.dh",
	"paaddu.dw",
	"paaddu.h",
	"paaddu.w",
	"paas.dhx",
	"paas.hx",
	"paas.wx",
	"pabd.b",
	"pabd.db",
	"pabd.dh",
	"pabd.h",
	"pabdsumau.b",
	"pabdsumu.b",
	"pabdu.b",
	"pabdu.db",
	"pabdu.dh",
	"pabdu.h",
	"pack",
	"packh",
	"packw",
	"padd.b",
	"padd.bs",
	"padd.db",
	"padd.dbs",
	"padd.dh",
	"padd.dhs",
	"padd.dw",
	"padd.dws",
	"padd.h",
	"padd.hs",
	"padd.w",
	"padd.ws",
	"pas.dhx",
	"pas.hx",
	"pas.wx",
	"pasa.dhx",
	"pasa.hx",
	"pasa.wx",
	"pasub.b",
	"pasub.db",
	"pasub.dh",
	"pasub.dw",
	"pasub.h",
	"pasub.w",
	"pasubu.b",
	"pasubu.db",
	"pasubu.dh",
	"pasubu.dw",
	"pasubu.h",
	"pasubu.w",
	"pause",
	"pli.b",
	"pli.db",
	"pli.dh",
	"pli.h",
	"pli.w",
	"plui.dh",
	"plui.h",
	"plui.w",
	"pm2add.h",
	"pm2add.hx",
	"pm2add.w",
	"pm2add.wx",
	"pm2adda.h",
	"pm2adda.hx",
	"pm2adda.w",
	"pm2adda.wx",
	"pm2addasu.h",
	"pm2addasu.w",
	"pm2addau.h",
	"pm2addau.w",
	"pm2addsu.h",
	"pm2addsu.w",
	"pm2addu.h",
	"pm2addu.w",
	"pm2sadd.h",
	"pm2sadd.hx",
	"pm2sub.h",
	"pm2sub.hx",
	"pm2sub.w",
	"pm2sub.wx",
	"pm2suba.h",
	"pm2suba.hx",
	"pm2suba.w",
	"pm2suba.wx",
	"pm2wadd.h",
	"pm2wadd.hx",
	"pm2wadda.h",
	"pm2wadda.hx",
	"pm2waddasu.h",
	"pm2waddau.h",
	"pm2waddsu.h",
	"pm2waddu.h",
	"pm2wsub.h",
	"pm2wsub.hx",
	"pm2wsuba.h",
	"pm2wsuba.hx",
	"pm4add.b",
	"pm4add.h",
	"pm4adda.b",
	"pm4adda.h",
	"pm4addasu.b",
	"pm4addasu.h",
	"pm4addau.b",
	"pm4addau.h",
	"pm4addsu.b",
	"pm4addsu.h",
	"pm4addu.b",
	"pm4addu.h",
	"pmacc.w.h00",
	"pmacc.w.h01",
	"pmacc.w.h11",
	"pmaccsu.w.h00",
	"pmaccsu.w.h11",
	"pmaccu.w.h00",
	"pmaccu.w.h01",
	"pmaccu.w.h11",
	"pmax.b",
	"pmax.db",
	"pmax.dh",
	"pmax.dw",
	"pmax.h",
	"pmax.w",
	"pmaxu.b",
	"pmaxu.db",
	"pmaxu.dh",
	"pmaxu.dw",
	"pmaxu.h",
	"pmaxu.w",
	"pmhacc.h",
	"pmhacc.h.b0",
	"pmhacc.h.b1",
	"pmhacc.w",
	"pmhacc.w.h0",
	"pmhacc.w.h1",
	"pmhaccsu.h",
	"pmhaccsu.h.b0",
	"pmhaccsu.h.b1",
	"pmhaccsu.w",
	"pmhaccsu.w.h0",
	"pmhaccsu.w.h1",
	"pmhaccu.h",
	"pmhaccu.w",
	"pmhracc.h",
	"pmhracc.w",
	"pmhraccsu.h",
	"pmhraccsu.w",
	"pmhraccu.h",
	"pmhraccu.w",
	"pmin.b",
	"pmin.db",
	"pmin.dh",
	"pmin.dw",
	"pmin.h",
	"pmin.w",
	"pminu.b",
	"pminu.db",
	"pminu.dh",
	"pminu.dw",
	"pminu.h",
	"pminu.w",
	"pmq2add.h",
	"pmq2add.w",
	"pmq2adda.h",
	"pmq2adda.w",
	"pmqacc.w.h00",
	"pmqacc.w.h01",
	"pmqacc.w.h11",
	"pmqr2add.h",
	"pmqr2add.w",
	"pmqr2adda.h",
	"pmqr2adda.w",
	"pmqracc.w.h00",
	"pmqracc.w.h01",
	"pmqracc.w.h11",
	"pmqrwacc.h",
	"pmqwacc.h",
	"pmseq.b",
	"pmseq.db",
	"pmseq.dh",
	"pmseq.dw",
	"pmseq.h",
	"pmseq.w",
	"pmslt.b",
	"pmslt.db",
	"pmslt.dh",
	"pmslt.dw",
	"pmslt.h",
	"pmslt.w",
	"pmsltu.b",
	"pmsltu.db",
	"pmsltu.dh",
	"pmsltu.dw",
	"pmsltu.h",
	"pmsltu.w",
	"pmul.h.b00",
	"pmul.h.b01",
	"pmul.h.b11",
	"pmul.w.h00",
	"pmul.w.h01",
	"pmul.w.h11",
	"pmulh.h",
	"pmulh.h.b0",
	"pmulh.h.b1",
	"pmulh.w",
	"pmulh.w.h0",
	"pmulh.w.h1",
	"pmulhr.h",
	"pmulhr.w",
	"pmulhrsu.h",
	"pmulhrsu.w",
	"pmulhru.h",
	"pmulhru.w",
	"pmulhsu.h",
	"pmulhsu.h.b0",
	"pmulhsu.h.b1",
	"pmulhsu.w",
	"pmulhsu.w.h0",
	"pmulhsu.w.h1",
	"pmulhu.h",
	"pmulhu.w",
	"pmulq.h",
	"pmulq.w",
	"pmulqr.h",
	"pmulqr.w",
	"pmulsu.h.b00",
	"pmulsu.h.b11",
	"pmulsu.w.h00",
	"pmulsu.w.h11",
	"pmulu.h.b00",
	"pmulu.h.b01",
	"pmulu.h.b11",
	"pmulu.w.h00",
	"pmulu.w.h01",
	"pmulu.w.h11",
	"pnclip.bs",
	"pnclip.hs",
	"pnclipi.b",
	"pnclipi.h",
	"pnclipiu.b",
	"pnclipiu.h",
	"pnclipp.b",
	"pnclipp.h",
	"pnclipp.w",
	"pnclipr.bs",
	"pnclipr.hs",
	"pnclipri.b",
	"pnclipri.h",
	"pnclipriu.b",
	"pnclipriu.h",
	"pnclipru.bs",
	"pnclipru.hs",
	"pnclipu.bs",
	"pnclipu.hs",
	"pnclipup.b",
	"pnclipup.h",
	"pnclipup.w",
	"pnsra.bs",
	"pnsra.hs",
	"pnsrai.b",
	"pnsrai.h",
	"pnsrar.bs",
	"pnsrar.hs",
	"pnsrari.b",
	"pnsrari.h",
	"pnsrl.bs",
	"pnsrl.hs",
	"pnsrli.b",
	"pnsrli.h",
	"ppaire.b",
	"ppaire.db",
	"ppaire.dh",
	"ppaire.h",
	"ppaireo.b",
	"ppaireo.db",
	"ppaireo.dh",
	"ppaireo.h",
	"ppaireo.w",
	"ppairo.b",
	"ppairo.db",
	"ppairo.dh",
	"ppairo.h",
	"ppairo.w",
	"ppairoe.b",
	"ppairoe.db",
	"ppairoe.dh",
	"ppairoe.h",
	"ppairoe.w",
	"predsum.bs",
	"predsum.dbs",
	"predsum.dhs",
	"predsum.hs",
	"predsum.ws",
	"predsumu.bs",
	"predsumu.dbs",
	"predsumu.dhs",
	"predsumu.hs",
	"predsumu.ws",
	"prefetch.i",
	"prefetch.r",
	"prefetch.w",
	"psa.dhx",
	"psa.hx",
	"psa.wx",
	"psabs.b",
	"psabs.db",
	"psabs.dh",
	"psabs.h",
	"psadd.b",
	"psadd.db",
	"psadd.dh",
	"psadd.dw",
	"psadd.h",
	"psadd.w",
	"psaddu.b",
	"psaddu.db",
	"psaddu.dh",
	"psaddu.dw",
	"psaddu.h",
	"psaddu.w",
	"psas.dhx",
	"psas.hx",
	"psas.wx",
	"psati.dh",
	"psati.dw",
	"psati.h",
	"psati.w",
	"psext.dh.b",
	"psext.dw.b",
	"psext.dw.h",
	"psext.h.b",
	"psext.w.b",
	"psext.w.h",
	"psh1add.dh",
	"psh1add.dw",
	"psh1add.h",
	"psh1add.w",
	"psll.bs",
	"psll.dbs",
	"psll.dhs",
	"psll.dws",
	"psll.hs",
	"psll.ws",
	"pslli.b",
	"pslli.db",
	"pslli.dh",
	"pslli.dw",
	"pslli.h",
	"pslli.w",
	"psra.bs",
	"psra.dbs",
	"psra.dhs",
	"psra.dws",
	"psra.hs",
	"psra.ws",
	"psrai.b",
	"psrai.db",
	"psrai.dh",
	"psrai.dw",
	"psrai.h",
	"psrai.w",
	"psrari.dh",
	"psrari.dw",
	"psrari.h",
	"psrari.w",
	"psrl.bs",
	"psrl.dbs",
	"psrl.dhs",
	"psrl.dws",
	"psrl.hs",
	"psrl.ws",
	"psrli.b",
	"psrli.db",
	"psrli.dh",
	"psrli.dw",
	"psrli.h",
	"psrli.w",
	"pssa.dhx",
	"pssa.hx",
	"pssa.wx",
	"pssh1sadd.dh",
	"pssh1sadd.dw",
	"pssh1sadd.h",
	"pssh1sadd.w",
	"pssha.dhs",
	"pssha.dws",
	"pssha.hs",
	"pssha.ws",
	"psshar.dhs",
	"psshar.dws",
	"psshar.hs",
	"psshar.ws",
	"psshl.dhs",
	"psshl.dws",
	"psshl.hs",
	"psshl.ws",
	"psshlr.dhs",
	"psshlr.dws",
	"psshlr.hs",
	"psshlr.ws",
	"psslai.dh",
	"psslai.dw",
	"psslai.h",
	"psslai.w",
	"pssub.b",
	"pssub.db",
	"pssub.dh",
	"pssub.dw",
	"pssub.h",
	"pssub.w",
	"pssubu.b",
	"pssubu.db",
	"pssubu.dh",
	"pssubu.dw",
	"pssubu.h",
	"pssubu.w",
	"psub.b",
	"psub.db",
	"psub.dh",
	"psub.dw",
	"psub.h",
	"psub.w",
	"pusati.dh",
	"pusati.dw",
	"pusati.h",
	"pusati.w",
	"pwadd.b",
	"pwadd.h",
	"pwadda.b",
	"pwadda.h",
	"pwaddau.b",
	"pwaddau.h",
	"pwaddu.b",
	"pwaddu.h",
	"pwmacc.h",
	"pwmaccsu.h",
	"pwmaccu.h",
	"pwmul.b",
	"pwmul.h",
	"pwmulsu.b",
	"pwmulsu.h",
	"pwmulu.b",
	"pwmulu.h",
	"pwsla.bs",
	"pwsla.hs",
	"pwslai.b",
	"pwslai.h",
	"pwsll.bs",
	"pwsll.hs",
	"pwslli.b",
	"pwslli.h",
	"pwsub.b",
	"pwsub.h",
	"pwsuba.b",
	"pwsuba.h",
	"pwsubau.b",
	"pwsubau.h",
	"pwsubu.b",
	"pwsubu.h",
	"rdcycle",
	"rdcycleh",
	"rdinstret",
	"rdinstreth",
	"rdtime",
	"rdtimeh",
	"rem",
	"remu",
	"remuw",
	"remw",
	"ret",
	"rev",
	"rev.rv32",
	"rev16",
	"rev8",
	"rev8.rv32",
	"rol",
	"rolw",
	"ror",
	"rori",
	"rori.rv32",
	"roriw",
	"rorw",
	"sadd",
	"saddu",
	"sati",
	"sati.rv32",
	"sb",
	"sb.rl",
	"sbreak",
	"sc.b",
	"sc.d",
	"sc.h",
	"sc.w",
	"scall",
	"sctrclr",
	"sd",
	"sd.rl",
	"seqz",
	"sext.b",
	"sext.h",
	"sext.w",
	"sfence.inval.ir",
	"sfence.vma",
	"sfence.w.inval",
	"sgt",
	"sgtu",
	"sgtz",
	"sh",
	"sh.rl",
	"sh1add",
	"sh1add.uw",
	"sh2add",
	"sh2add.uw",
	"sh3add",
	"sh3add.uw",
	"sha",
	"sha256sig0",
	"sha256sig1",
	"sha256sum0",
	"sha256sum1",
	"sha512sig0",
	"sha512sig0h",
	"sha512sig0l",
	"sha512sig1",
	"sha512sig1h",
	"sha512sig1l",
	"sha512sum0",
	"sha512sum0r",
	"sha512sum1",
	"sha512sum1r",
	"shar",
	"shfli",
	"shl",
	"shlr",
	"sinval.vma",
	"sll",
	"slli",
	"slli.uw",
	"slli_rv32",
	"slliw",
	"sllw",
	"slt",
	"slti",
	"sltiu",
	"sltu",
	"sltz",
	"slx",
	"sm3p0",
	"sm3p1",
	"sm4ed",
	"sm4ks",
	"snez",
	"sra",
	"srai",
	"srai_rv32",
	"sraiw",
	"srari",
	"srari.rv32",
	"sraw",
	"sret",
	"srl",
	"srli",
	"srli_rv32",
	"srliw",
	"srlw",
	"srx",
	"ssamoswap.d",
	"ssamoswap.w",
	"ssh1sadd",
	"ssha",
	"sshar",
	"sshl",
	"sshlr",
	"sslai",
	"sspopchk.x1",
	"sspopchk.x5",
	"sspush.x1",
	"sspush.x5",
	"ssrdp",
	"ssub",
	"ssubu",
	"sub",
	"subd",
	"subw",
	"sw",
	"sw.rl",
	"tail",
	"unimp",
	"unshfli",
	"unzip",
	"unzip16hp",
	"unzip16p",
	"unzip8hp",
	"unzip8p",
	"usati",
	"usati.rv32",
	"vaadd.vv",
	"vaadd.vx",
	"vaaddu.vv",
	"vaaddu.vx",
	"vabd.vv",
	"vabdu.vv",
	"vabs.v",
	"vadc.vim",
	"vadc.vvm",
	"vadc.vxm",
	"vadd.vi",
	"vadd.vv",
	"vadd.vx",
	"vaesdf.vs",
	"vaesdf.vv",
	"vaesdm.vs",
	"vaesdm.vv",
	"vaesef.vs",
	"vaesef.vv",
	"vaesem.vs",
	"vaesem.vv",
	"vaeskf1.vi",
	"vaeskf2.vi",
	"vaesz.vs",
	"vand.vi",
	"vand.vv",
	"vand.vx",
	"vandn.vv",
	"vandn.vx",
	"vasub.vv",
	"vasub.vx",
	"vasubu.vv",
	"vasubu.vx",
	"vbrev.v",
	"vbrev8.v",
	"vclmul.vv",
	"vclmul.vx",
	"vclmulh.vv",
	"vclmulh.vx",
	"vclz.v",
	"vcompress.vm",
	"vcpop.m",
	"vcpop.v",
	"vctz.v",
	"vdiv.vv",
	"vdiv.vx",
	"vdivu.vv",
	"vdivu.vx",
	"vdot4a.vv",
	"vdot4a.vx",
	"vdot4asu.vv",
	"vdot4asu.vx",
	"vdot4au.vv",
	"vdot4au.vx",
	"vdot4aus.vx",
	"vfadd.vf",
	"vfadd.vv",
	"vfbdota.vv",
	"vfclass.v",
	"vfcvt.f.x.v",
	"vfcvt.f.xu.v",
	"vfcvt.rtz.x.f.v",
	"vfcvt.rtz.xu.f.v",
	"vfcvt.x.f.v",
	"vfcvt.xu.f.v",
	"vfdiv.vf",
	"vfdiv.vv",
	"vfext.vf2",
	"vfirst.m",
	"vfmacc.vf",
	"vfmacc.vv",
	"vfmadd.vf",
	"vfmadd.vv",
	"vfmax.vf",
	"vfmax.vv",
	"vfmerge.vfm",
	"vfmin.vf",
	"vfmin.vv",
	"vfmsac.vf",
	"vfmsac.vv",
	"vfmsub.vf",
	"vfmsub.vv",
	"vfmul.vf",
	"vfmul.vv",
	"vfmv.f.s",
	"vfmv.s.f",
	"vfmv.v.f",
	"vfncvt.f.f.q",
	"vfncvt.f.f.w",
	"vfncvt.f.x.w",
	"vfncvt.f.xu.w",
	"vfncvt.rod.f.f.w",
	"vfncvt.rtz.x.f.w",
	"vfncvt.rtz.xu.f.w",
	"vfncvt.sat.f.f.q",
	"vfncvt.x.f.w",
	"vfncvt.xu.f.w",
	"vfncvtbf16.f.f.w",
	"vfncvtbf16.sat.f.f.w",
	"vfnmacc.vf",
	"vfnmacc.vv",
	"vfnmadd.vf",
	"vfnmadd.vv",
	"vfnmsac.vf",
	"vfnmsac.vv",
	"vfnmsub.vf",
	"vfnmsub.vv",
	"vfqwbdota.alt.vv",
	"vfqwbdota.vv",
	"vfqwdota.alt.vv",
	"vfqwdota.vv",
	"vfrdiv.vf",
	"vfrec7.v",
	"vfredmax.vs",
	"vfredmin.vs",
	"vfredosum.vs",
	"vfredsum.vs",
	"vfredusum.vs",
	"vfrsqrt7.v",
	"vfrsub.vf",
	"vfsgnj.vf",
	"vfsgnj.vv",
	"vfsgnjn.vf",
	"vfsgnjn.vv",
	"vfsgnjx.vf",
	"vfsgnjx.vv",
	"vfslide1down.vf",
	"vfslide1up.vf",
	"vfsqrt.v",
	"vfsub.vf",
	"vfsub.vv",
	"vfwadd.vf",
	"vfwadd.vv",
	"vfwadd.wf",
	"vfwadd.wv",
	"vfwbdota.vv",
	"vfwcvt.f.f.v",
	"vfwcvt.f.x.v",
	"vfwcvt.f.xu.v",
	"vfwcvt.rtz.x.f.v",
	"vfwcvt.rtz.xu.f.v",
	"vfwcvt.x.f.v",
	"vfwcvt.xu.f.v",
	"vfwcvtbf16.f.f.v",
	"vfwdota.vv",
	"vfwmacc.vf",
	"vfwmacc.vv",
	"vfwmaccbf16.vf",
	"vfwmaccbf16.vv",
	"vfwmsac.vf",
	"vfwmsac.vv",
	"vfwmul.vf",
	"vfwmul.vv",
	"vfwnmacc.vf",
	"vfwnmacc.vv",
	"vfwnmsac.vf",
	"vfwnmsac.vv",
	"vfwredosum.vs",
	"vfwredsum.vs",
	"vfwredusum.vs",
	"vfwsub.vf",
	"vfwsub.vv",
	"vfwsub.wf",
	"vfwsub.wv",
	"vghsh.vv",
	"vgmul.vv",
	"vid.v",
	"viota.m",
	"vl1r.v",
	"vl1re16.v",
	"vl1re32.v",
	"vl1re64.v",
	"vl1re8.v",
	"vl2r.v",
	"vl2re16.v",
	"vl2re32.v",
	"vl2re64.v",
	"vl2re8.v",
	"vl4r.v",
	"vl4re16.v",
	"vl4re32.v",
	"vl4re64.v",
	"vl4re8.v",
	"vl8r.v",
	"vl8re16.v",
	"vl8re32.v",
	"vl8re64.v",
	"vl8re8.v",
	"vle1.v",
	"vle16.v",
	"vle16ff.v",
	"vle32.v",
	"vle32ff.v",
	"vle64.v",
	"vle64ff.v",
	"vle8.v",
	"vle8ff.v",
	"vlm.v",
	"vloxei16.v",
	"vloxei32.v",
	"vloxei64.v",
	"vloxei8.v",
	"vlse16.v",
	"vlse32.v",
	"vlse64.v",
	"vlse8.v",
	"vluxei16.v",
	"vluxei32.v",
	"vluxei64.v",
	"vluxei8.v",
	"vmacc.vv",
	"vmacc.vx",
	"vmadc.vi",
	"vmadc.vim",
	"vmadc.vv",
	"vmadc.vvm",
	"vmadc.vx",
	"vmadc.vxm",
	"vmadd.vv",
	"vmadd.vx",
	"vmand.mm",
	"vmandn.mm",
	"vmandnot.mm",
	"vmax.vv",
	"vmax.vx",
	"vmaxu.vv",
	"vmaxu.vx",
	"vmerge.vim",
	"vmerge.vvm",
	"vmerge.vxm",
	"vmfeq.vf",
	"vmfeq.vv",
	"vmfge.vf",
	"vmfgt.vf",
	"vmfle.vf",
	"vmfle.vv",
	"vmflt.vf",
	"vmflt.vv",
	"vmfne.vf",
	"vmfne.vv",
	"vmin.vv",
	"vmin.vx",
	"vminu.vv",
	"vminu.vx",
	"vmnand.mm",
	"vmnor.mm",
	"vmor.mm",
	"vmorn.mm",
	"vmornot.mm",
	"vmsbc.vv",
	"vmsbc.vvm",
	"vmsbc.vx",
	"vmsbc.vxm",
	"vmsbf.m",
	"vmseq.vi",
	"vmseq.vv",
	"vmseq.vx",
	"vmsgt.vi",
	"vmsgt.vx",
	"vmsgtu.vi",
	"vmsgtu.vx",
	"vmsif.m",
	"vmsle.vi",
	"vmsle.vv",
	"vmsle.vx",
	"vmsleu.vi",
	"vmsleu.vv",
	"vmsleu.vx",
	"vmslt.vv",
	"vmslt.vx",
	"vmsltu.vv",
	"vmsltu.vx",
	"vmsne.vi",
	"vmsne.vv",
	"vmsne.vx",
	"vmsof.m",
	"vmul.vv",
	"vmul.vx",
	"vmulh.vv",
	"vmulh.vx",
	"vmulhsu.vv",
	"vmulhsu.vx",
	"vmulhu.vv",
	"vmulhu.vx",
	"vmv.s.x",
	"vmv.v.i",
	"vmv.v.v",
	"vmv.v.x",
	"vmv.x.s",
	"vmv1r.v",
	"vmv2r.v",
	"vmv4r.v",
	"vmv8r.v",
	"vmxnor.mm",
	"vmxor.mm",
	"vnclip.wi",
	"vnclip.wv",
	"vnclip.wx",
	"vnclipu.wi",
	"vnclipu.wv",
	"vnclipu.wx",
	"vnmsac.vv",
	"vnmsac.vx",
	"vnmsub.vv",
	"vnmsub.vx",
	"vnsra.wi",
	"vnsra.wv",
	"vnsra.wx",
	"vnsrl.wi",
	"vnsrl.wv",
	"vnsrl.wx",
	"vor.vi",
	"vor.vv",
	"vor.vx",
	"vpaire.vv",
	"vpairo.vv",
	"vpopc.m",
	"vqwbdotas.vv",
	"vqwbdotau.vv",
	"vqwdotas.vv",
	"vqwdotau.vv",
	"vredand.vs",
	"vredmax.vs",
	"vredmaxu.vs",
	"vredmin.vs",
	"vredminu.vs",
	"vredor.vs",
	"vredsum.vs",
	"vredxor.vs",
	"vrem.vv",
	"vrem.vx",
	"vremu.vv",
	"vremu.vx",
	"vrev8.v",
	"vrgather.vi",
	"vrgather.vv",
	"vrgather.vx",
	"vrgatherei16.vv",
	"vrol.vv",
	"vrol.vx",
	"vror.vi",
	"vror.vv",
	"vror.vx",
	"vrsub.vi",
	"vrsub.vx",
	"vs1r.v",
	"vs2r.v",
	"vs4r.v",
	"vs8r.v",
	"vsadd.vi",
	"vsadd.vv",
	"vsadd.vx",
	"vsaddu.vi",
	"vsaddu.vv",
	"vsaddu.vx",
	"vsbc.vvm",
	"vsbc.vxm",
	"vse1.v",
	"vse16.v",
	"vse32.v",
	"vse64.v",
	"vse8.v",
	"vsetivli",
	"vsetvl",
	"vsetvli",
	"vsext.vf2",
	"vsext.vf4",
	"vsext.vf8",
	"vsha2ch.vv",
	"vsha2cl.vv",
	"vsha2ms.vv",
	"vslide1down.vx",
	"vslide1up.vx",
	"vslidedown.vi",
	"vslidedown.vx",
	"vslideup.vi",
	"vslideup.vx",
	"vsll.vi",
	"vsll.vv",
	"vsll.vx",
	"vsm.v",
	"vsm3c.vi",
	"vsm3me.vv",
	"vsm4k.vi",
	"vsm4r.vs",
	"vsm4r.vv",
	"vsmul.vv",
	"vsmul.vx",
	"vsoxei16.v",
	"vsoxei32.v",
	"vsoxei64.v",
	"vsoxei8.v",
	"vsra.vi",
	"vsra.vv",
	"vsra.vx",
	"vsrl.vi",
	"vsrl.vv",
	"vsrl.vx",
	"vsse16.v",
	"vsse32.v",
	"vsse64.v",
	"vsse8.v",
	"vssra.vi",
	"vssra.vv",
	"vssra.vx",
	"vssrl.vi",
	"vssrl.vv",
	"vssrl.vx",
	"vssub.vv",
	"vssub.vx",
	"vssubu.vv",
	"vssubu.vx",
	"vsub.vv",
	"vsub.vx",
	"vsuxei16.v",
	"vsuxei32.v",
	"vsuxei64.v",
	"vsuxei8.v",
	"vunzipe.v",
	"vunzipo.v",
	"vwabda.vv",
	"vwabdau.vv",
	"vwadd.vv",
	"vwadd.vx",
	"vwadd.wv",
	"vwadd.wx",
	"vwaddu.vv",
	"vwaddu.vx",
	"vwaddu.wv",
	"vwaddu.wx",
	"vwmacc.vv",
	"vwmacc.vx",
	"vwmaccsu.vv",
	"vwmaccsu.vx",
	"vwmaccu.vv",
	"vwmaccu.vx",
	"vwmaccus.vx",
	"vwmul.vv",
	"vwmul.vx",
	"vwmulsu.vv",
	"vwmulsu.vx",
	"vwmulu.vv",
	"vwmulu.vx",
	"vwredsum.vs",
	"vwredsumu.vs",
	"vwsll.vi",
	"vwsll.vv",
	"vwsll.vx",
	"vwsub.vv",
	"vwsub.vx",
	"vwsub.wv",
	"vwsub.wx",
	"vwsubu.vv",
	"vwsubu.vx",
	"vwsubu.wv",
	"vwsubu.wx",
	"vxor.vi",
	"vxor.vv",
	"vxor.vx",
	"vzext.vf2",
	"vzext.vf4",
	"vzext.vf8",
	"vzip.vv",
	"wadd",
	"wadda",
	"waddau",
	"waddu",
	"wfi",
	"wmacc",
	"wmaccsu",
	"wmaccu",
	"wmul",
	"wmulsu",
	"wmulu",
	"wrs.nto",
	"wrs.sto",
	"wsla",
	"wslai",
	"wsll",
	"wslli",
	"wsub",
	"wsuba",
	"wsubau",
	"wsubu",
	"wzip16p",
	"wzip8p",
	"xnor",
	"xor",
	"xori",
	"xperm16",
	"xperm32",
	"xperm4",
	"xperm8",
	"zext.b",
	"zext.h",
	"zext.h.rv32",
	"zext.w",
	"zip",
	"zip16hp",
	"zip16p",
	"zip8hp",
	"zip8p",
}

local registers = {
	"a0",
	"a1",
	"a2",
	"a3",
	"a4",
	"a5",
	"a6",
	"a7",
	"f0",
	"f1",
	"f10",
	"f11",
	"f12",
	"f13",
	"f14",
	"f15",
	"f16",
	"f17",
	"f18",
	"f19",
	"f2",
	"f20",
	"f21",
	"f22",
	"f23",
	"f24",
	"f25",
	"f26",
	"f27",
	"f28",
	"f29",
	"f3",
	"f30",
	"f31",
	"f4",
	"f5",
	"f6",
	"f7",
	"f8",
	"f9",
	"fa0",
	"fa1",
	"fa2",
	"fa3",
	"fa4",
	"fa5",
	"fa6",
	"fa7",
	"fp",
	"fs0",
	"fs1",
	"fs10",
	"fs11",
	"fs2",
	"fs3",
	"fs4",
	"fs5",
	"fs6",
	"fs7",
	"fs8",
	"fs9",
	"ft0",
	"ft1",
	"ft10",
	"ft11",
	"ft2",
	"ft3",
	"ft4",
	"ft5",
	"ft6",
	"ft7",
	"ft8",
	"ft9",
	"gp",
	"pc",
	"ra",
	"s0",
	"s1",
	"s10",
	"s11",
	"s2",
	"s3",
	"s4",
	"s5",
	"s6",
	"s7",
	"s8",
	"s9",
	"sp",
	"t0",
	"t1",
	"t2",
	"t3",
	"t4",
	"t5",
	"t6",
	"tp",
	"v0",
	"v0.t",
	"v1",
	"v10",
	"v11",
	"v12",
	"v13",
	"v14",
	"v15",
	"v16",
	"v17",
	"v18",
	"v19",
	"v2",
	"v20",
	"v21",
	"v22",
	"v23",
	"v24",
	"v25",
	"v26",
	"v27",
	"v28",
	"v29",
	"v3",
	"v30",
	"v31",
	"v4",
	"v5",
	"v6",
	"v7",
	"v8",
	"v9",
	"x0",
	"x1",
	"x10",
	"x11",
	"x12",
	"x13",
	"x14",
	"x15",
	"x16",
	"x17",
	"x18",
	"x19",
	"x2",
	"x20",
	"x21",
	"x22",
	"x23",
	"x24",
	"x25",
	"x26",
	"x27",
	"x28",
	"x29",
	"x3",
	"x30",
	"x31",
	"x4",
	"x5",
	"x6",
	"x7",
	"x8",
	"x9",
	"zero",
}

local control_status_registers = {
	"cycle",
	"cycleh",
	"dcsr",
	"dpc",
	"dscratch0",
	"dscratch1",
	"fcsr",
	"fflags",
	"frm",
	"hcontext",
	"hcounteren",
	"hedeleg",
	"hedelegh",
	"henvcfg",
	"henvcfgh",
	"hgatp",
	"hgeie",
	"hgeip",
	"hideleg",
	"hidelegh",
	"hie",
	"hip",
	"hpmcounter10",
	"hpmcounter10h",
	"hpmcounter11",
	"hpmcounter11h",
	"hpmcounter12",
	"hpmcounter12h",
	"hpmcounter13",
	"hpmcounter13h",
	"hpmcounter14",
	"hpmcounter14h",
	"hpmcounter15",
	"hpmcounter15h",
	"hpmcounter16",
	"hpmcounter16h",
	"hpmcounter17",
	"hpmcounter17h",
	"hpmcounter18",
	"hpmcounter18h",
	"hpmcounter19",
	"hpmcounter19h",
	"hpmcounter20",
	"hpmcounter20h",
	"hpmcounter21",
	"hpmcounter21h",
	"hpmcounter22",
	"hpmcounter22h",
	"hpmcounter23",
	"hpmcounter23h",
	"hpmcounter24",
	"hpmcounter24h",
	"hpmcounter25",
	"hpmcounter25h",
	"hpmcounter26",
	"hpmcounter26h",
	"hpmcounter27",
	"hpmcounter27h",
	"hpmcounter28",
	"hpmcounter28h",
	"hpmcounter29",
	"hpmcounter29h",
	"hpmcounter3",
	"hpmcounter30",
	"hpmcounter30h",
	"hpmcounter31",
	"hpmcounter31h",
	"hpmcounter3h",
	"hpmcounter4",
	"hpmcounter4h",
	"hpmcounter5",
	"hpmcounter5h",
	"hpmcounter6",
	"hpmcounter6h",
	"hpmcounter7",
	"hpmcounter7h",
	"hpmcounter8",
	"hpmcounter8h",
	"hpmcounter9",
	"hpmcounter9h",
	"hstateen0",
	"hstateen0h",
	"hstateen1",
	"hstateen1h",
	"hstateen2",
	"hstateen2h",
	"hstateen3",
	"hstateen3h",
	"hstatus",
	"htimedelta",
	"htimedeltah",
	"htinst",
	"htval",
	"hvictl",
	"hvien",
	"hvienh",
	"hvip",
	"hviph",
	"hviprio1",
	"hviprio1h",
	"hviprio2",
	"hviprio2h",
	"instret",
	"instreth",
	"jvt",
	"marchid",
	"mcause",
	"mconfigptr",
	"mcontext",
	"mcounteren",
	"mcountinhibit",
	"mctrctl",
	"mcycle",
	"mcyclecfg",
	"mcyclecfgh",
	"mcycleh",
	"medeleg",
	"medelegh",
	"menvcfg",
	"menvcfgh",
	"mepc",
	"mhartid",
	"mhpmcounter10",
	"mhpmcounter10h",
	"mhpmcounter11",
	"mhpmcounter11h",
	"mhpmcounter12",
	"mhpmcounter12h",
	"mhpmcounter13",
	"mhpmcounter13h",
	"mhpmcounter14",
	"mhpmcounter14h",
	"mhpmcounter15",
	"mhpmcounter15h",
	"mhpmcounter16",
	"mhpmcounter16h",
	"mhpmcounter17",
	"mhpmcounter17h",
	"mhpmcounter18",
	"mhpmcounter18h",
	"mhpmcounter19",
	"mhpmcounter19h",
	"mhpmcounter20",
	"mhpmcounter20h",
	"mhpmcounter21",
	"mhpmcounter21h",
	"mhpmcounter22",
	"mhpmcounter22h",
	"mhpmcounter23",
	"mhpmcounter23h",
	"mhpmcounter24",
	"mhpmcounter24h",
	"mhpmcounter25",
	"mhpmcounter25h",
	"mhpmcounter26",
	"mhpmcounter26h",
	"mhpmcounter27",
	"mhpmcounter27h",
	"mhpmcounter28",
	"mhpmcounter28h",
	"mhpmcounter29",
	"mhpmcounter29h",
	"mhpmcounter3",
	"mhpmcounter30",
	"mhpmcounter30h",
	"mhpmcounter31",
	"mhpmcounter31h",
	"mhpmcounter3h",
	"mhpmcounter4",
	"mhpmcounter4h",
	"mhpmcounter5",
	"mhpmcounter5h",
	"mhpmcounter6",
	"mhpmcounter6h",
	"mhpmcounter7",
	"mhpmcounter7h",
	"mhpmcounter8",
	"mhpmcounter8h",
	"mhpmcounter9",
	"mhpmcounter9h",
	"mhpmevent10",
	"mhpmevent10h",
	"mhpmevent11",
	"mhpmevent11h",
	"mhpmevent12",
	"mhpmevent12h",
	"mhpmevent13",
	"mhpmevent13h",
	"mhpmevent14",
	"mhpmevent14h",
	"mhpmevent15",
	"mhpmevent15h",
	"mhpmevent16",
	"mhpmevent16h",
	"mhpmevent17",
	"mhpmevent17h",
	"mhpmevent18",
	"mhpmevent18h",
	"mhpmevent19",
	"mhpmevent19h",
	"mhpmevent20",
	"mhpmevent20h",
	"mhpmevent21",
	"mhpmevent21h",
	"mhpmevent22",
	"mhpmevent22h",
	"mhpmevent23",
	"mhpmevent23h",
	"mhpmevent24",
	"mhpmevent24h",
	"mhpmevent25",
	"mhpmevent25h",
	"mhpmevent26",
	"mhpmevent26h",
	"mhpmevent27",
	"mhpmevent27h",
	"mhpmevent28",
	"mhpmevent28h",
	"mhpmevent29",
	"mhpmevent29h",
	"mhpmevent3",
	"mhpmevent30",
	"mhpmevent30h",
	"mhpmevent31",
	"mhpmevent31h",
	"mhpmevent3h",
	"mhpmevent4",
	"mhpmevent4h",
	"mhpmevent5",
	"mhpmevent5h",
	"mhpmevent6",
	"mhpmevent6h",
	"mhpmevent7",
	"mhpmevent7h",
	"mhpmevent8",
	"mhpmevent8h",
	"mhpmevent9",
	"mhpmevent9h",
	"mideleg",
	"midelegh",
	"mie",
	"mieh",
	"mimpid",
	"minstret",
	"minstretcfg",
	"minstretcfgh",
	"minstreth",
	"mintstatus",
	"mip",
	"miph",
	"mireg",
	"mireg2",
	"mireg3",
	"mireg4",
	"mireg5",
	"mireg6",
	"misa",
	"miselect",
	"mncause",
	"mnepc",
	"mnscratch",
	"mnstatus",
	"mnxti",
	"mpmpdeleg",
	"mscontext",
	"mscratch",
	"mscratchcsw",
	"mscratchcswl",
	"mseccfg",
	"mseccfgh",
	"mstateen0",
	"mstateen0h",
	"mstateen1",
	"mstateen1h",
	"mstateen2",
	"mstateen2h",
	"mstateen3",
	"mstateen3h",
	"mstatus",
	"mstatush",
	"mtinst",
	"mtopei",
	"mtopi",
	"mtval",
	"mtval2",
	"mtvec",
	"mtvt",
	"mvendorid",
	"mvien",
	"mvienh",
	"mvip",
	"mviph",
	"pmpaddr0",
	"pmpaddr1",
	"pmpaddr10",
	"pmpaddr11",
	"pmpaddr12",
	"pmpaddr13",
	"pmpaddr14",
	"pmpaddr15",
	"pmpaddr16",
	"pmpaddr17",
	"pmpaddr18",
	"pmpaddr19",
	"pmpaddr2",
	"pmpaddr20",
	"pmpaddr21",
	"pmpaddr22",
	"pmpaddr23",
	"pmpaddr24",
	"pmpaddr25",
	"pmpaddr26",
	"pmpaddr27",
	"pmpaddr28",
	"pmpaddr29",
	"pmpaddr3",
	"pmpaddr30",
	"pmpaddr31",
	"pmpaddr32",
	"pmpaddr33",
	"pmpaddr34",
	"pmpaddr35",
	"pmpaddr36",
	"pmpaddr37",
	"pmpaddr38",
	"pmpaddr39",
	"pmpaddr4",
	"pmpaddr40",
	"pmpaddr41",
	"pmpaddr42",
	"pmpaddr43",
	"pmpaddr44",
	"pmpaddr45",
	"pmpaddr46",
	"pmpaddr47",
	"pmpaddr48",
	"pmpaddr49",
	"pmpaddr5",
	"pmpaddr50",
	"pmpaddr51",
	"pmpaddr52",
	"pmpaddr53",
	"pmpaddr54",
	"pmpaddr55",
	"pmpaddr56",
	"pmpaddr57",
	"pmpaddr58",
	"pmpaddr59",
	"pmpaddr6",
	"pmpaddr60",
	"pmpaddr61",
	"pmpaddr62",
	"pmpaddr63",
	"pmpaddr7",
	"pmpaddr8",
	"pmpaddr9",
	"pmpcfg0",
	"pmpcfg1",
	"pmpcfg10",
	"pmpcfg11",
	"pmpcfg12",
	"pmpcfg13",
	"pmpcfg14",
	"pmpcfg15",
	"pmpcfg2",
	"pmpcfg3",
	"pmpcfg4",
	"pmpcfg5",
	"pmpcfg6",
	"pmpcfg7",
	"pmpcfg8",
	"pmpcfg9",
	"satp",
	"scause",
	"scontext",
	"scounteren",
	"scountinhibit",
	"scountovf",
	"sctrctl",
	"sctrdepth",
	"sctrstatus",
	"seed",
	"senvcfg",
	"sepc",
	"sie",
	"sieh",
	"sintstatus",
	"sip",
	"siph",
	"sireg",
	"sireg2",
	"sireg3",
	"sireg4",
	"sireg5",
	"sireg6",
	"siselect",
	"snxti",
	"spmpen",
	"spmpenh",
	"srmcfg",
	"sscratch",
	"sscratchcsw",
	"sscratchcswl",
	"ssp",
	"sstateen0",
	"sstateen1",
	"sstateen2",
	"sstateen3",
	"sstatus",
	"stimecmp",
	"stimecmph",
	"stopei",
	"stopi",
	"stval",
	"stvec",
	"stvt",
	"tcontrol",
	"tdata1",
	"tdata2",
	"tdata3",
	"time",
	"timeh",
	"tinfo",
	"tselect",
	"uintstatus",
	"unxti",
	"uscratchcsw",
	"uscratchcswl",
	"utvt",
	"vcsr",
	"vl",
	"vlenb",
	"vsatp",
	"vscause",
	"vsctrctl",
	"vsepc",
	"vsie",
	"vsieh",
	"vsip",
	"vsiph",
	"vsireg",
	"vsireg2",
	"vsireg3",
	"vsireg4",
	"vsireg5",
	"vsireg6",
	"vsiselect",
	"vsscratch",
	"vsstatus",
	"vstart",
	"vstimecmp",
	"vstimecmph",
	"vstopei",
	"vstopi",
	"vstval",
	"vstvec",
	"vtype",
	"vxrm",
	"vxsat",
}

local directives = {
	".2byte",
	".4byte",
	".8byte",
	".abort",
	".align",
	".altmacro",
	".ascii",
	".asciz",
	".attribute",
	".balign",
	".balignl",
	".balignw",
	".bfloat16",
	".bss",
	".bundle_align_mode",
	".bundle_lock",
	".bundle_unlock",
	".byte",
	".cfi_adjust_cfa_offset",
	".cfi_def_cfa",
	".cfi_def_cfa_offset",
	".cfi_def_cfa_register",
	".cfi_endproc",
	".cfi_escape",
	".cfi_offset",
	".cfi_register",
	".cfi_rel_offset",
	".cfi_remember_state",
	".cfi_restore",
	".cfi_restore_state",
	".cfi_sections",
	".cfi_signal_frame",
	".cfi_startproc",
	".cfi_undefined",
	".comm",
	".common",
	".data",
	".dc",
	".dc.a",
	".dc.b",
	".dc.d",
	".dc.l",
	".dc.s",
	".dc.w",
	".dc.x",
	".desc",
	".dim",
	".double",
	".dtpreldword",
	".dtprelword",
	".eject",
	".else",
	".elseif",
	".end",
	".endfunc",
	".endif",
	".endm",
	".endr",
	".equ",
	".equiv",
	".eqv",
	".err",
	".error",
	".exitm",
	".extern",
	".fail",
	".file",
	".fill",
	".float",
	".func",
	".global",
	".globl",
	".gnu_attribute",
	".half",
	".hidden",
	".hword",
	".ident",
	".if",
	".ifb",
	".ifc",
	".ifdef",
	".ifeq",
	".ifeqs",
	".ifge",
	".ifgt",
	".ifle",
	".iflt",
	".ifnb",
	".ifnc",
	".ifndef",
	".ifne",
	".ifnes",
	".incbin",
	".include",
	".insn",
	".int",
	".internal",
	".irp",
	".irpc",
	".lcomm",
	".lflags",
	".line",
	".linkonce",
	".list",
	".local",
	".long",
	".macro",
	".nolist",
	".octa",
	".offset",
	".option",
	".org",
	".p2align",
	".p2alignl",
	".p2alignw",
	".popsection",
	".previous",
	".print",
	".protected",
	".psize",
	".purgem",
	".pushsection",
	".quad",
	".reloc",
	".rept",
	".rodata",
	".sbttl",
	".section",
	".set",
	".short",
	".single",
	".size",
	".skip",
	".sleb128",
	".space",
	".stabd",
	".stabn",
	".stabs",
	".string",
	".string16",
	".string32",
	".string64",
	".struct",
	".subsection",
	".symver",
	".tag",
	".text",
	".title",
	".type",
	".uleb128",
	".val",
	".variant_cc",
	".version",
	".vtable_entry",
	".vtable_inherit",
	".warning",
	".weak",
	".weakref",
	".word",
	".zero",
}

local options = {
	"Tag_RISCV_arch",
	"Tag_RISCV_priv_spec",
	"Tag_RISCV_priv_spec_minor",
	"Tag_RISCV_priv_spec_revision",
	"Tag_RISCV_stack_align",
	"Tag_RISCV_unaligned_access",
	"arch",
	"csr-check",
	"dyn",
	"e128",
	"e16",
	"e32",
	"e64",
	"e8",
	"m1",
	"m2",
	"m4",
	"m8",
	"ma",
	"mf2",
	"mf4",
	"mf8",
	"mu",
	"no-csr-check",
	"nopic",
	"norelax",
	"norvc",
	"pic",
	"pop",
	"push",
	"rdn",
	"relax",
	"rmm",
	"rne",
	"rtz",
	"rup",
	"rvc",
	"ta",
	"tu",
}

--- Add one vocabulary group to symbol map
-- @param symbols table destination symbol map
-- @param words table reserved words
-- @param token_type string syntax token type
local function add_words(symbols, words, token_type)
	for _, word in ipairs(words) do
		symbols[word] = token_type
	end
end

local symbols = {}

-- Instructions include every opcode published in selected upstream extension files
add_words(symbols, instructions, "keyword")

-- Registers, assembler structure, option values stay visually distinct
add_words(symbols, registers, "variable")
add_words(symbols, control_status_registers, "constant")
add_words(symbols, directives, "keyword")
add_words(symbols, options, "literal")

return symbols
