@@ -0,0 +1,1367 @@
1+%YAML 1.2
2+---
3+file_extensions: [yasm, nasm, asm, inc, mac]
4+scope: source.asm.x86_64
5+
6+variables:
7+ num_bin: '(?:[01][01_]*)'
8+ num_oct: '(?:[0-7][0-7_]*)'
9+ num_dec: '(?:[0-9][0-9_]*)'
10+ num_hex: '(?:[[:xdigit:]][[:xdigit:]_]*)'
11+ num_bin_exp: '(?:p[+-]?{{num_dec}})'
12+ num_dec_exp: '(?:e[+-]?{{num_dec}})'
13+ identifier_body: '(?:[[:alnum:]_$#@~.?]*)'
14+ valid_identifier: '(?:[[:alpha:]_?]{{identifier_body}})'
15+
16+contexts:
17+ prototype:
18+ - include: comments
19+
20+ line-continuation:
21+ - match: '(\\)$\n'
22+ captures:
23+ 1: punctuation.separator.continuation.asm.x86_64
24+ - match: '\\(\s+?)$'
25+ captures:
26+ 1: invalid.illegal.space-after-continuation.asm.x86_64
27+ line-ending:
28+ - match: '$\n'
29+ pop: true
30+ pop:
31+ - match: '(?=.|$)'
32+ pop: true
33+ pop-if-not-whitespace:
34+ - match: '(?=\S)'
35+ set: pop
36+
37+ main:
38+ - include: comments
39+ - include: prefixes
40+ - include: data-types
41+ - include: registers
42+ - include: mnemonics
43+ - include: strings
44+ - include: numbers
45+ - include: operators
46+ - include: support
47+ - include: directives
48+ - include: entities
49+ - include: structs
50+ - include: preprocessor
51+ - include: labels
52+
53+ numbers:
54+ - include: floating-point
55+ - include: integers
56+ floating-point:
57+ # binary
58+ - match: '(?i)\b0[by]{{num_bin}}\.(?:{{num_bin}}?{{num_bin_exp}}?\b)?'
59+ scope: constant.numeric.binary.floating-point.asm.x86_64
60+ - match: '(?i)\b0[by]{{num_bin}}{{num_bin_exp}}\b'
61+ scope: constant.numeric.binary.floating-point.asm.x86_64
62+ # octal
63+ - match: '(?i)\b0[oq]{{num_oct}}\.(?:{{num_oct}}?{{num_bin_exp}}?\b)?'
64+ scope: constant.numeric.octal.floating-point.asm.x86_64
65+ - match: '(?i)\b0[oq]{{num_oct}}{{num_bin_exp}}\b'
66+ scope: constant.numeric.octal.floating-point.asm.x86_64
67+ # decimal
68+ - match: '(?i)\b(?:0[dt])?{{num_dec}}\.(?:{{num_dec}}?{{num_dec_exp}}?\b)?'
69+ scope: constant.numeric.decimal.floating-point.asm.x86_64
70+ - match: '(?i)\b{{num_dec}}{{num_dec_exp}}\b'
71+ scope: constant.numeric.decimal.floating-point.asm.x86_64
72+ #- match: '(?i)\.{{num_dec}}{{num_dec_exp}}?\b'
73+ # scope: invalid.illegal.constant.numeric.decimal.floating-point.asm.x86_64
74+ - match: '(?i)\b{{num_dec}}p{{num_dec}}?\b'
75+ scope: constant.numeric.decimal.packed-bcd.asm.x86_64
76+ # hex
77+ - match: '(?i)\b0[xh]{{num_hex}}\.(?:{{num_hex}}?{{num_bin_exp}}?\b)?'
78+ scope: constant.numeric.hex.floating-point.asm.x86_64
79+ - match: '(?i)\b0[xh]{{num_hex}}{{num_bin_exp}}\b'
80+ scope: constant.numeric.hex.floating-point.asm.x86_64
81+ - match: '(?i)\$[0-9]\_?{{num_hex}}?\.(?:{{num_hex}}?{{num_bin_exp}}?\b)?'
82+ scope: constant.numeric.hex.floating-point.asm.x86_64
83+ - match: '(?i)\$[0-9]\_?{{num_hex}}{{num_bin_exp}}\b'
84+ scope: constant.numeric.hex.floating-point.asm.x86_64
85+ integers:
86+ - match: '(?i)\b(?:(?:0[by]{{num_bin}})|(?:{{num_bin}}[by]))\b'
87+ scope: constant.numeric.binary.asm.x86_64
88+ - match: '(?i)\b(?:(?:0[oq]{{num_oct}})|(?:{{num_oct}}[oq]))\b'
89+ scope: constant.numeric.octal.asm.x86_64
90+ - match: '(?i)\b(?:(?:0[dt]{{num_dec}})|(?:{{num_dec}}[dt]?))\b'
91+ scope: constant.numeric.decimal.asm.x86_64
92+ - match: '(?i)(?:\$[0-9]\_?{{num_hex}}?)\b'
93+ scope: constant.numeric.hex.asm.x86_64
94+ - match: '(?i)\b(?:(?:0[xh]{{num_hex}})|(?:{{num_hex}}[hxHX]))\b'
95+ scope: constant.numeric.hex.asm.x86_64
96+
97+ labels:
98+ # http://www.nasm.us/doc/nasmdoc3.html#section-3.9
99+ - match: '(\.\.@)({{valid_identifier}})(?:(\:)?|\b)'
100+ captures:
101+ 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64
102+ 2: entity.name.constant.special.asm.x86_64
103+ 3: punctuation.separator.asm.x86_64
104+ - match: '(?:(\.)?|\b)({{valid_identifier}})(?:(\:)?|\b)'
105+ captures:
106+ 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64
107+ 2: entity.name.constant.asm.x86_64
108+ 3: punctuation.separator.asm.x86_64
109+ - match: '(\.)([0-9]+{{identifier_body}})(?:(\:)?|\b)'
110+ captures:
111+ 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64
112+ 2: entity.name.constant.asm.x86_64
113+ 3: punctuation.separator.asm.x86_64
114+ - match: '(?:(\.)?|\b)([0-9$@~]{{identifier_body}})(?:(\:)?|\b)'
115+ captures:
116+ 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64
117+ 2: invalid.illegal.entity.name.constant.asm.x86_64
118+ 3: punctuation.separator.asm.x86_64
119+ - match: '((%)(\d+))'
120+ captures:
121+ 1: invalid.illegal.meta.preprocessor.asm.x86_64
122+ #1: meta.preprocessor.asm.x86_64
123+ 2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
124+ 3: variable.other.preprocessor.asm.x86_64
125+ - match: '((%%)({{valid_identifier}})(?:(\:)?|\b))'
126+ captures:
127+ 1: invalid.illegal.meta.preprocessor.asm.x86_64
128+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
129+ 3: entity.name.constant.special.asm.x86_64
130+ 4: punctuation.separator.asm.x86_64
131+
132+ data-types:
133+ # Initialized & uninitialized data: http://www.nasm.us/doc/nasmdoc3.html#section-3.2.1
134+ - match: '(?i)\b(?:s?byte|(?:[doqtyz]|dq|s[dq]?)?word|(?:d|res)[bdoqtwyz]|ddq)\b'
135+ scope: storage.type.asm.x86_64
136+ - match: '(?i)\b(?:incbin|equ|times)\b'
137+ scope: support.function.asm.x86_64
138+
139+ prefixes:
140+ - match: '(?i)\b(?:strict|nosplit|near|far|abs|rel)\b'
141+ scope: storage.modifier.asm.x86_64
142+ - match: '(?i)\b(?:[ao](?:16|32|64))\b'
143+ scope: storage.modifier.prefix.asm.x86_64
144+ - match: '(?i)\b(?:rep(?:n?[ez])?|lock|xacquire|xrelease|(?:no)?bnd)\b'
145+ scope: storage.modifier.prefix.asm.x86_64
146+ - match: '{(vex[23]|evex)}'
147+ captures:
148+ 1: storage.modifier.prefix.vex.asm.x86_64
149+ - match: '{(k[1-7])}'
150+ captures:
151+ 1: storage.modifier.opmask.asm.x86_64
152+ - match: '{(1to(?:8|16))}'
153+ captures:
154+ 1: storage.modifier.precision.asm.x86_64
155+ - match: '{(z|(?:r[nudz]-)?sae)}'
156+ captures:
157+ 1: storage.modifier.rounding.asm.x86_64
158+
159+ support:
160+ # http://www.nasm.us/doc/nasmdoc7.html#section-7.4.6
161+ - match: '\.\.(?:start|imagebase|tlvp|got(?:pc(?:rel)?|(?:tp)?off)?|plt|sym|tlsie)\b'
162+ scope: support.constant.asm.x86_64
163+ - match: '\b__(?:utf(?:(?:16|32)(?:[lb]e)?)|float(?:8|16|32|64|80[me]|128[lh])|Infinity|[QS]?NaN)__\b'
164+ scope: support.function.asm.x86_64
165+ # http://www.nasm.us/doc/nasmdoc4.html#section-4.11
166+ - match: '\b__NASM_(?:MAJOR|(?:SUB)?MINOR|SNAPSHOT|VER(?:SION_ID)?)__\b'
167+ scope: support.function.asm.x86_64
168+ - match: '\b___NASM_PATCHLEVEL__\b'
169+ scope: support.function.asm.x86_64
170+ - match: '\b__(?:FILE|LINE|BITS|OUTPUT_FORMAT)__\b'
171+ scope: support.function.asm.x86_64
172+ - match: '\b__(?:(?:UTC_)?(?:DATE|TIME)(?:_NUM)?|POSIX_TIME)__\b'
173+ scope: support.function.asm.x86_64
174+ - match: '\b__USE_(?:ALTREG|SMARTALIGN|FP|IFUNC)__\b'
175+ scope: support.function.asm.x86_64
176+ - match: '\b__PASS__\b'
177+ scope: invalid.deprecated.support.constant.altreg.asm.x86_64
178+ - match: '(?i)\balignmode\b'
179+ scope: support.function.smartalign.asm.x86_64
180+ push:
181+ - include: line-continuation
182+ - include: line-ending
183+ - match: '\b(?:generic|nop|k7|k8|p6)\b'
184+ scope: support.constant.smartalign.asm.x86_64
185+ pop: true
186+ - match: '\w+'
187+ scope: invalid.illegal.constant.smartalign.asm.x86_64
188+ pop: true
189+ - match: '\b__ALIGNMODE__\b'
190+ scope: support.constant.smartalign.asm.x86_64
191+ - match: '\b(?:Inf|[QS]?NaN)\b'
192+ scope: support.constant.fp.asm.x86_64
193+ - match: '\b(?:float(?:8|16|32|64|80[me]|128[lh]))\b'
194+ scope: support.function.fp.asm.x86_64
195+ - match: '(?i)\bilog2(?:[ewfc]|[fc]w)?\b'
196+ scope: support.function.ifunc.asm.x86_64
197+
198+ directives:
199+ - match: '(?i)\b(?:ideal|jumps|p[345]86|end)\b'
200+ scope: invalid.deprecated.tasm.asm.x86_64
201+ - match: '(?i)\b(?:bits|use(?:16|32|64)|org|uppercase|safeseh|osabi)\b'
202+ scope: support.function.directive.asm.x86_64
203+ - match: '(?i)\b(default)(?:\s+(rel|abs|(?:no)?bnd))?\b'
204+ captures:
205+ 1: support.function.directive.asm.x86_64
206+ 2: support.constant.directive.asm.x86_64
207+ - match: '(?i)\b(?:section|segment)\b'
208+ scope: support.function.directive.asm.x86_64
209+ push: [section-parameters, section-name]
210+ - match: '(?i)\bgroup\b'
211+ scope: support.function.directive.asm.x86_64
212+ push: section-name
213+ - match: '\b(?:__SECT__|__NASMDEFSEG|_?_GLOBAL_OFFSET_TABLE_)\b'
214+ scope: support.constant.directive.asm.x86_64
215+ - match: '(?i)\b(?:absolute|common)\b'
216+ scope: support.function.directive.asm.x86_64
217+ - match: '(?i)\b(?:subsections_via_symbols|no_dead_strip)\b'
218+ scope: support.function.directive.macho.asm.x86_64
219+ - match: '(?i)import\b'
220+ scope: support.function.directive.asm.x86_64
221+ push:
222+ - match: '{{valid_identifier}}'
223+ scope: entity.name.function.asm.x86_64
224+ set:
225+ - match: '{{valid_identifier}}'
226+ scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64
227+ set:
228+ - match: '{{valid_identifier}}'
229+ scope: variable.function.asm.x86_64
230+ set:
231+ - include: comments
232+ - match: '{{valid_identifier}}'
233+ scope: invalid.illegal.asm.x86_64
234+ - include: line-continuation
235+ - include: pop-if-not-whitespace
236+ - include: line-ending
237+ - include: line-continuation
238+ - include: pop-if-not-whitespace
239+ - include: line-ending
240+ - include: line-continuation
241+ - include: pop-if-not-whitespace
242+ - include: line-ending
243+ - include: line-continuation
244+ - include: pop-if-not-whitespace
245+ - include: line-ending
246+ - match: '(?i)export\b'
247+ scope: support.function.directive.asm.x86_64
248+ push:
249+ - match: '{{valid_identifier}}'
250+ scope: entity.name.constant.asm.x86_64
251+ set:
252+ - match: '{{valid_identifier}}'
253+ scope: variable.function.asm.x86_64
254+ set: export-parameters
255+ - include: line-continuation
256+ - include: pop-if-not-whitespace
257+ - include: line-ending
258+ - include: line-continuation
259+ - include: pop-if-not-whitespace
260+ - include: line-ending
261+ - match: '(?i)global\b'
262+ scope: support.function.directive.asm.x86_64
263+ push:
264+ - match: '(?<=\:)(?:function|data|export)\b'
265+ scope: storage.type.directive.asm.x86_64
266+ - match: '\b(?:default|internal|hidden|protected|proc|data)\b'
267+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64
268+ - include: line-continuation
269+ - include: line-ending
270+ - include: preprocessor-macro-parameter
271+ - include: main
272+ - match: '(?i)extern\b'
273+ scope: support.function.directive.asm.x86_64
274+ push:
275+ - match: '(?<=\:)(?:import)\b'
276+ scope: storage.type.directive.asm.x86_64
277+ - match: '\b(?:proc|data)\b'
278+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64
279+ - include: line-continuation
280+ - include: line-ending
281+ - include: preprocessor-macro-parameter
282+ - include: main
283+ - match: '(?i)library\b'
284+ scope: support.function.directive.asm.x86_64
285+ push:
286+ - match: '{{valid_identifier}}'
287+ scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64
288+ pop: true
289+ - include: line-continuation
290+ - include: line-ending
291+ - include: pop-if-not-whitespace
292+ - match: '(?i)module\b'
293+ scope: support.function.directive.asm.x86_64
294+ push:
295+ - match: '\$?{{valid_identifier}}'
296+ scope: entity.name.namespace.asm.x86_64
297+ pop: true
298+ - include: line-continuation
299+ - include: line-ending
300+ - include: pop-if-not-whitespace
301+ - match: '(?i)\bcpu\b'
302+ scope: support.function.directive.asm.x86_64
303+ push:
304+ - match: '(?i)\b(?:(?:80|[1-6])86|pentium|ppro|p[234]|katmai|willamette|prescott|(?:x|ia)64)\b'
305+ scope: support.constant.directive.asm.x86_64
306+ pop: true
307+ - include: line-continuation
308+ - include: pop-if-not-whitespace
309+ - include: line-ending
310+ - include: main
311+ - match: '(?i)\bfloat\b'
312+ scope: support.function.directive.asm.x86_64
313+ push:
314+ - match: '(?i)\b(?:(?:no)?daz|near|up|down|zero|default)\b'
315+ scope: support.constant.directive.asm.x86_64
316+ pop: true
317+ - include: line-continuation
318+ - include: pop-if-not-whitespace
319+ - include: line-ending
320+ - include: main
321+ - match: '(?i)(\[)\s*(warning)\b'
322+ captures:
323+ 2: support.function.directive.asm.x86_64
324+ push:
325+ - match: '(?i)([+\-*])|(error)\s*(=)\s*'
326+ captures:
327+ 1: keyword.control.warning.asm.x86_64
328+ 2: support.constant.directive.warning.asm.x86_64
329+ 3: keyword.operator.assignment.asm.x86_64
330+ push:
331+ - match: '(?i)\b(other|macro-(?:params|selfref|defaults)|orphan-labels|number-overflow|gnu-elf-extensions|float-(?:overflow|denorm|underflow|toolong)|user|lock|hle|bnd|zext-reloc|ptr|(?:bad|unknown|not-my)-pragma|unknown-warning|all)(?=\]|\s)'
332+ scope: support.constant.directive.warning.asm.x86_64
333+ pop: true
334+ - match: '\S+(?=\])'
335+ scope: invalid.illegal.support.constant.directive.warning.asm.x86_64
336+ pop: true
337+ - match: '\S+'
338+ scope: invalid.illegal.support.constant.directive.warning.asm.x86_64
339+ pop: true
340+ - match: '(?i)\b(?:all|error)\b'
341+ scope: support.constant.directive.warning.asm.x86_64
342+ - match: ']'
343+ pop: true
344+ - include: line-continuation
345+ - include: line-ending
346+ - match: '(?i)(\[)\s*(map)\b'
347+ captures:
348+ 2: support.function.directive.asm.x86_64
349+ push:
350+ - match: '(?i)\b(?:all|brief|sections|segments|symbols)\b'
351+ scope: support.constant.directive.map.asm.x86_64
352+ - match: '(?i)\b(?:std(?:out|err))\b'
353+ scope: meta.path.asm.x86_64 support.constant.directive.map.asm.x86_64
354+ - match: '{{valid_identifier}}'
355+ scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64
356+ - match: ']'
357+ pop: true
358+ - include: line-continuation
359+ - include: line-ending
360+ section-parameters:
361+ - match: '='
362+ scope: keyword.operator.assignment.asm.x86_64
363+ - match: '(?i)\b(?:(?:v)?start|align|absolute)\b'
364+ scope: variable.parameter.directive.asm.x86_64
365+ - match: '(?i)\b(?:(?:prog|no)bits|private|public|common|stack|code|text|data|bss|rdata|info)\b'
366+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64
367+ - match: '(?i)\b(?:mixed|zerofill|no_dead_strip|live_support|strip_static_syms)\b'
368+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.macho.asm.x86_64
369+ - match: '(?i)\b(?:(?:no)?(?:alloc|exec|write)|tls)\b'
370+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.elf.asm.x86_64
371+ - match: '(?i)\b(?:(?:v)?follows)\b'
372+ scope: variable.parameter.directive.asm.x86_64
373+ push:
374+ - match: '='
375+ scope: keyword.operator.assignment.asm.x86_64
376+ set: [pop, section-name]
377+ - include: line-continuation
378+ - include: line-ending
379+ - match: '(?i)\b(?:class|overlay)\b'
380+ scope: variable.parameter.directive.asm.x86_64
381+ push:
382+ - match: '='
383+ scope: keyword.operator.assignment.asm.x86_64
384+ - match: '{{valid_identifier}}'
385+ scope: entity.name.class.asm.x86_64 string.unquoted.asm.x86_64
386+ pop: true
387+ - include: line-continuation
388+ - include: line-ending
389+ - include: line-continuation
390+ - include: line-ending
391+ - include: main
392+ section-name:
393+ - match: '(?:\.|\b)(?:text|bss|(?:[rpx]|ro)?data|code)\b'
394+ scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.asm.x86_64
395+ pop: true
396+ - match: '\b__(?:text|const|data|bss|TEXT|CONST|DATA|BSS)\b'
397+ scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.macho.asm.x86_64
398+ pop: true
399+ - match: '(?:\.)(?:[lt](?:data|bss)|lrodata|comment)\b'
400+ scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.elf.asm.x86_64
401+ pop: true
402+ - match: '(?:\.|\b){{valid_identifier}}\b'
403+ scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64
404+ pop: true
405+ - match: '(?=`|''|")'
406+ set:
407+ - meta_scope: entity.name.section.asm.x86_64
408+ - include: strings
409+ - include: pop
410+ - include: line-continuation
411+ - include: pop-if-not-whitespace
412+ - include: line-ending
413+ export-parameters:
414+ - match: '='
415+ scope: keyword.operator.assignment.asm.x86_64
416+ - match: '(?i)\b(?:resident|nodata)\b'
417+ scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64
418+ - match: '(?i)\b(?:parm)\b'
419+ scope: variable.parameter.directive.asm.x86_64
420+ - include: primitive-directive-end
421+ - include: line-continuation
422+ - include: line-ending
423+ - include: main
424+
425+ operators:
426+ - match: '[+\-*/]'
427+ scope: keyword.operator.arithmetic.asm.x86_64
428+ - match: '(%%|%)[[:space:]]'
429+ captures:
430+ 1: keyword.operator.arithmetic.asm.x86_64
431+ - match: '[|&^~!]|<<|>>'
432+ scope: keyword.operator.bitwise.asm.x86_64
433+ - match: '(?i)\b(seg|wrt)\b'
434+ scope: keyword.operator.word.asm.x86_64
435+ - match: ','
436+ scope: operator.separator.asm.x86_64
437+
438+ structs:
439+ - match: '(?i)\bstruc\b'
440+ scope: support.function.asm.x86_64 meta.struct.asm.x86_64
441+ push:
442+ - meta_content_scope: meta.struct.asm.x86_64.1
443+ - match: '{{valid_identifier}}'
444+ scope: entity.name.struct.asm.x86_64
445+ set:
446+ - meta_scope: meta.struct.asm.x86_64
447+ - match: '(?i)\bendstruc\b'
448+ scope: support.function.asm.x86_64 meta.struct.asm.x86_64
449+ pop: true
450+ - include: main
451+ - match: '\w'
452+ scope: invalid.illegal.entity.name.struct.asm.x86_64
453+ - match: '(?i)\bendstruc\b'
454+ scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64
455+ - match: '(?i)\bistruc\b'
456+ scope: support.function.asm.x86_64 meta.struct.asm.x86_64
457+ push:
458+ - meta_content_scope: meta.struct.asm.x86_64.1
459+ - match: '{{valid_identifier}}'
460+ scope: variable.other.asm.x86_64
461+ set:
462+ - meta_scope: meta.struct.asm.x86_64
463+ - match: '(?i)\bat\b'
464+ scope: support.function.asm.x86_64 meta.struct.asm.x86_64
465+ - match: '(?i)\biend\b'
466+ scope: support.function.asm.x86_64 meta.struct.asm.x86_64
467+ pop: true
468+ - include: main
469+ - match: '\w'
470+ scope: invalid.illegal.variable.struct.asm.x86_64
471+ - match: '(?i)\biend\b'
472+ scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64
473+ - match: '(?i)\balignb?\b'
474+ scope: support.function.asm.x86_64
475+ - match: '(?i)\b(sectalign)\s+(on|off)?'
476+ captures:
477+ 1: support.function.asm.x86_64
478+ 2: support.constant.asm.x86_64
479+
480+ entities:
481+ - match: '\$@feat\.00\b'
482+ scope: variable.language.sseh.asm.x86_64
483+ - match: '(\$)(?:\w+)\b'
484+ scope: variable.other.asm.x86_64
485+ captures:
486+ 1: punctuation.definition.variable.asm.x86_64
487+ - match: '\${3,}'
488+ scope: invalid.illegal.variable.language.asm.x86_64
489+ - match: '\$'
490+ scope: variable.language.asm.x86_64
491+
492+ comments:
493+ - match: (?:(;)|(?:^|\s)(#)\s).*$
494+ scope: comment.line.asm.x86_64
495+ captures:
496+ 1: punctuation.definition.comment.asm.x86_64
497+ 2: punctuation.definition.comment.asm.x86_64
498+ - match: /\*
499+ scope: punctuation.definition.comment.asm.x86_64
500+ push:
501+ - meta_scope: comment.block.asm.x86_64
502+ - match: \*/
503+ scope: punctuation.definition.comment.asm.x86_64
504+ pop: true
505+
506+ preprocessor: # http://www.nasm.us/doc/nasmdoc4.html
507+ - include: preprocessor-macro-multiline
508+ - include: preprocessor-macro-define
509+ - include: preprocessor-macro-indirection
510+ - include: preprocessor-conditions
511+ - include: preprocessor-other
512+ # single-line macro
513+ preprocessor-macro-define:
514+ - match: '^\s*((%)x?i?define)\b'
515+ captures:
516+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64
517+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
518+ push:
519+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
520+ - include: preprocessor-comments
521+ - match: '(?:{{valid_identifier}})(?=\()'
522+ scope: entity.name.function.preprocessor.asm.x86_64
523+ set:
524+ - match: '\('
525+ scope: punctuation.section.group.begin.asm.x86_64
526+ set: preprocessor-macro-params
527+ - match: '{{valid_identifier}}'
528+ scope: entity.name.constant.preprocessor.asm.x86_64
529+ set: preprocessor-macro-definition
530+ - include: line-continuation
531+ - include: pop-if-not-whitespace
532+ - include: line-ending
533+ - match: '^\s*((%)(?:include|depend))\b'
534+ captures:
535+ 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64
536+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
537+ push: preprocessor-macro-definition
538+ - match: '^\s*((%)use)\b'
539+ captures:
540+ 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64
541+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
542+ push:
543+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64
544+ - include: strings
545+ - include: line-ending
546+ - include: preprocessor-macro-indirection
547+ - match: '^\s*((%)(?:assign|i?deftok|strcat|strlen|substr|pathsearch|push|pop|repl|line|clear))\b'
548+ captures:
549+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
550+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
551+ push:
552+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
553+ - include: preprocessor-macro-indirection
554+ - include: preprocessor-conditions-constant
555+ - match: '^\s*((%)(?:arg|local))\b'
556+ captures:
557+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
558+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
559+ push:
560+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
561+ - match: '({{valid_identifier}})(\:)(?=\w+)'
562+ captures:
563+ 1: meta.preprocessor.asm.x86_64 variable.parameter.macro.asm.x86_64
564+ 2: punctuation.separator.asm.x86_64
565+ - match: '\,'
566+ scope: punctuation.separator.asm.x86_64
567+ - include: data-types
568+ - match: '\w+\b'
569+ scope: invalid.illegal.storage.type.asm.x86_64
570+ - include: line-continuation
571+ - include: line-ending
572+ - match: '^\s*((%)stacksize)\b'
573+ captures:
574+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
575+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
576+ push:
577+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
578+ - match: '\b(flat(?:64)?|large|small)\b'
579+ scope: support.constant.macro.asm.x86_64
580+ - match: '\w+\b'
581+ scope: invalid.illegal.storage.type.asm.x86_64
582+ - include: line-continuation
583+ - include: line-ending
584+ - match: '^\s*((%)i?defstr)\s+(?:({{valid_identifier}})|(%%)({{valid_identifier}}))\b'
585+ captures:
586+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.assign.asm.x86_64
587+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
588+ 3: entity.name.constant.preprocessor.asm.x86_64
589+ 4: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
590+ 5: entity.name.constant.special.asm.x86_64
591+ push:
592+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64
593+ - include: preprocessor-macro-indirection
594+ - include: line-ending
595+ - match: '^\s*((%)(?:warning|error|fatal|pragma))(?=\s|$)'
596+ captures:
597+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.assign.asm.x86_64
598+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
599+ 3: entity.name.constant.preprocessor.asm.x86_64
600+ push:
601+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64
602+ - include: strings
603+ - include: preprocessor-macro-indirection
604+ - include: line-ending
605+ preprocessor-macro-params-illegal:
606+ - meta_scope: invalid.illegal.asm.x86_64
607+ - include: preprocessor-macro-params
608+ preprocessor-macro-params:
609+ - meta_scope: meta.preprocessor.macro.parameters.asm.x86_64 meta.group.asm.x86_64
610+ - match: '{{valid_identifier}}'
611+ scope: variable.parameter.asm.x86_64
612+ - match: '\)'
613+ scope: punctuation.section.group.end.asm.x86_64
614+ set: preprocessor-macro-definition
615+ - match: ','
616+ scope: punctuation.separator.asm.x86_64
617+ push:
618+ - match: '{{valid_identifier}}'
619+ scope: variable.parameter.asm.x86_64
620+ pop: true
621+ - include: line-continuation
622+ - include: preprocessor-comments
623+ - match: '\.\.\.'
624+ scope: keyword.operator.variadic.asm.x86_64
625+ - match: '(?=\))'
626+ pop: true
627+ - match: '(/\*).*(\*/)'
628+ scope: comment.block.asm.x86_64
629+ captures:
630+ 1: punctuation.definition.comment.asm.x86_64
631+ 2: punctuation.definition.comment.asm.x86_64
632+ - match: '\S+'
633+ scope: invalid.illegal.unexpected-character.asm.x86_64
634+ - include: line-continuation
635+ - include: preprocessor-comments
636+ - match: '\.\.\.'
637+ scope: keyword.operator.variadic.asm.x86_64
638+ - match: '(/\*).*(\*/)'
639+ scope: comment.block.asm.x86_64
640+ captures:
641+ 1: punctuation.definition.comment.asm.x86_64
642+ 2: punctuation.definition.comment.asm.x86_64
643+ - match: '$\n'
644+ scope: invalid.illegal.unexpected-end-of-line.asm.x86_64
645+ preprocessor-macro-definition:
646+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
647+ - include: preprocessor-comments
648+ - include: line-continuation
649+ - include: line-ending
650+ - include: main
651+ preprocessor-macro-indirection:
652+ - match: '((%)(\[))'
653+ captures:
654+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64
655+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
656+ 3: meta.brackets.asm.x86_64 punctuation.section.brackets.begin.asm.x86_64
657+ push:
658+ - meta_scope: meta.brackets.asm.x86_64 meta.preprocessor.macro.asm.x86_64
659+ - include: line-continuation
660+ - include: line-ending
661+ - include: main
662+ - match: '\]'
663+ scope: punctuation.section.brackets.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64
664+ pop: true
665+ - match: '((%)\+)\s+'
666+ captures:
667+ 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64
668+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
669+ - match: '((%)(\?\??))'
670+ captures:
671+ 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64
672+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
673+ 3: variable.language.preprocessor.asm.x86_64
674+ - match: '((%\$+)({{valid_identifier}})(?:(\:)?|\b))'
675+ captures:
676+ 1: meta.preprocessor.asm.x86_64
677+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
678+ 3: entity.name.constant.special.asm.x86_64
679+ 4: punctuation.separator.asm.x86_64
680+ - match: '((%)(\!))'
681+ captures:
682+ 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64
683+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
684+ 3: punctuation.definition.variable.asm.x86_64
685+ push:
686+ - meta_content_scope: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 variable.parameter.preprocessor.environment.asm.x86_64
687+ - match: '{{valid_identifier}}'
688+ scope: variable.parameter.preprocessor.environment.unquoted.asm.x86_64
689+ pop: true
690+ - match: '(?=`|''|")'
691+ set:
692+ - meta_scope: variable.parameter.preprocessor.environment.quoted.asm.x86_64
693+ - include: strings
694+ - include: pop
695+ - include: pop
696+ preprocessor-conditions: # also see preprocessor-macro-conditions-multiline
697+ - match: '^\s*((%)ifn?(?:idni?|id|num|str|token|empty|env)?)\b'
698+ captures:
699+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
700+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
701+ push: preprocessor-conditions-content-block
702+ - match: '^\s*((%)ifn?(?:def|ctx))\b'
703+ captures:
704+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
705+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
706+ push: [preprocessor-conditions-content-block, preprocessor-conditions-constant]
707+ - match: '^\s*((%)rep)\b'
708+ captures:
709+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
710+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
711+ push: preprocessor-conditions-content-block
712+ - match: '^\s*((%)ifn?macro)\b'
713+ captures:
714+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
715+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
716+ push: [preprocessor-conditions-content-block, preprocessor-macro-arguments-signature]
717+ - include: preprocessor-conditions-parity
718+ preprocessor-conditions-constant:
719+ - meta_content_scope: meta.preprocessor.asm.x86_64
720+ - match: '(?:{{valid_identifier}})(?=\()'
721+ scope: entity.name.constant.preprocessor.asm.x86_64
722+ set:
723+ - match: '\('
724+ scope: punctuation.section.group.begin.asm.x86_64
725+ set: preprocessor-macro-params-illegal
726+ - match: '{{valid_identifier}}\b'
727+ scope: meta.preprocessor.asm.x86_64 entity.name.constant.preprocessor.asm.x86_64
728+ pop: true
729+ - include: line-continuation
730+ - include: pop-if-not-whitespace
731+ - include: line-ending
732+ - include: main
733+ preprocessor-conditions-content-block:
734+ - meta_content_scope: meta.block.preprocessor.asm.x86_64
735+ - include: preprocessor-conditions-content-block-common
736+ - include: main
737+ preprocessor-conditions-content-block-common:
738+ - match: '^\s*((%)(?:elifn?(?:idni?|id|num|str|token|empty|env)?|else|exitrep))\b'
739+ captures:
740+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
741+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
742+ - match: '^\s*((%)(?:elifn?(?:def|ctx)))\b'
743+ captures:
744+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
745+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
746+ push: preprocessor-conditions-constant
747+ - match: '^\s*((%)elifn?macro)\b'
748+ captures:
749+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
750+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
751+ push: preprocessor-macro-arguments-signature
752+ - match: '^\s*((%)(?:end(?:if|rep)))\b'
753+ captures:
754+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
755+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
756+ pop: true
757+ preprocessor-conditions-parity:
758+ - match: '^\s*((%)(?:elifn?(?:macro|def|ctx|idni?|id|num|str|token|empty|env)?|else|(?:end(?:if|rep))|exitrep))\b'
759+ captures:
760+ 1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
761+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
762+ preprocessor-other:
763+ - include: preprocessor-macro-indirection
764+ - match: '^\s*((%)undef)\b'
765+ captures:
766+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
767+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
768+ push:
769+ - meta_scope: meta.preprocessor.asm.x86_64
770+ - include: line-continuation
771+ - include: line-ending
772+ - include: preprocessor-comments
773+ - match: '{{valid_identifier}}'
774+ scope: entity.name.constant.preprocessor.asm.x86_64
775+ pop: true
776+ - match: '^\s*((%)unmacro)\b'
777+ captures:
778+ 1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64
779+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
780+ push: preprocessor-macro-arguments-signature
781+ preprocessor-macro-arguments-signature:
782+ - meta_scope: meta.preprocessor.asm.x86_64
783+ - include: preprocessor-comments
784+ - match: '({{valid_identifier}})(?:\s+(?:(\d+(?:(-)(?:\d+|\*))?)(\+)?(\.nolist\b)?))'
785+ captures:
786+ 1: entity.name.function.preprocessor.asm.x86_64
787+ 2: variable.parameter.preprocessor.asm.x86_64
788+ 3: keyword.operator.preprocessor.range.asm.x86_64
789+ 4: storage.modifier.preprocessor.greedy.asm.x86_64
790+ 5: storage.modifier.preprocessor.listing.asm.x86_64
791+ pop: true
792+ - include: line-continuation
793+ - include: pop-if-not-whitespace
794+ - include: line-ending
795+ # multi-line macro
796+ preprocessor-macro-multiline:
797+ - match: '^\s*((%)i?macro)\b'
798+ captures:
799+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.define.asm.x86_64
800+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
801+ push:
802+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
803+ - include: preprocessor-comments
804+ - match: '(?:{{valid_identifier}})(?=\()'
805+ scope: entity.name.constant.preprocessor.asm.x86_64
806+ set:
807+ - meta_content_scope: invalid.illegal.asm.x86_64
808+ - match: '\('
809+ scope: punctuation.section.group.begin.asm.x86_64
810+ set: preprocessor-macro-params-illegal
811+ - match: '({{valid_identifier}})(?:\s+(?:(\d+(?:(-)(?:\d+|\*))?)(\+)?(\.nolist\b)?))'
812+ captures:
813+ 1: entity.name.function.preprocessor.asm.x86_64
814+ 2: variable.parameter.preprocessor.asm.x86_64
815+ 3: keyword.operator.preprocessor.range.asm.x86_64
816+ 4: storage.modifier.preprocessor.greedy.asm.x86_64
817+ 5: storage.modifier.preprocessor.listing.asm.x86_64
818+ set: preprocessor-macro-definition-multiline-with-parameters
819+ - match: '^\s*((%)endmacro)\b'
820+ captures:
821+ 1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64
822+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
823+ preprocessor-macro-parameter:
824+ - match: '((%)(\-?\d+))'
825+ captures:
826+ 1: meta.preprocessor.asm.x86_64
827+ 2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
828+ 3: variable.other.preprocessor.asm.x86_64
829+ preprocessor-macro-definition-multiline-with-parameters:
830+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
831+ - include: preprocessor-comments
832+ - include: preprocessor-macro-parameter
833+ - include: preprocessor-macro-indirection
834+ - include: preprocessor-macro-conditions-multiline
835+ - include: preprocessor-macro-definition-multiline
836+ preprocessor-macro-definition-multiline:
837+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
838+ - include: preprocessor-comments
839+ - match: '^\s*((%)endmacro)\b'
840+ captures:
841+ 1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64
842+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
843+ pop: true
844+ - match: '((%%)({{valid_identifier}})(?:(\:)?|\b))'
845+ captures:
846+ 1: meta.preprocessor.asm.x86_64
847+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
848+ 3: entity.name.constant.special.asm.x86_64
849+ 4: punctuation.separator.asm.x86_64
850+ - match: '((%)({))'
851+ captures:
852+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64
853+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
854+ 3: meta.braces.asm.x86_64 punctuation.section.braces.begin.asm.x86_64
855+ push:
856+ - meta_scope: meta.braces.asm.x86_64 meta.preprocessor.macro.asm.x86_64
857+ - include: preprocessor-macro-indirection
858+ - match: ':'
859+ scope: punctuation.separator.asm.x86_64
860+ - match: '}'
861+ scope: punctuation.section.braces.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64
862+ pop: true
863+ - match: '^\s*((%)(?:rotate))\b'
864+ captures:
865+ 1: meta.preprocessor.asm.x86_64 keyword.operator.word.asm.x86_64
866+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
867+ - match: '^\s*((%)(?:include|depend))\b'
868+ captures:
869+ 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64
870+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
871+ set: preprocessor-macro-definition-multiline-with-parameters
872+ - match: '^\s*((%)(?:pathsearch))\b'
873+ captures:
874+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
875+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
876+ set: [preprocessor-macro-definition-multiline-with-parameters, preprocessor-conditions-constant]
877+ - match: '^\s*((%)x?i?define)\b'
878+ captures:
879+ 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64
880+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
881+ push:
882+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
883+ - include: preprocessor-comments
884+ - match: '(?:{{valid_identifier}})(?=\()'
885+ scope: entity.name.function.preprocessor.asm.x86_64
886+ set:
887+ - match: '\('
888+ scope: punctuation.section.group.begin.asm.x86_64
889+ set: preprocessor-macro-params
890+ - match: '{{valid_identifier}}'
891+ scope: entity.name.constant.preprocessor.asm.x86_64
892+ set: preprocessor-macro-definition-inside-multiline
893+ - include: line-continuation
894+ - include: pop-if-not-whitespace
895+ - include: line-ending
896+
897+ - include: preprocessor-macro-indirection
898+ - include: preprocessor-conditions
899+ - include: main
900+ preprocessor-macro-conditions-multiline: # also see preprocessor-conditions
901+ - match: '^\s*((%)ifn?(?:idni?|id|num|str|token|empty|env)?)\b'
902+ captures:
903+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
904+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
905+ push: preprocessor-conditions-content-block-multiline
906+ - match: '^\s*((%)ifn?(?:def|ctx))\b'
907+ captures:
908+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
909+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
910+ push: [preprocessor-conditions-content-block-multiline, preprocessor-conditions-constant]
911+ - match: '^\s*((%)rep)\b'
912+ captures:
913+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
914+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
915+ push: preprocessor-conditions-content-block-multiline
916+ - match: '^\s*((%)ifn?macro)\b'
917+ captures:
918+ 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64
919+ 2: punctuation.definition.keyword.preprocessor.asm.x86_64
920+ push: [preprocessor-macro-arguments-signature, preprocessor-conditions-content-block-multiline]
921+ - include: preprocessor-conditions-parity
922+ preprocessor-conditions-content-block-multiline:
923+ - meta_content_scope: meta.block.preprocessor.asm.x86_64
924+ - include: preprocessor-conditions-content-block-common
925+ - include: preprocessor-macro-definition-multiline-with-parameters
926+ preprocessor-macro-definition-inside-multiline:
927+ - meta_content_scope: meta.preprocessor.macro.asm.x86_64
928+ - include: preprocessor-macro-parameter
929+ - include: preprocessor-macro-definition
930+
931+ strings: # Character strings: http://www.nasm.us/doc/nasmdoc3.html#section-3.4.2
932+ - match: '`'
933+ scope: punctuation.definition.string.begin.asm.x86_64
934+ push: string-backquote
935+ - match: ''''
936+ scope: punctuation.definition.string.begin.asm.x86_64
937+ push: string-single
938+ - match: '"'
939+ scope: punctuation.definition.string.begin.asm.x86_64
940+ push: string-double
941+ string-content:
942+ - match: '\\u[[:xdigit:]]{4}'
943+ scope: constant.character.escape.asm.x86_64
944+ - match: '\\U[[:xdigit:]]{8}'
945+ scope: constant.character.escape.asm.x86_64
946+ - match: '\\x[[:xdigit:]]{1,2}'
947+ scope: constant.character.escape.asm.x86_64
948+ - match: '\\[0-7]{1,3}'
949+ scope: constant.character.escape.asm.x86_64
950+ - match: '\\[''"`\\?abtnvfre]'
951+ scope: constant.character.escape.asm.x86_64
952+ - match: '\\.'
953+ scope: invalid.illegal.constant.character.escape.asm.x86_64
954+ string-backquote:
955+ - meta_scope: string.quoted.other.asm.x86_64
956+ - meta_include_prototype: false
957+ - include: string-content
958+ - match: '`'
959+ scope: punctuation.definition.string.end
960+ pop: true
961+ string-single:
962+ - meta_scope: string.quoted.single.asm.x86_64
963+ - meta_include_prototype: false
964+ - match: ''''
965+ scope: punctuation.definition.string.end
966+ pop: true
967+ string-double:
968+ - meta_scope: string.quoted.double.asm.x86_64
969+ - meta_include_prototype: false
970+ - match: '"'
971+ scope: punctuation.definition.string.end
972+ pop: true
973+
974+ registers:
975+ - match: '(?i)\b(?:[abcd][hl]|[er]?[abcd]x|[er]?(?:di|si|bp|sp)|dil|sil|bpl|spl|r(?:8|9|1[0-5])[bdlw]?)\b'
976+ scope: constant.language.register.general-purpose.asm.x86_64
977+ - match: '(?i)\b(?:[cdefgs]s)\b'
978+ scope: constant.language.register.segment.asm.x86_64
979+ - match: '(?i)\b(?:[er]?flags)\b'
980+ scope: constant.language.register.flags.asm.x86_64
981+ - match: '(?i)\b(?:[er]?ip)\b'
982+ scope: constant.language.register.instruction-pointer.asm.x86_64
983+ - match: '(?i)\b(?:cr[02-4])\b'
984+ scope: constant.language.register.control.asm.x86_64
985+ - match: '(?i)\b(?:(?:mm|st|fpr)[0-7])\b'
986+ scope: constant.language.register.mmx.asm.x86_64
987+ - match: '(?i)\b(?:[xy]mm(?:[0-9]|1[0-5])|mxcsr)\b'
988+ scope: constant.language.register.sse_avx.asm.x86_64
989+ - match: '(?i)\b(?:zmm(?:[12]?[0-9]|30|31))\b'
990+ scope: constant.language.register.avx512.asm.x86_64
991+ - match: '(?i)\b(?:bnd(?:[0-3]|cfg[su]|status))\b'
992+ scope: constant.language.register.memory-protection.asm.x86_64
993+ - match: '(?i)\b(?:(?:[gil]dt)r?|tr)\b'
994+ scope: constant.language.register.system-table-pointer.asm.x86_64
995+ - match: '(?i)\b(?:dr[0-367])\b'
996+ scope: constant.language.register.debug.asm.x86_64
997+ - match: '(?i)\b(?:cr8|dr(?:[89]|1[0-5])|efer|tpr|syscfg)\b'
998+ scope: constant.language.register.amd.asm.x86_64
999+ - match: '(?i)\b(?:db[0-367]|t[67]|tr[3-7]|st)\b'
1000+ scope: invalid.deprecated.constant.language.register.asm.x86_64
1001+ - match: '(?i)\b[xy]mm(?:1[6-9]|2[0-9]|3[01])\b'
1002+ scope: invalid.deprecated.constant.language.register.asm.x86_64
1003+
1004+ mnemonics: # see valid.asm for references
1005+ - include: mnemonics-general-purpose
1006+ - include: mnemonics-fpu
1007+ - include: mnemonics-mmx
1008+ - include: mnemonics-sse
1009+ - include: mnemonics-sse2
1010+ - include: mnemonics-sse3
1011+ - include: mnemonics-sse4
1012+ - include: mnemonics-aesni
1013+ - include: mnemonics-avx
1014+ - include: mnemonics-avx2
1015+ - include: mnemonics-tsx
1016+ - include: mnemonics-system
1017+ - include: mnemonics-64bit
1018+ - include: mnemonics-vmx
1019+ - include: mnemonics-smx
1020+ - include: mnemonics-intel-isa-sgx
1021+ - include: mnemonics-intel-isa-mpx
1022+ - include: mnemonics-intel-isa-sha
1023+ - include: mnemonics-supplemental-amd
1024+ - include: mnemonics-supplemental-cyrix
1025+ - include: mnemonics-supplemental-via
1026+ - include: mnemonics-undocumented
1027+ - include: mnemonics-future-intel
1028+ - include: mnemonics-pseudo-ops
1029+ #- include: mnemonics-invalid
1030+ mnemonics-general-purpose:
1031+ - match: '(?i)\b(?:mov(?:[sz]x)?|cmov(?:n?[abceglopsz]|n?[abgl]e|p[eo]))\b'
1032+ scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.mov
1033+ - match: '(?i)\b(xchg|bswap|xadd|cmpxchg(8b)?)\b'
1034+ scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.xchg
1035+ - match: '(?i)\b((push|pop)(ad?)?|cwde?|cdq|cbw)\b'
1036+ scope: keyword.operator.word.mnemonic.general-purpose.data-transfer.other
1037+ - match: '(?i)\b(adcx?|adox|add|sub|sbb|i?mul|i?div|inc|dec|neg|cmp)\b'
1038+ scope: keyword.operator.word.mnemonic.general-purpose.binary-arithmetic
1039+ - match: '(?i)\b(daa|das|aaa|aas|aam|aad)\b'
1040+ scope: keyword.operator.word.mnemonic.general-purpose.decimal-arithmetic
1041+ - match: '(?i)\b(and|x?or|not)\b'
1042+ scope: keyword.operator.word.mnemonic.general-purpose.logical
1043+ - match: '(?i)\b(s[ah][rl]|sh[rl]d|r[co][rl])\b'
1044+ scope: keyword.operator.word.mnemonic.general-purpose.rotate
1045+ - match: '(?i)\b(set(n?[abceglopsz]|n?[abgl]e|p[eo]))\b'
1046+ scope: keyword.operator.word.mnemonic.general-purpose.bit-and-byte.set
1047+ - match: '(?i)\b(bt[crs]?|bs[fr]|test|crc32|popcnt)\b'
1048+ scope: keyword.operator.word.mnemonic.general-purpose.bit-and-byte.other
1049+ - match: '(?i)\b(jmp|jn?[abceglopsz]|jn?[abgl]e|jp[eo]|j[er]?cxz)\b'
1050+ scope: keyword.operator.word.mnemonic.general-purpose.control-transfer.jmp
1051+ - match: '(?i)\b(loop(n?[ez])?|call|ret|iret[dq]?|into?|bound|enter|leave)\b'
1052+ scope: keyword.operator.word.mnemonic.general-purpose.control-transfer.other
1053+ - match: '(?i)\b((mov|cmp|sca|lod|sto)(s[bdw]?)|rep(n?[ez])?)\b'
1054+ scope: keyword.operator.word.mnemonic.general-purpose.strings
1055+ - match: '(?i)\b((in|out)(s[bdw]?)?)\b'
1056+ scope: keyword.operator.word.mnemonic.general-purpose.io
1057+ - match: '(?i)\b((st|cl)[cdi]|cmc|[ls]ahf|(push|pop)f[dq]?)\b'
1058+ scope: keyword.operator.word.mnemonic.general-purpose.flag-control
1059+ - match: '(?i)\b(l[defgs]s)\b'
1060+ scope: keyword.operator.word.mnemonic.general-purpose.segment-registers
1061+ - match: '(?i)\b(lea|nop|ud2|xlatb?|cpuid|movbe)\b'
1062+ scope: keyword.operator.word.mnemonic.general-purpose.misc
1063+ - match: '(?i)\b(rdrand|rdseed)\b'
1064+ scope: keyword.operator.word.mnemonic.general-purpose.rng
1065+ - match: '(?i)\b(andn|bextr|bls(i|r|msk)|bzhi|pdep|pext|[lt]zcnt|(mul|ror|sar|shl|shr)x)\b'
1066+ scope: keyword.operator.word.mnemonic.general-purpose.bmi
1067+ mnemonics-fpu:
1068+ - match: '(?i)\b(fcmov(n?([beu]|be)))\b'
1069+ scope: keyword.operator.word.mnemonic.fpu.data-transfer.mov
1070+ - match: '(?i)\b(f(i?(ld|stp?)|b(ld|stp)|xch))\b'
1071+ scope: keyword.operator.word.mnemonic.fpu.data-transfer.other
1072+ - match: '(?i)\b(f((add|div|mul|sub)p?|i(add|div|mul|sub)|(div|sub)rp?|i(div|sub)r))\b'
1073+ scope: keyword.operator.word.mnemonic.fpu.basic-arithmetic.basic
1074+ - match: '(?i)\b(f(prem1?|abs|chs|rndint|scale|sqrt|xtract))\b'
1075+ scope: keyword.operator.word.mnemonic.fpu.basic-arithmetic.other
1076+ - match: '(?i)\b(f(u?com[ip]?p?|icomp?|tst|xam))\b'
1077+ scope: keyword.operator.word.mnemonic.fpu.comparison
1078+ - match: '(?i)\b(f(sin|cos|sincos|pa?tan|2xm1|yl2x(p1)?))\b'
1079+ scope: keyword.operator.word.mnemonic.fpu.transcendental
1080+ - match: '(?i)\b(fld(1|z|pi|l2[et]|l[ng]2))\b'
1081+ scope: keyword.operator.word.mnemonic.fpu.load-constants
1082+ - match: '(?i)\b(f((inc|dec)stp|free|n?(init|clex|st[cs]w|stenv|save)|ld(cw|env)|rstor|nop)|f?wait)\b'
1083+ scope: keyword.operator.word.mnemonic.fpu.control-management
1084+ - match: '(?i)\b(fx(save|rstor)(64)?)\b'
1085+ scope: keyword.operator.word.mnemonic.fpu.state-management
1086+ mnemonics-mmx:
1087+ - match: '(?i)\b(mov[dq])\b'
1088+ scope: keyword.operator.word.mnemonic.mmx.data-transfer
1089+ - match: '(?i)\b(pack(ssdw|[su]swb)|punpck[hl](bw|dq|wd))\b'
1090+ scope: keyword.operator.word.mnemonic.mmx.conversion
1091+ - match: '(?i)\b(p(((add|sub)(d|(u?s)?[bw]))|maddwd|mul[lh]w))\b'
1092+ scope: keyword.operator.word.mnemonic.mmx.packed-arithmetic
1093+ - match: '(?i)\b(pcmp((eq|gt)[bdw]))\b'
1094+ scope: keyword.operator.word.mnemonic.mmx.comparison
1095+ - match: '(?i)\b(pandn?|px?or)\b'
1096+ scope: keyword.operator.word.mnemonic.mmx.logical
1097+ - match: '(?i)\b(ps([rl]l[dwq]|raw|rad))\b'
1098+ scope: keyword.operator.word.mnemonic.mmx.shift-and-rotate
1099+ - match: '(?i)\b(emms)\b'
1100+ scope: keyword.operator.word.mnemonic.mmx.state-management
1101+ mnemonics-sse:
1102+ - match: '(?i)\b(mov(([ahlu]|hl|lh|msk)ps|ss))\b'
1103+ scope: keyword.operator.word.mnemonic.sse.data-transfer
1104+ - match: '(?i)\b((add|div|max|min|mul|rcp|r?sqrt|sub)[ps]s)\b'
1105+ scope: keyword.operator.word.mnemonic.sse.packed-arithmetic
1106+ - match: '(?i)\b(cmp[ps]s|u?comiss)\b'
1107+ scope: keyword.operator.word.mnemonic.sse.comparison
1108+ - match: '(?i)\b((andn?|x?or)ps)\b'
1109+ scope: keyword.operator.word.mnemonic.sse.logical
1110+ - match: '(?i)\b((shuf|unpck[hl])ps)\b'
1111+ scope: keyword.operator.word.mnemonic.sse.shuffle-and-unpack
1112+ - match: '(?i)\b(cvt(pi2ps|si2ss|ps2pi|tps2pi|ss2si|tss2si))\b'
1113+ scope: keyword.operator.word.mnemonic.sse.conversion
1114+ - match: '(?i)\b((ld|st)mxcsr)\b'
1115+ scope: keyword.operator.word.mnemonic.sse.state-management
1116+ - match: '(?i)\b(p(avg[bw]|extrw|insrw|(max|min)(sw|ub)|sadbw|shufw|mulhuw|movmskb))\b'
1117+ scope: keyword.operator.word.mnemonic.sse.simd-integer
1118+ - match: '(?i)\b(maskmovq|movntps|sfence)\b'
1119+ scope: keyword.operator.word.mnemonic.sse.cacheability-control
1120+ - match: '(?i)\b(prefetch(nta|t[0-2]|w(t1)?))\b'
1121+ scope: keyword.operator.word.mnemonic.sse.prefetch
1122+ mnemonics-sse2:
1123+ - match: '(?i)\b(mov([auhl]|msk)pd)\b'
1124+ scope: keyword.operator.word.mnemonic.sse2.data-transfer
1125+ - match: '(?i)\b((add|div|max|min|mul|sub|sqrt)[ps]d)\b'
1126+ scope: keyword.operator.word.mnemonic.sse2.packed-arithmetic
1127+ - match: '(?i)\b((andn?|x?or)pd)\b'
1128+ scope: keyword.operator.word.mnemonic.sse2.logical
1129+ - match: '(?i)\b((cmpp|u?comis)d)\b'
1130+ scope: keyword.operator.word.mnemonic.sse2.compare
1131+ - match: '(?i)\b((shuf|unpck[hl])pd)\b'
1132+ scope: keyword.operator.word.mnemonic.sse2.shuffle-and-unpack
1133+ - match: '(?i)\b(cvt(dq2pd|pi2pd|ps2pd|pd2ps|si2sd|sd2ss|ss2sd|t?(pd2dq|pd2pi|sd2si)))\b'
1134+ scope: keyword.operator.word.mnemonic.sse2.conversion
1135+ - match: '(?i)\b(cvt(dq2ps|ps2dq|tps2dq))\b'
1136+ scope: keyword.operator.word.mnemonic.sse2.packed-floating-point
1137+ - match: '(?i)\b(mov(dq[au]|q2dq|dq2q))\b'
1138+ scope: keyword.operator.word.mnemonic.sse2.simd-integer.mov
1139+ - match: '(?i)\b(p((add|sub|(s[lr]l|mulu|unpck[hl]q)d)q|shuf(d|[hl]w)))\b'
1140+ scope: keyword.operator.word.mnemonic.sse2.simd-integer.other
1141+ - match: '(?i)\b(clflush|[lm]fence|pause|maskmovdqu|movnt(dq|i|pd))\b'
1142+ scope: keyword.operator.word.mnemonic.sse2.cacheability-control
1143+ mnemonics-sse3:
1144+ - match: '(?i)\b(fisttp|lddqu|(addsub|h(add|sub))p[sd]|mov(sh|sl|d)dup|monitor|mwait)\b'
1145+ scope: keyword.operator.word.mnemonic.sse3
1146+ - match: '(?i)\b(ph(add|sub)(s?w|d))\b'
1147+ scope: keyword.operator.word.mnemonic.sse3.supplimental.horizontal-packed-arithmetic
1148+ - match: '(?i)\b(p((abs|sign)[bdw]|maddubsw|mulhrsw|shufb|alignr))\b'
1149+ scope: keyword.operator.word.mnemonic.sse3.supplimental.other
1150+ mnemonics-sse4:
1151+ - match: '(?i)\b(pmul(ld|dq)|dpp[ds])\b'
1152+ scope: keyword.operator.word.mnemonic.sse4.1.arithmetic
1153+ - match: '(?i)\b(movntdqa)\b'
1154+ scope: keyword.operator.word.mnemonic.sse4.1.load-hint
1155+ - match: '(?i)\b(blendv?p[ds]|pblend(vb|w))\b'
1156+ scope: keyword.operator.word.mnemonic.sse4.1.packed-blending
1157+ - match: '(?i)\b(p(min|max)(u[dw]|s[bd]))\b'
1158+ scope: keyword.operator.word.mnemonic.sse4.1.packed-integer
1159+ - match: '(?i)\b(round[ps][sd])\b'
1160+ scope: keyword.operator.word.mnemonic.sse4.1.packed-floating-point
1161+ - match: '(?i)\b((extract|insert)ps|p((ins|ext)(r[bdq])))\b'
1162+ scope: keyword.operator.word.mnemonic.sse4.1.insertion-and-extraction
1163+ - match: '(?i)\b(pmov([sz]x(b[dqw]|dq|wd|wq)))\b'
1164+ scope: keyword.operator.word.mnemonic.sse4.1.conversion
1165+ - match: '(?i)\b(mpsadbw|phminposuw|ptest|pcmpeqq|packusdw)\b'
1166+ scope: keyword.operator.word.mnemonic.sse4.1.other
1167+ - match: '(?i)\b(pcmp([ei]str[im]|gtq))\b'
1168+ scope: keyword.operator.word.mnemonic.sse4.2
1169+ mnemonics-aesni:
1170+ - match: '(?i)\b(aes((dec|enc)(last)?|imc|keygenassist)|pclmulqdq)\b'
1171+ scope: keyword.operator.word.mnemonic.aesni
1172+ mnemonics-avx:
1173+ - match: '(?i)\b(v((test|permil|maskmov)p[ds]|zero(all|upper)|(perm2|insert|extract|broadcast)f128|broadcasts[ds]))\b'
1174+ scope: keyword.operator.word.mnemonic.avx
1175+ - match: '(?i)\b(vaes((dec|enc)(last)?|imc|keygenassist)|vpclmulqdq)\b'
1176+ scope: keyword.operator.word.mnemonic.avx.promoted.aes
1177+ - match: '(?i)\b(v((cmp[ps]|u?comis)[ds]|pcmp([ei]str[im]|(eq|gt)[bdqw])))\b'
1178+ scope: keyword.operator.word.mnemonic.avx.promoted.comparison
1179+ - match: '(?i)\b(v(cvt(dq2pd|dq2ps|pd2ps|ps2pd|sd2ss|si2sd|si2ss|ss2sd|t?(pd2dq|ps2dq|sd2si|ss2si))))\b'
1180+ scope: keyword.operator.word.mnemonic.avx.promoted.conversion
1181+ - match: '(?i)\b(vh((add|sub)p[ds])|vph((add|sub)([dw]|sw)|minposuw))\b'
1182+ scope: keyword.operator.word.mnemonic.avx.promoted.horizontal-packed-arithmetic
1183+ - match: '(?i)\b(v((andn?|x?or)p[ds]))\b'
1184+ scope: keyword.operator.word.mnemonic.avx.promoted.logical
1185+ - match: '(?i)\b(v(mov(([ahl]|msk|nt|u)p[ds]|(hl|lh)ps|s([ds]|[hl]dup)|q)))\b'
1186+ scope: keyword.operator.word.mnemonic.avx.promoted.mov
1187+ - match: '(?i)\b(v((add|div|mul|sub|max|min|round|sqrt)[ps][ds]|(addsub|dp)p[ds]|(rcp|rsqrt)[ps]s))\b'
1188+ scope: keyword.operator.word.mnemonic.avx.promoted.packed-arithmetic
1189+ - match: '(?i)\b(v(pack[su]s(dw|wb)|punpck[hl](bw|dq|wd|qdq)|unpck[hl]p[ds]))\b'
1190+ scope: keyword.operator.word.mnemonic.avx.promoted.packed-conversion
1191+ - match: '(?i)\b(vp(shuf([bd]|[hl]w))|vshufp[ds])\b'
1192+ scope: keyword.operator.word.mnemonic.avx.promoted.packed-shuffle
1193+ - match: '(?i)\b(vp((abs|sign|(max|min)[su])[bdw]|(add|sub)([bdqw]|u?s[bw])|avg[bw]|extr[bdqw]|madd(wd|ubsw)|mul(hu?w|hrsw|l[dw]|u?dq)|sadbw))\b'
1194+ scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.arithmetic
1195+ - match: '(?i)\b(vp(andn?|x?or))\b'
1196+ scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.logical
1197+ - match: '(?i)\b(vpblend(vb|w))\b'
1198+ scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.blending
1199+ - match: '(?i)\b(vpmov(mskb|[sz]x(b[dqw]|w[dq]|dq)))\b'
1200+ scope: keyword.operator.word.mnemonic.avx.promoted.supplemental.mov
1201+ - match: '(?i)\b(vp(insr[bdqw]|sll(dq|[dqw])|srl(dq)))\b'
1202+ scope: keyword.operator.word.mnemonic.avx.promoted.simd-integer
1203+ - match: '(?i)\b(vp(sra[dwq]|srl[dqw]))\b'
1204+ scope: keyword.operator.word.mnemonic.avx.promoted.shift-and-rotate
1205+ - match: '(?i)\b(vblendv?p[ds])\b'
1206+ scope: keyword.operator.word.mnemonic.avx.promoted.packed-blending
1207+ - match: '(?i)\b(vp(test|alignr))\b'
1208+ scope: keyword.operator.word.mnemonic.avx.promoted.packed-other
1209+ - match: '(?i)\b(vmov(d(dup|qa|qu)?))\b'
1210+ scope: keyword.operator.word.mnemonic.avx.promoted.simd-integer.mov
1211+ - match: '(?i)\b(v((extract|insert)ps|lddqu|(ld|st)mxcsr|mpsadbw))\b'
1212+ scope: keyword.operator.word.mnemonic.avx.promoted.other
1213+ - match: '(?i)\b(v(maskmovdqu|movntdqa?))\b'
1214+ scope: keyword.operator.word.mnemonic.avx.promoted.cacheability-control
1215+ - match: '(?i)\b(vcvt(ph2ps|ps2ph))\b'
1216+ scope: keyword.operator.word.mnemonic.16-bit-floating-point-conversion
1217+ - match: '(?i)\b(vfn?m((add|sub)(132|213|231)[ps][ds])|vfm((addsub|subadd)(132|213|231)p[ds]))\b'
1218+ scope: keyword.operator.word.mnemonic.fma
1219+ mnemonics-avx2:
1220+ - match: '(?i)\b(v((broadcast|extract|insert|perm2)i128|pmaskmov[dq]|perm([dsq]|p[sd])))\b'
1221+ scope: keyword.operator.word.mnemonic.avx2.promoted.simd
1222+ - match: '(?i)\b(vpbroadcast[bdqw])\b'
1223+ scope: keyword.operator.word.mnemonic.avx2.promoted.packed
1224+ - match: '(?i)\b(vp(blendd|s[lr]lv[dq]|sravd))\b'
1225+ scope: keyword.operator.word.mnemonic.avx2.blend
1226+ - match: '(?i)\b(vp?gather[dq][dq]|vgather([dq]|dq)p[ds])\b'
1227+ scope: keyword.operator.word.mnemonic.avx2.gather
1228+ mnemonics-tsx:
1229+ - match: '(?i)\b(x(abort|acquire|release|begin|end|test))\b'
1230+ scope: keyword.operator.word.mnemonic.tsx
1231+ mnemonics-system:
1232+ - match: '(?i)\b((cl|st)ac|[ls]([gli]dt|tr|msw)|clts|arpl|lar|lsl|ver[rw]|inv(d|lpg|pcid)|wbinvd)\b'
1233+ scope: keyword.operator.word.mnemonic.system
1234+ - match: '(?i)\b(lock|hlt|rsm|(rd|wr)(msr|pkru|[fg]sbase)|rd(pmc|tscp?)|sys(enter|exit))\b'
1235+ scope: keyword.operator.word.mnemonic.system
1236+ - match: '(?i)\b(x((save(c|opt|s)?|rstors?)(64)?|[gs]etbv))\b'
1237+ scope: keyword.operator.word.mnemonic.system
1238+ mnemonics-64bit:
1239+ - match: '(?i)\b(cdqe|cqo|(cmp|lod|mov|sto)sq|cmpxchg16b|mov(ntq|sxd)|scasq|swapgs|sys(call|ret))\b'
1240+ scope: keyword.operator.word.mnemonic.64-bit-mode
1241+ mnemonics-vmx:
1242+ - match: '(?i)\b(vm(ptr(ld|st)|clear|read|write|launch|resume|xo(ff|n)|call|func)|inv(ept|vpid))\b'
1243+ scope: keyword.operator.word.mnemonic.vmx
1244+ mnemonics-smx:
1245+ - match: '(?i)\b(getsec)\b'
1246+ scope: keyword.operator.word.mnemonic.smx.getsec
1247+ - match: '(?i)\b(capabilities|enteraccs|exitac|senter|sexit|parameters|smctrl|wakeup)\b'
1248+ scope: support.constant
1249+ mnemonics-intel-isa-sgx:
1250+ - match: '(?i)\be(add|block|create|dbg(rd|wr)|extend|init|ld[bu]|pa|remove|track|wb)\b'
1251+ scope: keyword.operator.word.mnemonic.sgx1.supervisor
1252+ - match: '(?i)\be(enter|exit|getkey|report|resume)\b'
1253+ scope: keyword.operator.word.mnemonic.sgx1.user
1254+ - match: '(?i)\be(aug|mod(pr|t))\b'
1255+ scope: keyword.operator.word.mnemonic.sgx2.supervisor
1256+ - match: '(?i)\be(accept(copy)?|modpe)\b'
1257+ scope: keyword.operator.word.mnemonic.sgx2.user
1258+ mnemonics-intel-isa-mpx:
1259+ - match: '(?i)\b(bnd(mk|c[lnu]|mov|ldx|stx))\b'
1260+ scope: keyword.operator.word.mnemonic.mpx
1261+ mnemonics-intel-isa-sha:
1262+ - match: '(?i)\b(sha(1rnds4|256rnds2|1nexte|(1|256)msg[12]))\b'
1263+ scope: keyword.operator.word.mnemonic.sha
1264+ mnemonics-supplemental-amd:
1265+ - match: '(?i)\b(bl([cs](fill|ic?|msk)|cs)|t1mskc|tzmsk)\b'
1266+ scope: keyword.operator.word.mnemonic.supplemental.amd.general-purpose
1267+ - match: '(?i)\b(clgi|int3|invlpga|iretw|skinit|stgi|vm(load|mcall|run|save)|monitorx|mwaitx)\b'
1268+ scope: keyword.operator.word.mnemonic.supplemental.amd.system
1269+ - match: '(?i)\b([ls]lwpcb|lwp(ins|val))\b'
1270+ scope: keyword.operator.word.mnemonic.supplemental.amd.profiling
1271+ - match: '(?i)\b(movnts[ds])\b'
1272+ scope: keyword.operator.word.mnemonic.supplemental.amd.memory-management
1273+ - match: '(?i)\b(prefetch|clzero)\b'
1274+ scope: keyword.operator.word.mnemonic.supplemental.amd.cache-management
1275+ - match: '(?i)\b((extr|insert)q)\b'
1276+ scope: keyword.operator.word.mnemonic.supplemental.amd.sse4.a
1277+ - match: '(?i)\b(vfn?m((add|sub)[ps][ds])|vfm((addsub|subadd)p[ds]))\b'
1278+ scope: keyword.operator.word.mnemonic.supplemental.amd.fma4
1279+ - match: '(?i)\b(vp(cmov|(comu?|rot|sh[al])[bdqw]|mac(s?s(d(d|q[hl])|w[dw]))|madcss?wd|perm))\b'
1280+ scope: keyword.operator.word.mnemonic.supplemental.amd.xop.simd
1281+ - match: '(?i)\b(vph(addu?(b[dqw]|w[dq]|dq)|sub(bw|dq|wd)))\b'
1282+ scope: keyword.operator.word.mnemonic.supplemental.amd.xop.simd-horizontal
1283+ - match: '(?i)\b(vfrcz[ps][ds]|vpermil2p[ds])\b'
1284+ scope: keyword.operator.word.mnemonic.supplemental.amd.xop.other
1285+ - match: '(?i)\b(femms)\b'
1286+ scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow
1287+ - match: '(?i)\b(p(avgusb|(f2i|i2f)[dw]|mulhrw|swapd)|pf((p?n)?acc|add|max|min|mul|rcp(it[12])?|rsqit1|rsqrt|subr?))\b'
1288+ scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow.simd
1289+ - match: '(?i)\b(pfcmp(eq|ge|gt))\b'
1290+ scope: keyword.operator.word.mnemonic.supplemental.amd.3dnow.comparison
1291+ mnemonics-supplemental-cyrix:
1292+ - match: '(?i)\b((sv|rs)dc|(wr|rd)shr|paddsiw)\b'
1293+ scope: keyword.operator.word.mnemonic.supplemental.cyrix
1294+ mnemonics-supplemental-via:
1295+ - match: '(?i)\b(montmul)\b'
1296+ scope: keyword.operator.word.mnemonic.supplemental.via
1297+ - match: '(?i)\b(x(store(rng)?|crypt(ecb|cbc|ctr|cfb|ofb)|sha(1|256)))\b'
1298+ scope: keyword.operator.word.mnemonic.supplemental.via.padlock
1299+ mnemonics-undocumented:
1300+ - match: '(?i)\b(ret[nf]|icebp|int1|int03|smi|ud1)\b'
1301+ scope: keyword.operator.word.mnemonic.undocumented
1302+ mnemonics-future-intel:
1303+ - include: mnemonics-future-intel-avx512
1304+ - include: mnemonics-future-intel-opmask
1305+ - include: mnemonics-future-intel-cet
1306+ - include: mnemonics-future-intel-other
1307+ mnemonics-future-intel-avx512:
1308+ - match: '(?i)\b(vblendm(pd|ps)|vpblendm[bdqw])\b'
1309+ scope: keyword.operator.word.mnemonic.avx512.blend
1310+ - match: '(?i)\b(vbroadcast[fi](32x[248]|64x[24])|v(extract|insert)[fi](32x[48]|64x[24])|vshuf[fi](32x4|64x2)|vpbroadcastm(b2q|w2d))\b'
1311+ scope: keyword.operator.word.mnemonic.avx512.bits-mov
1312+ - match: '(?i)\b(v(compress|expand)p[ds]|vp(compress|expand|conflict)[dq])\b'
1313+ scope: keyword.operator.word.mnemonic.avx512.compress
1314+ - match: '(?i)\b(vcvt(t?p[sd]2(udq|u?qq)|(udq|u?qq)2p[ds]|t?s[ds]2usi|usi2s[ds]))\b'
1315+ scope: keyword.operator.word.mnemonic.avx512.conversion
1316+ - match: '(?i)\b(v(fixupimm|fpclass|get(exp|mant)|range|(rcp|rsqrt)(14|28)|reduce|rndscale|scalef)([ps][ds]))\b'
1317+ scope: keyword.operator.word.mnemonic.avx512.math
1318+ - match: '(?i)\b(v(exp2p[ds]|(scatter|(gather|scatter)pf[01])[dq]p[ds]))\b'
1319+ scope: keyword.operator.word.mnemonic.avx512.math
1320+ - match: '(?i)\b(vmovdq(a(32|64)|u(8|16|32|64)))\b'
1321+ scope: keyword.operator.word.mnemonic.avx512.simd-integer
1322+ - match: '(?i)\b(vp(andn?|x?or)[dq])\b'
1323+ scope: keyword.operator.word.mnemonic.avx512.logical
1324+ - match: '(?i)\b(vpcmpu?[dqw])\b'
1325+ scope: keyword.operator.word.mnemonic.avx512.packed-comparison
1326+ - match: '(?i)\b(vp(absq|(lzcnt|ternlog)[dq]|madd52[lh]uq|(max|min)[su]q|mullq))\b'
1327+ scope: keyword.operator.word.mnemonic.avx512.packed-math
1328+ - match: '(?i)\b(vpmov(m2[bdqw]|[bdqw]2m|(u?s)?([qd][bw]|qd|wb)))\b'
1329+ scope: keyword.operator.word.mnemonic.avx512.packed-mov
1330+ - match: '(?i)\b(vp(ro[rl]v?[dq]|scatter[dq][dq]))\b'
1331+ scope: keyword.operator.word.mnemonic.avx512.packed-shift
1332+ - match: '(?i)\b(vptestn?m[bdqw])\b'
1333+ scope: keyword.operator.word.mnemonic.avx512.packed-test
1334+ - match: '(?i)\b(vperm([bdw]|[it]2([bdwq]|p[ds])))\b'
1335+ scope: keyword.operator.word.mnemonic.avx512.permutations
1336+ - match: '(?i)\b(valign[dq]|vdbpsadbw|vpmultishiftqb|vpsrav[dqw])\b'
1337+ scope: keyword.operator.word.mnemonic.avx512.other
1338+ mnemonics-future-intel-opmask:
1339+ - match: '(?i)\b(k(add|andn?|(xn?)?or|mov|not|(or)?test|shift[lr])[bdqw]|kunpck(bw|wd|dq))\b'
1340+ scope: keyword.operator.word.mnemonic.opmask
1341+ mnemonics-future-intel-cet:
1342+ - match: '(?i)\b((inc|save|rstor)ssp|wru?ss|(set|clr)ssbsy|endbranch|endbr(32|64))\b'
1343+ scope: keyword.operator.word.mnemonic.cet
1344+ mnemonics-future-intel-other:
1345+ - match: '(?i)\b(clflushopt|clwb|pcommit)\b'
1346+ scope: keyword.operator.word.mnemonic.other
1347+ mnemonics-pseudo-ops:
1348+ - match: '(?i)\b(cmp(n?(eq|lt|le)|(un)?ord)[ps][ds])\b'
1349+ scope: keyword.pseudo-mnemonic.sse2.compare
1350+ - match: '(?i)\b(v?pclmul([hl]q[hl]q|[hl]qh)dq)\b'
1351+ scope: keyword.pseudo-mnemonic.avx.promoted.aes
1352+ - match: '(?i)\b(vcmp(eq(_(os|uq|us))?|neq(_(oq|os|us))?|[gl][et](_oq)?|n[gl][et](_uq)?|(un)?ord(_s)?|false(_os)?|true(_us)?)[ps][ds])\b'
1353+ scope: keyword.pseudo-mnemonic.avx.promoted.comparison
1354+ - match: '(?i)\b(vpcom(n?eq|[gl][et]|false|true)(b|uw))\b'
1355+ scope: keyword.pseudo-mnemonic.supplemental.amd.xop.simd
1356+ mnemonics-invalid:
1357+ - include: mnemonics-invalid-amd-sse5
1358+ mnemonics-invalid-amd-sse5:
1359+ - match: '(?i)\b(com[ps][ds]|pcomu?[bdqw])\b'
1360+ scope: invalid.keyword.operator.word.mnemonic.sse5.comparison
1361+ - match: '(?i)\b(cvtp(h2ps|s2ph)|frcz[ps][ds])\b'
1362+ scope: invalid.keyword.operator.word.mnemonic.sse5.conversion
1363+ - match: '(?i)\b(fn?m((add|sub)[ps][ds])|ph(addu?(b[dqw]|w[dq]|dq)|sub(bw|dq|wd))|pma(css?(d(d|q[hl])|w[dw])|dcss?wd))\b'
1364+ scope: invalid.keyword.operator.word.mnemonic.sse5.packed-arithmetic
1365+ - match: '(?i)\b(pcmov|permp[ds]|pperm|prot[bdqw]|psh[al][bdqw])\b'
1366+ scope: invalid.keyword.operator.word.mnemonic.sse5.simd-integer
1367+...