-- mod-version:3 local syntax = require "core.syntax" syntax.add { name = "RISC-V Assembly", files = { "%.s$", "%.S$", "%.asm$", "%.riscv$" }, comment = "#", patterns = { -- Comments { pattern = "#.*", type = "comment" }, { pattern = "//.*", type = "comment" }, { pattern = "/%*", "%*/", type = "comment" }, -- Strings & Characters { pattern = '"', '"', '\\', type = "string" }, { pattern = "'", "'", '\\', type = "string" }, -- Labels { pattern = "[%a_][%w_]*:", type = "symbol" }, -- Hex, Binary, and Decimal Numbers { pattern = "0x%x+", type = "number" }, { pattern = "0b[01]+", type = "number" }, { pattern = "%d+", type = "number" }, -- Register definitions (x0-x31, f0-f31, ABI names like zero, ra, sp, t0, a0) { pattern = "%f[%w_][xf]%d+%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]%a%d%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]zero%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]ra%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]sp%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]gp%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]tp%f[%W_]", type = "keyword2" }, { pattern = "%f[%w_]fp%f[%W_]", type = "keyword2" }, -- Directives and Mnemonics { pattern = "%.[%a_][%w_]*", type = "keyword" }, { pattern = "[%a_][%w_]*", type = "normal" }, }, symbols = { -- Control flow / Jumps (Will "pop out" via structural themes) ["jal"] = "keyword", ["jalr"] = "keyword", ["beq"] = "keyword", ["bne"] = "keyword", ["blt"] = "keyword", ["bge"] = "keyword", ["bltu"] = "keyword", ["bgeu"] = "keyword", ["ret"] = "keyword", ["j"] = "keyword", ["jr"] = "keyword", -- Standard RV32I / RV64I Base Instructions & Pseudo-ops ["lui"] = "keyword", ["auipc"] = "keyword", ["lw"] = "keyword", ["lh"] = "keyword", ["lb"] = "keyword", ["lwu"] = "keyword", ["lhu"] = "keyword", ["lbu"] = "keyword", ["ld"] = "keyword", ["sw"] = "keyword", ["sh"] = "keyword", ["sb"] = "keyword", ["sd"] = "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", ["li"] = "keyword", ["la"] = "keyword", ["mv"] = "keyword", ["nop"] = "keyword", ["ecall"] = "keyword", ["ebreak"] = "keyword", } }