package tm-grammars

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file tm_grammar_riscv.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
let lang_id = "riscv"
let json = {json|{
  "displayName": "RISC-V",
  "fileTypes": [
    "S",
    "s",
    "riscv",
    "asm"
  ],
  "name": "riscv",
  "patterns": [
    {
      "match": "\\b(la|lb|lh|lw|ld|nop|li|mv|not|negw??|sext\\.w|seqz|snez|sltz|sgtz|beqz|bnez|blez|bgez|bltz|bgtz?|ble|bgtu|bleu|j|jal|jr|ret|call|tail|fence|csr[crsw|]|csr[csw|]i)\\b",
      "name": "support.function.pseudo.riscv"
    },
    {
      "match": "\\b(addw??|auipc|lui|jalr|beq|bne|blt|bge|bltu|bgeu|lb|lh|lw|ld|lbu|lhu|sb|sh|sw|sd|addiw??|sltiu??|xori|ori|andi|slliw??|srliw??|sraiw??|subw??|sllw??|sltu??|xor|srlw??|sraw??|or|and|fence|fence\\.i|csrrw|csrrs|csrrc|csrrwi|csrrsi|csrrci)\\b",
      "name": "support.function.riscv"
    },
    {
      "match": "\\b(ecall|ebreak|sfence\\.vma|mret|sret|uret|wfi)\\b",
      "name": "support.function.riscv.privileged"
    },
    {
      "match": "\\b(mulh??|mulhsu|mulhu|divu??|remu??|mulw|divw|divuw|remw|remuw)\\b",
      "name": "support.function.riscv.m"
    },
    {
      "match": "\\b(c\\.(?:addi4spn|fld|lq|lw|flw|ld|fsd|sq|sw|fsw|sd|nop|addi|jal|addiw|li|addi16sp|lui|srli|srli64|srai|srai64|andi|sub|xor|or|and|subw|addw|j|beqz|bnez))\\b",
      "name": "support.function.riscv.c"
    },
    {
      "match": "\\b(lr\\.[dw|]|sc\\.[dw|]|amoswap\\.[dw|]|amoadd\\.[dw|]|amoxor\\.[dw|]|amoand\\.[dw|]|amoor\\.[dw|]|amomin\\.[dw|]|amomax\\.[dw|]|amominu\\.[dw|]|amomaxu\\.[dw|])\\b",
      "name": "support.function.riscv.a"
    },
    {
      "match": "\\b(f(?:lw|sw|madd\\.s|msub\\.s|nmsub\\.s|nmadd\\.s|add\\.s|sub\\.s|mul\\.s|div\\.s|sqrt\\.s|sgnj\\.s|sgnjn\\.s|sgnjx\\.s|min\\.s|max\\.s|cvt\\.w\\.s|cvt\\.wu\\.s|mv\\.x\\.w|eq\\.s|lt\\.s|le\\.s|class\\.s|cvt\\.s\\.wu??|mv\\.w\\.x|cvt\\.l\\.s|cvt\\.lu\\.s|cvt\\.s\\.lu??))\\b",
      "name": "support.function.riscv.f"
    },
    {
      "match": "\\b(f(?:ld|sd|madd\\.d|msub\\.d|nmsub\\.d|nmadd\\.d|add\\.d|sub\\.d|mul\\.d|div\\.d|sqrt\\.d|sgnj\\.d|sgnjn\\.d|sgnjx\\.d|min\\.d|max\\.d|cvt\\.s\\.d|cvt\\.d\\.s|eq\\.d|lt\\.d|le\\.d|class\\.d|cvt\\.w\\.d|cvt\\.wu\\.d|cvt\\.d\\.wu??|cvt\\.l\\.d|cvt\\.lu\\.d|mv\\.x\\.d|cvt\\.d\\.lu??|mv\\.d\\.x))\\b",
      "name": "support.function.riscv.d"
    },
    {
      "match": "\\.(skip|asciiz??|byte|[248|]byte|data|double|float|half|kdata|ktext|space|text|word|dword|dtprelword|dtpreldword|set\\s*(noat|at)|[su|]leb128|string|incbin|zero|rodata|comm|common)\\b",
      "name": "storage.type.riscv"
    },
    {
      "match": "\\.(balign|align|p2align|extern|globl|global|local|pushsection|section|bss|insn|option|type|equ|macro|endm|file|ident)\\b",
      "name": "storage.modifier.riscv"
    },
    {
      "captures": {
        "1": {
          "name": "entity.name.function.label.riscv"
        }
      },
      "match": "\\b([0-9A-Z_a-z]+):",
      "name": "meta.function.label.riscv"
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.variable.riscv"
        }
      },
      "match": "\\b(x([0-9]|1[0-9]|2[0-9]|3[01]))\\b",
      "name": "variable.other.register.usable.by-number.riscv"
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.variable.riscv"
        }
      },
      "match": "\\b(zero|ra|sp|gp|tp|t[0-6]|a[0-7]|s[0-9]|fp|s1[01])\\b",
      "name": "variable.other.register.usable.by-name.riscv"
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.variable.riscv"
        }
      },
      "match": "\\b(([hmsu]|vs)status|([hmsu]|vs)ie|([msu]|vs)tvec|([msu]|vs)scratch|([msu]|vs)epc|([msu]|vs)cause|([hmsu]|vs)tval|([hmsu]|vs)ip|fflags|frm|fcsr|m?cycleh?|timeh?|m?instreth?|m?hpmcounter([3-9]|[12][0-9]|3[01])h?|[hms][ei]deleg|[hms]counteren|v?satp|hgeie|hgeip|[hm]tinst|hvip|hgatp|htimedeltah?|mvendorid|marchid|mimpid|mhartid|misa|mstatush|mtval2|pmpcfg[0-3]|pmpaddr([0-9]|1[0-5])|mcountinhibit|mhpmevent([3-9]|[12][0-9]|3[01])|tselect|tdata[123]|dcsr|dpc|dscratch[01])\\b",
      "name": "variable.other.csr.names.riscv"
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.variable.riscv"
        }
      },
      "match": "\\bf([0-9]|1[0-9]|2[0-9]|3[01])\\b",
      "name": "variable.other.register.usable.floating-point.riscv"
    },
    {
      "match": "\\b\\d+\\.\\d+\\b",
      "name": "constant.numeric.float.riscv"
    },
    {
      "match": "\\b(\\d+|0([Xx])\\h+)\\b",
      "name": "constant.numeric.integer.riscv"
    },
    {
      "begin": "\"",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.riscv"
        }
      },
      "end": "\"",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.riscv"
        }
      },
      "name": "string.quoted.double.riscv",
      "patterns": [
        {
          "match": "\\\\[\"\\\\nrt]",
          "name": "constant.character.escape.riscv"
        }
      ]
    },
    {
      "begin": "'",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.riscv"
        }
      },
      "end": "'",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.riscv"
        }
      },
      "name": "string.quoted.single.riscv",
      "patterns": [
        {
          "match": "\\\\[\"\\\\nrt]",
          "name": "constant.character.escape.riscv"
        }
      ]
    },
    {
      "begin": "/\\*",
      "end": "\\*/",
      "name": "comment.block"
    },
    {
      "begin": "//",
      "end": "\\n",
      "name": "comment.line.double-slash"
    },
    {
      "begin": "^\\s*#\\s*(define)\\s+((?<id>[A-Z_a-z][0-9A-Z_a-z]*))(?:(\\()(\\s*\\g<id>\\s*((,)\\s*\\g<id>\\s*)*(?:\\.\\.\\.)?)(\\)))?",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.import.define.c"
        },
        "2": {
          "name": "entity.name.function.preprocessor.c"
        },
        "4": {
          "name": "punctuation.definition.parameters.c"
        },
        "5": {
          "name": "variable.parameter.preprocessor.c"
        },
        "7": {
          "name": "punctuation.separator.parameters.c"
        },
        "8": {
          "name": "punctuation.definition.parameters.c"
        }
      },
      "end": "(?=/[*/])|$",
      "name": "meta.preprocessor.macro.c",
      "patterns": [
        {
          "match": "(?>\\\\\\s*\\n)",
          "name": "punctuation.separator.continuation.c"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "^\\s*#\\s*(error|warning)\\b",
      "captures": {
        "1": {
          "name": "keyword.control.import.error.c"
        }
      },
      "end": "$",
      "name": "meta.preprocessor.diagnostic.c",
      "patterns": [
        {
          "match": "(?>\\\\\\s*\\n)",
          "name": "punctuation.separator.continuation.c"
        }
      ]
    },
    {
      "begin": "^\\s*#\\s*(i(?:nclude|mport))\\b\\s+",
      "captures": {
        "1": {
          "name": "keyword.control.import.include.c"
        }
      },
      "end": "(?=/[*/])|$",
      "name": "meta.preprocessor.c.include",
      "patterns": [
        {
          "match": "(?>\\\\\\s*\\n)",
          "name": "punctuation.separator.continuation.c"
        },
        {
          "begin": "\"",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.c"
            }
          },
          "end": "\"",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.c"
            }
          },
          "name": "string.quoted.double.include.c"
        },
        {
          "begin": "<",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.c"
            }
          },
          "end": ">",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.c"
            }
          },
          "name": "string.quoted.other.lt-gt.include.c"
        }
      ]
    },
    {
      "begin": "^\\s*#\\s*(defined??|elif|else|if|ifdef|ifndef|line|pragma|undef|endif)\\b",
      "captures": {
        "1": {
          "name": "keyword.control.import.c"
        }
      },
      "end": "(?=/[*/])|$",
      "name": "meta.preprocessor.c",
      "patterns": [
        {
          "match": "(?>\\\\\\s*\\n)",
          "name": "punctuation.separator.continuation.c"
        }
      ]
    },
    {
      "begin": "(^[\\t ]+)?(?=#)",
      "beginCaptures": {
        "1": {
          "name": "punctuation.whitespace.comment.leading.riscv"
        }
      },
      "end": "(?!\\G)",
      "patterns": [
        {
          "begin": "#|(//)",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.comment.riscv"
            }
          },
          "end": "\\n",
          "name": "comment.line.number-sign.riscv"
        }
      ]
    }
  ],
  "scopeName": "source.riscv"
}|json}