{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "scopeName": "source.arm", "name": "ARM", "fileTypes": [ "s", "S", "asm", "sx" ], "patterns": [ { "match": "^\\s*[#\\.](define|include|(end|el|else)?if|if(def|ndef)?|else)(\\s(defined\\([a-zA-Z_]+\\)|[a-zA-Z_]+))?$", "name": "meta.preprocessor" }, { "match": "^\\s*\\.?\\w+:\\s*(?=$|;)", "name": "routine.arm" }, { "match": "\\b(?i)(?:v?(?:add|cvt|bic|sub|trn|cmp|div|qdmulh|mrs|mul|ld1|qadd|qshrun|st[1234]|addw|mull|mlal|rshrn|swp|qmovunand|m(?:rs|sr)|eor|sub|rsb|adc|sbc|rsc|and|tst|teq|cmp|cmn|orr|mov|bic|mvn|neg|lsr|lsl|ror|asr)|mul|mla|mull|smlabb|rev(?:8|16)?|pld|adr|adrl|vswp)(?:(?:(?=s)s(\\w{2})?)|(\\w{2})s?)?(?-i)\\b", "name": "support.function.mnemonic.arithmetic.arm", "captures": { "1": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.arithmetic.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] }, "2": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.arithmetic.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] } } }, { "match": "\\b(?i)v?(?:ldr|str)(?:d(\\w{2})?|(?:(?:s?b|s?h)(\\w{2})?|(\\w{2})(?:s?b|s?h)?))(?-i)\\b", "name": "support.function.mnemonic.memory.arm", "captures": { "1": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.memory.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] }, "2": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.memory.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] }, "3": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.memory.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] } } }, { "match": "\\b(?i)(?:mov(?:w|t)?|pac(?:dz?[a|b]|ga|i(?:[a|b](?:1716|sp|z)?)|z[a|b])|swi|svc|wfi|dmb|clrex|dsb|isb|v?(?:push|pop)|b(?:l|l?x|l?r)?|(?:i|e)?ret(?:aa|ab)?|(?:st|ld)(?:p|r(?:ex|s?(?:h|b)|d)?|m(?:(?:f|e)(?:d|a)|(?:d|i)(?:b|a))?))(?:(?:(?=s)s(\\w{2})?)|(\\w{2})s?)?(?-i)\\b", "name": "support.function.mnemonic.memory.arm", "captures": { "1": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.memory.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] }, "2": { "patterns": [ { "include": "#conditions", "name": "support.function.mnemonic.memory.arm" }, { "match": "\\w{2}", "name": "invalid.illegal.condition.arm" } ] } } }, { "match": "\\b(?i)(def(b|w|s)|equ|align\\s.+\\.s)(?-i)\\b", "name": "keyword.control.define.arm" }, { "name": "keyword.control.directive.arm", "match": "\\.(?i)(globl|global|extern|weak|macro|endm|purgem|section|text|data|bss|arm|align|balign|irp|rept|endr|(un)?req|error|short|(end)?func|hidden|type|cpu|fpu|arch|code|syntax|altmacro|object_arch|word|int|string|thumb(_set)?|set|pragma|undef|line|get)(?-i)\\b" }, { "match": "\\b\\=", "name": "keyword.control.evaluation" }, { "match": "\\b(?i)nop(\\w+)?(?-i)\\b", "name": "comment.nop.arm", "captures": { "1": { "patterns": [ { "include": "#conditions", "name": "comment.nop.arm" }, { "match": "\\w+", "name": "invalid.illegal.condition.arm" } ] } } }, { "name": "storage.memaddress.arm", "match": "\\[[ \\t]*(\\w+),[ \\t]*([a-zA-Z0-9#-]+)[ \\t]*\\]!?", "captures": { "1": { "patterns": [ { "include": "#registers" } ] }, "2": { "patterns": [ { "include": "#numerics" }, { "include": "#registers" }, { "include": "#variables" } ] } } }, { "name": "storage.stack.arm", "begin": "\\{\\h*", "end": "\\h*\\}\\^?", "patterns": [ { "include": "#registers_list" } ] }, { "include": "#registers" }, { "include": "#variables" }, { "include": "#numerics" }, { "include": "#strings" }, { "include": "#comments" } ], "repository": { "comments": { "patterns": [ { "match": "([;@]|//|#).*$", "name": "comment.arm" }, { "begin": "\\/\\*", "beginCaptures": { "0": { "name": "comment.begin.arm" } }, "endCaptures": { "0": { "name": "comment.end.arm" } }, "end": "\\*\\/", "name": "comment.arm" } ] }, "conditions": { "patterns": [ { "match": "ne|eq|cs|hs|cc|lo|mi|pl|vs|vc|hi|ls|lt|le|gt|ge|al" } ] }, "numerics": { "patterns": [ { "match": "#?-?(0x|&)[0-9a-fA-F_]+\\b", "name": "constant.numeric.hex.arm" }, { "match": "#?[0-9]+\\b", "name": "constant.numeric.dec.arm" }, { "match": "#?0b[01]+\\b", "name": "constant.numeric.bin.arm" } ] }, "registers": { "patterns": [ { "match": "\\b(?i)([rcp]([0-9]|1[0-5])|[xwbhsdq]([0-9]|1[0-9]|2[0-9]|3[0-1])|wzr|xzr|wsp|fpsr|fpcr|a[1-4]|v([0-9]|1[0-9]|2[0-9]|3[0-1])\\.(16b|8[b|h]|4[s|h]|2[s|d])|sl|sb|fp|ip|sp|lr|(c|s)psr(_c)?|pc|fpsid|fpscr|fpexc|APSR_nzcv|sy)(?-i)(!|\\b)", "name": "storage.register.arm" } ] }, "registers_list": { "patterns": [ { "match": "(\\w+)(?:\\h*\\-\\h*(\\w+))?(?:,\\h*([a-zA-Z0-9,\\-\\h]+))?", "captures": { "1": { "patterns": [ { "include": "#registers" } ] }, "2": { "patterns": [ { "include": "#registers" } ] }, "3": { "patterns": [ { "include": "#registers_list" } ] } } } ] }, "strings": { "patterns": [ { "name": "string.quoted.arm", "begin": "\"", "end": "\"" }, { "match": "\\'\\S\\'", "name": "string.char.arm" }, { "name": "invalid.illegal.string.arm", "match": "\"[^\"]+$" }, { "name": "invalid.illegal.char.arm", "match": "\\'\\S{2,}\\'" } ] }, "variables": { "patterns": [ { "match": "(?