aboutsummaryrefslogtreecommitdiff
path: root/plugins/language_assembly_riscv.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/language_assembly_riscv.lua')
-rw-r--r--plugins/language_assembly_riscv.lua538
1 files changed, 538 insertions, 0 deletions
diff --git a/plugins/language_assembly_riscv.lua b/plugins/language_assembly_riscv.lua
new file mode 100644
index 0000000..c3fa254
--- /dev/null
+++ b/plugins/language_assembly_riscv.lua
@@ -0,0 +1,538 @@
+-- mod-version:3
+-- Support for RISC-V assembly
+-- Note: kinda conflicts with x86 asm, must uninstall it or use force-syntax plugin
+-- https://github.com/cheyao
+local syntax = require "core.syntax"
+
+syntax.add {
+ name = "RISC-V Assembly",
+ files = { "%.asm$", "%.[sS]$" },
+ comment = "#",
+ patterns = {
+ { pattern = "#.*\n", type = "comment" },
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = { "'", "'", '\\' }, type = "string" },
+ { pattern = "0[bB][0-1]+%W", type = "number" },
+ { pattern = "0[xX]%x+", type = "number" },
+ { pattern = "%%+[%a_][%w_]*", type = "function" },
+ { pattern = "[%a%._][%w%._]*:%W", type = "function" },
+ { pattern = "[^%p%a]%-?%d[%d%.]*", type = "number" },
+ { pattern = "[%+%-=/%*%^%%<>!~|&%$]", type = "operator" },
+ { pattern = "[%a_][%w_]*", type = "symbol" },
+ { pattern = "%.%a+", type = "normal" }
+ },
+ symbols = {
+ -- Integer Registers
+ ["x0"] = "literal",
+ ["x1"] = "literal",
+ ["x2"] = "literal",
+ ["x3"] = "literal",
+ ["x4"] = "literal",
+ ["x5"] = "literal",
+ ["x6"] = "literal",
+ ["x7"] = "literal",
+ ["x8"] = "literal",
+ ["x9"] = "literal",
+ ["x10"] = "literal",
+ ["x11"] = "literal",
+ ["x12"] = "literal",
+ ["x13"] = "literal",
+ ["x14"] = "literal",
+ ["x15"] = "literal",
+ ["x16"] = "literal",
+ ["x17"] = "literal",
+ ["x18"] = "literal",
+ ["x19"] = "literal",
+ ["x20"] = "literal",
+ ["x21"] = "literal",
+ ["x22"] = "literal",
+ ["x23"] = "literal",
+ ["x24"] = "literal",
+ ["x25"] = "literal",
+ ["x26"] = "literal",
+ ["x27"] = "literal",
+ ["x28"] = "literal",
+ ["x29"] = "literal",
+ ["x30"] = "literal",
+ ["x31"] = "literal",
+ ["zero"] = "literal",
+ ["ra"] = "literal",
+ ["sp"] = "literal",
+ ["gp"] = "literal",
+ ["tp"] = "literal",
+ ["t0"] = "literal",
+ ["t1"] = "literal",
+ ["t2"] = "literal",
+ ["fp"] = "literal",
+ ["s0"] = "literal",
+ ["s1"] = "literal",
+ ["a0"] = "literal",
+ ["a1"] = "literal",
+ ["a2"] = "literal",
+ ["a3"] = "literal",
+ ["a4"] = "literal",
+ ["a5"] = "literal",
+ ["a6"] = "literal",
+ ["a7"] = "literal",
+ ["s2"] = "literal",
+ ["s3"] = "literal",
+ ["s4"] = "literal",
+ ["s5"] = "literal",
+ ["s6"] = "literal",
+ ["s7"] = "literal",
+ ["s8"] = "literal",
+ ["s9"] = "literal",
+ ["s10"] = "literal",
+ ["s11"] = "literal",
+ ["t3"] = "literal",
+ ["t4"] = "literal",
+ ["t5"] = "literal",
+ ["t6"] = "literal",
+ ["pc"] = "literal",
+ -- Floating-point Registers
+ ["f0"] = "literal",
+ ["f1"] = "literal",
+ ["f2"] = "literal",
+ ["f3"] = "literal",
+ ["f4"] = "literal",
+ ["f5"] = "literal",
+ ["f6"] = "literal",
+ ["f7"] = "literal",
+ ["f8"] = "literal",
+ ["f9"] = "literal",
+ ["f10"] = "literal",
+ ["f11"] = "literal",
+ ["f12"] = "literal",
+ ["f13"] = "literal",
+ ["f14"] = "literal",
+ ["f15"] = "literal",
+ ["f16"] = "literal",
+ ["f17"] = "literal",
+ ["f18"] = "literal",
+ ["f19"] = "literal",
+ ["f20"] = "literal",
+ ["f21"] = "literal",
+ ["f22"] = "literal",
+ ["f23"] = "literal",
+ ["f24"] = "literal",
+ ["f25"] = "literal",
+ ["f26"] = "literal",
+ ["f27"] = "literal",
+ ["f28"] = "literal",
+ ["f29"] = "literal",
+ ["f30"] = "literal",
+ ["f31"] = "literal",
+
+ ["ft0"] = "literal",
+ ["ft1"] = "literal",
+ ["ft2"] = "literal",
+ ["ft3"] = "literal",
+ ["ft4"] = "literal",
+ ["ft5"] = "literal",
+ ["ft6"] = "literal",
+ ["ft7"] = "literal",
+
+ ["fs0"] = "literal",
+ ["fs1"] = "literal",
+
+ ["fa0"] = "literal",
+ ["fa1"] = "literal",
+ ["fa2"] = "literal",
+ ["fa3"] = "literal",
+ ["fa4"] = "literal",
+ ["fa5"] = "literal",
+ ["fa6"] = "literal",
+ ["fa7"] = "literal",
+
+ ["fa2"] = "literal",
+ ["fa3"] = "literal",
+ ["fa4"] = "literal",
+ ["fa5"] = "literal",
+ ["fa6"] = "literal",
+ ["fa7"] = "literal",
+ ["fa8"] = "literal",
+ ["fa9"] = "literal",
+ ["fa10"] = "literal",
+ ["fa11"] = "literal",
+
+ ["ft8"] = "literal",
+ ["ft9"] = "literal",
+ ["ft10"] = "literal",
+ ["ft11"] = "literal",
+
+ -- Vector Registers
+ ["v0"] = "literal",
+ ["v1"] = "literal",
+ ["v2"] = "literal",
+ ["v3"] = "literal",
+ ["v4"] = "literal",
+ ["v5"] = "literal",
+ ["v6"] = "literal",
+ ["v7"] = "literal",
+ ["v8"] = "literal",
+ ["v9"] = "literal",
+ ["v10"] = "literal",
+ ["v11"] = "literal",
+ ["v12"] = "literal",
+ ["v13"] = "literal",
+ ["v14"] = "literal",
+ ["v15"] = "literal",
+ ["v16"] = "literal",
+ ["v17"] = "literal",
+ ["v18"] = "literal",
+ ["v19"] = "literal",
+ ["v20"] = "literal",
+ ["v21"] = "literal",
+ ["v22"] = "literal",
+ ["v23"] = "literal",
+ ["v24"] = "literal",
+ ["v25"] = "literal",
+ ["v26"] = "literal",
+ ["v27"] = "literal",
+ ["v28"] = "literal",
+ ["v29"] = "literal",
+ ["v30"] = "literal",
+ ["v31"] = "literal",
+
+ ["vl"] = "literal",
+ ["vtype"] = "literal",
+ ["vzrm"] = "literal",
+ ["vxsat"] = "literal",
+
+ -- RV32I instructions
+ ["lui"] = "keyword",
+ ["auipc"] = "keyword",
+ ["jal"] = "keyword",
+ ["jalr"] = "keyword",
+ ["beq"] = "keyword",
+ ["bne"] = "keyword",
+ ["blt"] = "keyword",
+ ["bge"] = "keyword",
+ ["bltu"] = "keyword",
+ ["bgeu"] = "keyword",
+ ["lb"] = "keyword",
+ ["lh"] = "keyword",
+ ["lw"] = "keyword",
+ ["lbu"] = "keyword",
+ ["lhu"] = "keyword",
+ ["sb"] = "keyword",
+ ["sh"] = "keyword",
+ ["sw"] = "keyword",
+ ["addi"] = "keyword",
+ ["slti"] = "keyword",
+ ["sltiu"] = "keyword",
+ ["xori"] = "keyword",
+ ["ori"] = "keyword",
+ ["andi"] = "keyword",
+ ["slli"] = "keyword",
+ ["srli"] = "keyword",
+ ["srai"] = "keyword",
+ ["add"] = "keyword",
+ ["sub"] = "keyword",
+ ["sll"] = "keyword",
+ ["slt"] = "keyword",
+ ["sltu"] = "keyword",
+ ["xor"] = "keyword",
+ ["srl"] = "keyword",
+ ["sra"] = "keyword",
+ ["or"] = "keyword",
+ ["and"] = "keyword",
+ ["fence"] = "keyword",
+ ["fence.tso"] = "keyword",
+ ["pause"] = "keyword",
+ ["ecall"] = "keyword",
+ ["ebreak"] = "keyword",
+
+ -- RV64I instructions
+ ["lwu"] = "keyword",
+ ["ld"] = "keyword",
+ ["sd"] = "keyword",
+ ["slli"] = "keyword",
+ ["srli"] = "keyword",
+ ["srai"] = "keyword",
+ ["addiw"] = "keyword",
+ ["slliw"] = "keyword",
+ ["srliw"] = "keyword",
+ ["sraiw"] = "keyword",
+ ["addw"] = "keyword",
+ ["subw"] = "keyword",
+ ["sllw"] = "keyword",
+ ["srlw"] = "keyword",
+ ["sraw"] = "keyword",
+
+ -- Zifencei instructions
+ ["fence.i"] = "keyword",
+
+ -- Zicsr instructions
+ ["csrrw"] = "keyword",
+ ["csrrs"] = "keyword",
+ ["csrrc"] = "keyword",
+ ["csrrwi"] = "keyword",
+ ["csrrsi"] = "keyword",
+ ["csrrci"] = "keyword",
+
+ -- RV32M instructions
+ ["mul"] = "keyword",
+ ["mulh"] = "keyword",
+ ["mulhsu"] = "keyword",
+ ["mulhu"] = "keyword",
+ ["div"] = "keyword",
+ ["divu"] = "keyword",
+ ["rem"] = "keyword",
+ ["remu"] = "keyword",
+
+ -- RV64M instructions
+ ["mulw"] = "keyword",
+ ["divw"] = "keyword",
+ ["divuw"] = "keyword",
+ ["remw"] = "keyword",
+ ["remuw"] = "keyword",
+
+ -- RV32A instructions
+ ["lr.w"] = "keyword",
+ ["sc.w"] = "keyword",
+ ["amoswap.w"] = "keyword",
+ ["amoadd.w"] = "keyword",
+ ["amoxor.w"] = "keyword",
+ ["amoand.w"] = "keyword",
+ ["amoor.w"] = "keyword",
+ ["amomin.w"] = "keyword",
+ ["amomax.w"] = "keyword",
+ ["amominu.w"] = "keyword",
+ ["amomaxu.w"] = "keyword",
+
+ -- RV64A instructions
+ ["lr.d"] = "keyword",
+ ["sc.d"] = "keyword",
+ ["amoswap.d"] = "keyword",
+ ["amoadd.d"] = "keyword",
+ ["amoxor.d"] = "keyword",
+ ["amoand.d"] = "keyword",
+ ["amoor.d"] = "keyword",
+ ["amomin.d"] = "keyword",
+ ["amomax.d"] = "keyword",
+ ["amominu.d"] = "keyword",
+ ["amomaxu.d"] = "keyword",
+
+ -- RV32F instructions
+ ["flw"] = "keyword",
+ ["fsw"] = "keyword",
+ ["fmadd.s"] = "keyword",
+ ["fmsub.s"] = "keyword",
+ ["fnmsub.s"] = "keyword",
+ ["fnmadd.s"] = "keyword",
+ ["fadd.s"] = "keyword",
+ ["fsub.s"] = "keyword",
+ ["fmul.s"] = "keyword",
+ ["fdiv.s"] = "keyword",
+ ["fsqrt.s"] = "keyword",
+ ["fsgnj.s"] = "keyword",
+ ["fsgnjn.s"] = "keyword",
+ ["fsgnjx.s"] = "keyword",
+ ["fmin.s"] = "keyword",
+ ["fmax.s"] = "keyword",
+ ["fcvt.w.s"] = "keyword",
+ ["fcvt.wu.s"] = "keyword",
+ ["fmv.x.w"] = "keyword",
+ ["feq.s"] = "keyword",
+ ["flt.s"] = "keyword",
+ ["fle.s"] = "keyword",
+ ["fclass.s"] = "keyword",
+ ["fcvt.s.w"] = "keyword",
+ ["fcvt.s.wu"] = "keyword",
+ ["fmv.w.x"] = "keyword",
+
+ -- RV64F instructions
+ ["fcvt.l.s"] = "keyword",
+ ["fcvt.lu.s"] = "keyword",
+ ["fcvt.s.l"] = "keyword",
+ ["fcvt.s.lu"] = "keyword",
+
+ -- RV32D instructions
+ ["fld"] = "keyword",
+ ["fsd"] = "keyword",
+ ["fmadd.d"] = "keyword",
+ ["fmsub.d"] = "keyword",
+ ["fnmsub.d"] = "keyword",
+ ["fnmadd.d"] = "keyword",
+ ["fadd.d"] = "keyword",
+ ["fsub.d"] = "keyword",
+ ["fmul.d"] = "keyword",
+ ["fdiv.d"] = "keyword",
+ ["fsqrt.d"] = "keyword",
+ ["fsgnj.d"] = "keyword",
+ ["fsgnjn.d"] = "keyword",
+ ["fsgnjx.d"] = "keyword",
+ ["fmin.d"] = "keyword",
+ ["fmax.d"] = "keyword",
+ ["fcvt.s.d"] = "keyword",
+ ["fcvt.d.s"] = "keyword",
+ ["feq.d"] = "keyword",
+ ["flt.d"] = "keyword",
+ ["fle.d"] = "keyword",
+ ["fclass.d"] = "keyword",
+ ["fcvt.w.d"] = "keyword",
+ ["fcvt.wu.d"] = "keyword",
+ ["fcvt.d.w"] = "keyword",
+ ["fcvt.d.wu"] = "keyword",
+
+ -- RV64D instructions
+ ["fcvt.l.d"] = "keyword",
+ ["fcvt.lu.d"] = "keyword",
+ ["fmv.x.d"] = "keyword",
+ ["fcvt.d.l"] = "keyword",
+ ["fcvt.d.lu"] = "keyword",
+ ["fmv.d.x"] = "keyword",
+
+ -- RV32Q instructions
+ ["flq"] = "keyword",
+ ["fsq"] = "keyword",
+ ["fmadd.q"] = "keyword",
+ ["fmsub.q"] = "keyword",
+ ["fnmsub.q"] = "keyword",
+ ["fnmadd.q"] = "keyword",
+ ["fadd.q"] = "keyword",
+ ["fsub.q"] = "keyword",
+ ["fmul.q"] = "keyword",
+ ["fdiv.q"] = "keyword",
+ ["fsqrt.q"] = "keyword",
+ ["fsgnj.q"] = "keyword",
+ ["fsgnjn.q"] = "keyword",
+ ["fsgnjx.q"] = "keyword",
+ ["fmin.q"] = "keyword",
+ ["fmax.q"] = "keyword",
+ ["fcvt.s.q"] = "keyword",
+ ["fcvt.q.s"] = "keyword",
+ ["fcvt.d.q"] = "keyword",
+ ["fcvt.q.d"] = "keyword",
+ ["feq.q"] = "keyword",
+ ["flt.q"] = "keyword",
+ ["fle.q"] = "keyword",
+ ["fclass.q"] = "keyword",
+ ["fcvt.w.q"] = "keyword",
+ ["fcvt.wu.q"] = "keyword",
+ ["fcvt.q.w"] = "keyword",
+ ["fcvt.q.wu"] = "keyword",
+
+ -- RV64Q instructions
+ ["fcvt.l.q"] = "keyword",
+ ["fcvt.lu.q"] = "keyword",
+ ["fcvt.q.l"] = "keyword",
+ ["fcvt.q.lu"] = "keyword",
+
+ -- RV32Zfh instructions
+ ["flh"] = "keyword",
+ ["fsh"] = "keyword",
+ ["fmadd.h"] = "keyword",
+ ["fmsub.h"] = "keyword",
+ ["fnmsub.h"] = "keyword",
+ ["fnmadd.h"] = "keyword",
+ ["fadd.h"] = "keyword",
+ ["fsub.h"] = "keyword",
+ ["fmul.h"] = "keyword",
+ ["fdiv.h"] = "keyword",
+ ["fsqrt.h"] = "keyword",
+ ["fsgnj.h"] = "keyword",
+ ["fsgnjn.h"] = "keyword",
+ ["fsgnjx.h"] = "keyword",
+ ["fmin.h"] = "keyword",
+ ["fmax.h"] = "keyword",
+ ["fcvt.s.h"] = "keyword",
+ ["fcvt.h.s"] = "keyword",
+ ["fcvt.d.h"] = "keyword",
+ ["fcvt.h.d"] = "keyword",
+ ["fcvt.q.h"] = "keyword",
+ ["fcvt.h.q"] = "keyword",
+ ["feq.h"] = "keyword",
+ ["flt.h"] = "keyword",
+ ["fle.h"] = "keyword",
+ ["fclass.h"] = "keyword",
+ ["fcvt.w.h"] = "keyword",
+ ["fcvt.wu.h"] = "keyword",
+ ["fmv.x.h"] = "keyword",
+ ["fcvt.h.w"] = "keyword",
+ ["fcvt.h.wu"] = "keyword",
+ ["fmv.h.x"] = "keyword",
+
+ -- RV64Zfh instructions
+ ["fcvt.l.h"] = "keyword",
+ ["fcvt.lu.h"] = "keyword",
+ ["fcvt.h.l"] = "keyword",
+ ["fcvt.h.lu"] = "keyword",
+
+ -- Pesudo-instructions
+ ["nop"] = "keyword",
+ ["li"] = "keyword",
+ ["mv"] = "keyword",
+ ["not"] = "keyword",
+ ["neg"] = "keyword",
+ ["negw"] = "keyword",
+ ["sext.w"] = "keyword",
+ ["seqz"] = "keyword",
+ ["snez"] = "keyword",
+ ["sltz"] = "keyword",
+ ["sgtz"] = "keyword",
+ ["fmv.s"] = "keyword",
+ ["fabs.s"] = "keyword",
+ ["fneg.s"] = "keyword",
+ ["fmv.d"] = "keyword",
+ ["fabs.d"] = "keyword",
+ ["fneg.d"] = "keyword",
+ ["beqz"] = "keyword",
+ ["bnez"] = "keyword",
+ ["blez"] = "keyword",
+ ["bgez"] = "keyword",
+ ["bltz"] = "keyword",
+ ["bgtz"] = "keyword",
+ ["bgt"] = "keyword",
+ ["ble"] = "keyword",
+ ["bgtu"] = "keyword",
+ ["bleu"] = "keyword",
+ ["j"] = "keyword",
+ ["jr"] = "keyword",
+ ["ret"] = "keyword",
+ ["call"] = "keyword",
+ ["tail"] = "keyword",
+
+ -- Other
+ [".2byte"] = "keyword2",
+ [".4byte"] = "keyword2",
+ [".8byte"] = "keyword2",
+ [".half"] = "keyword2",
+ [".word"] = "keyword2",
+ [".dword"] = "keyword2",
+ [".byte"] = "keyword2",
+ [".dtpreldword"] = "keyword2",
+ [".dtprelword"] = "keyword2",
+ [".sleb128"] = "keyword2",
+ [".uleb128"] = "keyword2",
+ [".asciz"] = "keyword2",
+ [".string"] = "keyword2",
+ [".incbin"] = "keyword2",
+ [".zero"] = "keyword2",
+
+ [".align"] = "keyword2",
+ [".balign"] = "keyword2",
+ [".p2align"] = "keyword2",
+
+ [".globl"] = "keyword2",
+ [".local"] = "keyword2",
+ [".equ"] = "keyword2",
+
+ [".text"] = "keyword2",
+ [".data"] = "keyword2",
+ [".rodata"] = "keyword2",
+ [".bss"] = "keyword2",
+ [".comm"] = "keyword2",
+ [".common"] = "keyword2",
+ [".section"] = "keyword2",
+
+ [".option"] = "keyword2",
+ [".macro"] = "keyword2",
+ [".endm"] = "keyword2",
+ [".file"] = "keyword2",
+ [".ident"] = "keyword2",
+ [".size"] = "keyword2",
+ [".type"] = "keyword2",
+ },
+}