xref: /vim-8.2.3635/runtime/syntax/nasm.vim (revision 130cbfc3)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	NASM - The Netwide Assembler (v0.98)
3690afe1fSBram Moolenaar" Maintainer:	Andrii Sokolov	<[email protected]>
44a74803eSBram Moolenaar" Original Author:	Manuel M.H. Stol	<[email protected]>
54a74803eSBram Moolenaar" Former Maintainer:	Manuel M.H. Stol	<[email protected]>
6*130cbfc3SBram Moolenaar" Contributors: Leonard König <[email protected]> (C string highlighting), Peter Stanhope <[email protected]> (Add missing 64-bit mode registers)
7690afe1fSBram Moolenaar" Last Change:	2017 Jan 23
84a74803eSBram Moolenaar" NASM Home:	http://www.nasm.us/
9071d4279SBram Moolenaar
10071d4279SBram Moolenaar
11071d4279SBram Moolenaar
12071d4279SBram Moolenaar" Setup Syntax:
1389bcfda6SBram Moolenaar" quit when a syntax file was already loaded
1489bcfda6SBram Moolenaarif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar"  Assembler syntax is case insensetive
18071d4279SBram Moolenaarsyn case ignore
19071d4279SBram Moolenaar
20071d4279SBram Moolenaar
21071d4279SBram Moolenaar
22071d4279SBram Moolenaar" Vim search and movement commands on identifers
23071d4279SBram Moolenaar"  Comments at start of a line inside which to skip search for indentifiers
24071d4279SBram Moolenaarsetlocal comments=:;
25071d4279SBram Moolenaar"  Identifier Keyword characters (defines \k)
26071d4279SBram Moolenaarsetlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~
27071d4279SBram Moolenaar
28071d4279SBram Moolenaar
29071d4279SBram Moolenaar" Comments:
30071d4279SBram Moolenaarsyn region  nasmComment		start=";" keepend end="$" contains=@nasmGrpInComments
31071d4279SBram Moolenaarsyn region  nasmSpecialComment	start=";\*\*\*" keepend end="$"
32071d4279SBram Moolenaarsyn keyword nasmInCommentTodo	contained TODO FIXME XXX[XXXXX]
33071d4279SBram Moolenaarsyn cluster nasmGrpInComments	contains=nasmInCommentTodo
34071d4279SBram Moolenaarsyn cluster nasmGrpComments	contains=@nasmGrpInComments,nasmComment,nasmSpecialComment
35071d4279SBram Moolenaar
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar
38071d4279SBram Moolenaar" Label Identifiers:
39071d4279SBram Moolenaar"  in NASM: 'Everything is a Label'
40071d4279SBram Moolenaar"  Definition Label = label defined by %[i]define or %[i]assign
41071d4279SBram Moolenaar"  Identifier Label = label defined as first non-keyword on a line or %[i]macro
425dc6252dSBram Moolenaarsyn match   nasmLabelError	"$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
43071d4279SBram Moolenaarsyn match   nasmLabel		"\<\(\h\|[?@]\)\k*\>"
44071d4279SBram Moolenaarsyn match   nasmLabel		"[\$\~]\(\h\|[?@]\)\k*\>"lc=1
45071d4279SBram Moolenaar"  Labels starting with one or two '.' are special
46071d4279SBram Moolenaarsyn match   nasmLocalLabel	"\<\.\(\w\|[#$?@~]\)\k*\>"
47071d4279SBram Moolenaarsyn match   nasmLocalLabel	"\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
48071d4279SBram Moolenaarif !exists("nasm_no_warn")
495dc6252dSBram Moolenaar  syn match  nasmLabelWarn	"\<\~\=\$\=[_.][_.\~]*\>"
50071d4279SBram Moolenaarendif
51071d4279SBram Moolenaarif exists("nasm_loose_syntax")
52071d4279SBram Moolenaar  syn match   nasmSpecialLabel	"\<\.\.@\k\+\>"
53071d4279SBram Moolenaar  syn match   nasmSpecialLabel	"\<\$\.\.@\k\+\>"ms=s+1
54071d4279SBram Moolenaar  if !exists("nasm_no_warn")
55071d4279SBram Moolenaar    syn match   nasmLabelWarn	"\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>"
56071d4279SBram Moolenaar  endif
57071d4279SBram Moolenaar  " disallow use of nasm internal label format
58071d4279SBram Moolenaar  syn match   nasmLabelError	"\<\$\=\.\.@\d\+\.\k*\>"
59071d4279SBram Moolenaarelse
60071d4279SBram Moolenaar  syn match   nasmSpecialLabel	"\<\.\.@\(\h\|[?@]\)\k*\>"
61071d4279SBram Moolenaar  syn match   nasmSpecialLabel	"\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1
62071d4279SBram Moolenaarendif
63071d4279SBram Moolenaar"  Labels can be dereferenced with '$' to destinguish them from reserved words
64071d4279SBram Moolenaarsyn match   nasmLabelError	"\<\$\K\k*\s*:"
65071d4279SBram Moolenaarsyn match   nasmLabelError	"^\s*\$\K\k*\>"
66071d4279SBram Moolenaarsyn match   nasmLabelError	"\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
67071d4279SBram Moolenaar
68071d4279SBram Moolenaar
69071d4279SBram Moolenaar
70071d4279SBram Moolenaar" Constants:
71690afe1fSBram Moolenaarsyn match   nasmStringError	+["'`]+
72690afe1fSBram Moolenaar" NASM is case sensitive here: eg. u-prefix allows for 4-digit, U-prefix for
73690afe1fSBram Moolenaar" 8-digit Unicode characters
74690afe1fSBram Moolenaarsyn case match
75690afe1fSBram Moolenaar" one-char escape-sequences
76690afe1fSBram Moolenaarsyn match   nasmCStringEscape  display contained "\\[’"‘\\\?abtnvfre]"
77690afe1fSBram Moolenaar" hex and octal numbers
78690afe1fSBram Moolenaarsyn match   nasmCStringEscape  display contained "\\\(x\x\{2}\|\o\{1,3}\)"
79690afe1fSBram Moolenaar" Unicode characters
80690afe1fSBram Moolenaarsyn match   nasmCStringEscape	display contained "\\\(u\x\{4}\|U\x\{8}\)"
81690afe1fSBram Moolenaar" ISO C99 format strings (copied from cFormat in runtime/syntax/c.vim)
82690afe1fSBram Moolenaarsyn match   nasmCStringFormat	display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
83690afe1fSBram Moolenaarsyn match   nasmCStringFormat	display "%%" contained
84071d4279SBram Moolenaarsyn match   nasmString		+\("[^"]\{-}"\|'[^']\{-}'\)+
85690afe1fSBram Moolenaar" Highlight C escape- and format-sequences within ``-strings
86690afe1fSBram Moolenaarsyn match   nasmCString	+\(`[^`]\{-}`\)+ contains=nasmCStringEscape,nasmCStringFormat extend
87690afe1fSBram Moolenaarsyn case ignore
88071d4279SBram Moolenaarsyn match   nasmBinNumber	"\<[0-1]\+b\>"
89071d4279SBram Moolenaarsyn match   nasmBinNumber	"\<\~[0-1]\+b\>"lc=1
90071d4279SBram Moolenaarsyn match   nasmOctNumber	"\<\o\+q\>"
91071d4279SBram Moolenaarsyn match   nasmOctNumber	"\<\~\o\+q\>"lc=1
92071d4279SBram Moolenaarsyn match   nasmDecNumber	"\<\d\+\>"
93071d4279SBram Moolenaarsyn match   nasmDecNumber	"\<\~\d\+\>"lc=1
94071d4279SBram Moolenaarsyn match   nasmHexNumber	"\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"
95071d4279SBram Moolenaarsyn match   nasmHexNumber	"\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1
96071d4279SBram Moolenaarsyn match   nasmFltNumber	"\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
97071d4279SBram Moolenaarsyn keyword nasmFltNumber	Inf Infinity Indefinite NaN SNaN QNaN
98071d4279SBram Moolenaarsyn match   nasmNumberError	"\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
99071d4279SBram Moolenaar
100071d4279SBram Moolenaar
101071d4279SBram Moolenaar" Netwide Assembler Storage Directives:
102071d4279SBram Moolenaar"  Storage types
103071d4279SBram Moolenaarsyn keyword nasmTypeError	DF EXTRN FWORD RESF TBYTE
104071d4279SBram Moolenaarsyn keyword nasmType		FAR NEAR SHORT
105071d4279SBram Moolenaarsyn keyword nasmType		BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD
106071d4279SBram Moolenaarsyn keyword nasmType		CDECL FASTCALL NONE PASCAL STDCALL
107071d4279SBram Moolenaarsyn keyword nasmStorage		DB DW DD DQ DDQ DT
108071d4279SBram Moolenaarsyn keyword nasmStorage		RESB RESW RESD RESQ RESDQ REST
109071d4279SBram Moolenaarsyn keyword nasmStorage		EXTERN GLOBAL COMMON
110071d4279SBram Moolenaar"  Structured storage types
111071d4279SBram Moolenaarsyn match   nasmTypeError	"\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
112071d4279SBram Moolenaarsyn match   nasmStructureLabel	contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
113071d4279SBram Moolenaar"   structures cannot be nested (yet) -> use: 'keepend' and 're='
114071d4279SBram Moolenaarsyn cluster nasmGrpCntnStruc	contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs
115071d4279SBram Moolenaarsyn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc
116071d4279SBram Moolenaarsyn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnStruc
117071d4279SBram Moolenaarsyn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
118071d4279SBram Moolenaar"   union types are not part of nasm (yet)
119071d4279SBram Moolenaar"syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc
120071d4279SBram Moolenaar"syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
121071d4279SBram Moolenaarsyn match   nasmInStructure	contained "^\s*AT\>"hs=e-1
122071d4279SBram Moolenaarsyn cluster nasmGrpInStrucs	contains=nasmStructure,nasmInStructure,nasmStructureLabel
123071d4279SBram Moolenaar
124071d4279SBram Moolenaar
125071d4279SBram Moolenaar
126071d4279SBram Moolenaar" PreProcessor Instructions:
127071d4279SBram Moolenaar" NAsm PreProcs start with %, but % is not a character
128071d4279SBram Moolenaarsyn match   nasmPreProcError	"%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="
129071d4279SBram Moolenaarif exists("nasm_loose_syntax")
130071d4279SBram Moolenaar  syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
131071d4279SBram Moolenaarelse
132071d4279SBram Moolenaar  syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError
133071d4279SBram Moolenaarendif
134071d4279SBram Moolenaar
135071d4279SBram Moolenaar"  Multi-line macro
136071d4279SBram Moolenaarsyn cluster nasmGrpCntnMacro	contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef
137071d4279SBram Moolenaarsyn region  nasmMacroDef	matchgroup=nasmMacro keepend start="^\s*%macro\>"hs=e-5 start="^\s*%imacro\>"hs=e-6 end="^\s*%endmacro\>"re=e-9 contains=@nasmGrpCntnMacro,nasmInMacStrucDef
138071d4279SBram Moolenaarif exists("nasm_loose_syntax")
139071d4279SBram Moolenaar  syn match  nasmInMacLabel	contained "%\(%\k\+\>\|{%\k\+}\)"
140071d4279SBram Moolenaar  syn match  nasmInMacLabel	contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)"
141071d4279SBram Moolenaar  syn match  nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
142071d4279SBram Moolenaar  if !exists("nasm_no_warn")
143071d4279SBram Moolenaar    syn match nasmInMacLblWarn	contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)"
144071d4279SBram Moolenaar    syn match nasmInMacLblWarn	contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)"
145071d4279SBram Moolenaar    hi link nasmInMacCatLabel	nasmInMacLblWarn
146071d4279SBram Moolenaar  else
147071d4279SBram Moolenaar    hi link nasmInMacCatLabel	nasmInMacLabel
148071d4279SBram Moolenaar  endif
149071d4279SBram Moolenaarelse
150071d4279SBram Moolenaar  syn match  nasmInMacLabel	contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)"
151071d4279SBram Moolenaar  syn match  nasmInMacLabel	contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)"
152071d4279SBram Moolenaar  hi link nasmInMacCatLabel	nasmLabelError
153071d4279SBram Moolenaarendif
154071d4279SBram Moolenaarsyn match   nasmInMacCatLabel	contained "\d\K\k*"lc=1
155071d4279SBram Moolenaarsyn match   nasmInMacLabel	contained "\d}\k\+"lc=2
156071d4279SBram Moolenaarif !exists("nasm_no_warn")
157071d4279SBram Moolenaar  syn match  nasmInMacLblWarn	contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"
158071d4279SBram Moolenaarendif
159071d4279SBram Moolenaarsyn match   nasmInMacPreProc	contained "^\s*%pop\>"hs=e-3
160071d4279SBram Moolenaarsyn match   nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
161071d4279SBram Moolenaar"   structures cannot be nested (yet) -> use: 'keepend' and 're='
162071d4279SBram Moolenaarsyn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro
163071d4279SBram Moolenaarsyn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnMacro
164071d4279SBram Moolenaarsyn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
165071d4279SBram Moolenaar"   union types are not part of nasm (yet)
166071d4279SBram Moolenaar"syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
167071d4279SBram Moolenaar"syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
168071d4279SBram Moolenaarsyn region  nasmInMacPreConDef	contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
1694a74803eSBram Moolenaar" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
170071d4279SBram Moolenaarsyn match   nasmInMacPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
171071d4279SBram Moolenaarsyn match   nasmInMacPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
172071d4279SBram Moolenaarsyn match   nasmInMacPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
173071d4279SBram Moolenaarsyn match   nasmInMacParamNum	contained "\<\d\+\.list\>"me=e-5
174071d4279SBram Moolenaarsyn match   nasmInMacParamNum	contained "\<\d\+\.nolist\>"me=e-7
175071d4279SBram Moolenaarsyn match   nasmInMacDirective	contained "\.\(no\)\=list\>"
176071d4279SBram Moolenaarsyn match   nasmInMacMacro	contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel
177071d4279SBram Moolenaarsyn match   nasmInMacMacro	contained "^\s*%rotate\>"hs=e-6
178071d4279SBram Moolenaarsyn match   nasmInMacParam	contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"
179071d4279SBram Moolenaar"   nasm conditional macro operands/arguments
180071d4279SBram Moolenaar"   Todo: check feasebility; add too nasmGrpInMacros, etc.
181071d4279SBram Moolenaar"syn match   nasmInMacCond	contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
182071d4279SBram Moolenaarsyn cluster nasmGrpInMacros	contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef
183071d4279SBram Moolenaar
184071d4279SBram Moolenaar"   Context pre-procs that are better used inside a macro
185071d4279SBram Moolenaarif exists("nasm_ctx_outside_macro")
186071d4279SBram Moolenaar  syn region nasmPreConditDef	transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
187071d4279SBram Moolenaar  syn match  nasmCtxPreProc	"^\s*%pop\>"hs=e-3
188071d4279SBram Moolenaar  if exists("nasm_loose_syntax")
1895dc6252dSBram Moolenaar    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#.?@~]\)\k*\>"
190071d4279SBram Moolenaar  else
191071d4279SBram Moolenaar    syn match   nasmCtxLocLabel	"%$\+\(\h\|[?@]\)\k*\>"
192071d4279SBram Moolenaar  endif
193071d4279SBram Moolenaar  syn match nasmCtxPreProc	"^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
194071d4279SBram Moolenaar  syn match nasmCtxPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
195071d4279SBram Moolenaar  syn match nasmCtxPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
196071d4279SBram Moolenaar  syn match nasmCtxPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
197071d4279SBram Moolenaar  if exists("nasm_no_warn")
198071d4279SBram Moolenaar    hi link nasmCtxPreCondit	nasmPreCondit
199071d4279SBram Moolenaar    hi link nasmCtxPreProc	nasmPreProc
200071d4279SBram Moolenaar    hi link nasmCtxLocLabel	nasmLocalLabel
201071d4279SBram Moolenaar  else
202071d4279SBram Moolenaar    hi link nasmCtxPreCondit	nasmPreProcWarn
203071d4279SBram Moolenaar    hi link nasmCtxPreProc	nasmPreProcWarn
204071d4279SBram Moolenaar    hi link nasmCtxLocLabel	nasmLabelWarn
205071d4279SBram Moolenaar  endif
206071d4279SBram Moolenaarendif
207071d4279SBram Moolenaar
208071d4279SBram Moolenaar"  Conditional assembly
209071d4279SBram Moolenaarsyn cluster nasmGrpCntnPreCon	contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs
210071d4279SBram Moolenaarsyn region  nasmPreConditDef	transparent matchgroup=nasmPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnPreCon
211071d4279SBram Moolenaarsyn match   nasmInPreCondit	contained "^\s*%el\(if\|se\)\>"hs=e-4
212071d4279SBram Moolenaarsyn match   nasmInPreCondit	contained "^\s*%elifid\>"hs=e-6
213071d4279SBram Moolenaarsyn match   nasmInPreCondit	contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7
214071d4279SBram Moolenaarsyn match   nasmInPreCondit	contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8
215071d4279SBram Moolenaarsyn match   nasmInPreCondit	contained "^\s*%elifnidni\>"hs=e-9
216071d4279SBram Moolenaarsyn cluster nasmGrpInPreCondits	contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit
217071d4279SBram Moolenaarsyn cluster nasmGrpPreCondits	contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
218071d4279SBram Moolenaar
219071d4279SBram Moolenaar"  Other pre-processor statements
2204a74803eSBram Moolenaarsyn match   nasmPreProc		"^\s*%\(rep\|use\)\>"hs=e-3
221071d4279SBram Moolenaarsyn match   nasmPreProc		"^\s*%line\>"hs=e-4
2224a74803eSBram Moolenaarsyn match   nasmPreProc		"^\s*%\(clear\|error\|fatal\)\>"hs=e-5
2234a74803eSBram Moolenaarsyn match   nasmPreProc		"^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
2244a74803eSBram Moolenaarsyn match   nasmPreProc		"^\s*%\(exitrep\|warning\)\>"hs=e-7
225071d4279SBram Moolenaarsyn match   nasmDefine		"^\s*%undef\>"hs=e-5
226071d4279SBram Moolenaarsyn match   nasmDefine		"^\s*%\(assign\|define\)\>"hs=e-6
227071d4279SBram Moolenaarsyn match   nasmDefine		"^\s*%i\(assign\|define\)\>"hs=e-7
2284a74803eSBram Moolenaarsyn match   nasmDefine		"^\s*%unmacro\>"hs=e-7
229071d4279SBram Moolenaarsyn match   nasmInclude		"^\s*%include\>"hs=e-7
2304a74803eSBram Moolenaar" Todo: Treat the line tail after %fatal, %error, %warning as text
231071d4279SBram Moolenaar
232071d4279SBram Moolenaar"  Multiple pre-processor instructions on single line detection (obsolete)
233071d4279SBram Moolenaar"syn match   nasmPreProcError	+^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
234071d4279SBram Moolenaarsyn cluster nasmGrpPreProcs	contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError
235071d4279SBram Moolenaar
236071d4279SBram Moolenaar
237071d4279SBram Moolenaar
238071d4279SBram Moolenaar" Register Identifiers:
239071d4279SBram Moolenaar"  Register operands:
240071d4279SBram Moolenaarsyn match   nasmGen08Register	"\<[A-D][HL]\>"
241071d4279SBram Moolenaarsyn match   nasmGen16Register	"\<\([A-D]X\|[DS]I\|[BS]P\)\>"
242071d4279SBram Moolenaarsyn match   nasmGen32Register	"\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
243*130cbfc3SBram Moolenaarsyn match   nasmGen64Register	"\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WDB]\|1[0-5][WDB]\)\>"
244*130cbfc3SBram Moolenaarsyn match   nasmExtRegister     "\<\([SB]PL\|[SD]IL\)\>"
245071d4279SBram Moolenaarsyn match   nasmSegRegister	"\<[C-GS]S\>"
246071d4279SBram Moolenaarsyn match   nasmSpcRegister	"\<E\=IP\>"
247071d4279SBram Moolenaarsyn match   nasmFpuRegister	"\<ST\o\>"
248071d4279SBram Moolenaarsyn match   nasmMmxRegister	"\<MM\o\>"
249071d4279SBram Moolenaarsyn match   nasmSseRegister	"\<XMM\o\>"
250071d4279SBram Moolenaarsyn match   nasmCtrlRegister	"\<CR\o\>"
251071d4279SBram Moolenaarsyn match   nasmDebugRegister	"\<DR\o\>"
252071d4279SBram Moolenaarsyn match   nasmTestRegister	"\<TR\o\>"
253071d4279SBram Moolenaarsyn match   nasmRegisterError	"\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"
254071d4279SBram Moolenaarsyn match   nasmRegisterError	"\<X\=MM[8-9]\>"
255071d4279SBram Moolenaarsyn match   nasmRegisterError	"\<ST\((\d)\|[8-9]\>\)"
256071d4279SBram Moolenaarsyn match   nasmRegisterError	"\<E\([A-D][HL]\|[C-GS]S\)\>"
257071d4279SBram Moolenaar"  Memory reference operand (address):
2585dc6252dSBram Moolenaarsyn match   nasmMemRefError	"[[\]]"
259071d4279SBram Moolenaarsyn cluster nasmGrpCntnMemRef	contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
2605dc6252dSBram Moolenaarsyn match   nasmInMacMemRef	contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
2615dc6252dSBram Moolenaarsyn match   nasmMemReference	"\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
262071d4279SBram Moolenaar
263071d4279SBram Moolenaar
264071d4279SBram Moolenaar
265071d4279SBram Moolenaar" Netwide Assembler Directives:
266071d4279SBram Moolenaar"  Compilation constants
267071d4279SBram Moolenaarsyn keyword nasmConstant	__BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__
268071d4279SBram Moolenaarsyn keyword nasmConstant	__NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__
269071d4279SBram Moolenaarsyn keyword nasmConstant	__TIME__
270071d4279SBram Moolenaar"  Instruction modifiers
271071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<TO\>"
272071d4279SBram Moolenaarsyn match   nasmInstrModifier	"\(^\|:\)\s*[C-GS]S\>"ms=e-1
273071d4279SBram Moolenaarsyn keyword nasmInstrModifier	A16 A32 O16 O32
274071d4279SBram Moolenaarsyn match   nasmInstrModifier	"\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1
275071d4279SBram Moolenaar"   the 'to' keyword is not allowed for fpu-pop instructions (yet)
276071d4279SBram Moolenaar"syn match   nasmInstrModifier	"\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1
277071d4279SBram Moolenaar"  NAsm directives
278071d4279SBram Moolenaarsyn keyword nasmRepeat		TIMES
279071d4279SBram Moolenaarsyn keyword nasmDirective	ALIGN[B] INCBIN EQU NOSPLIT SPLIT
280071d4279SBram Moolenaarsyn keyword nasmDirective	ABSOLUTE BITS SECTION SEGMENT
281071d4279SBram Moolenaarsyn keyword nasmDirective	ENDSECTION ENDSEGMENT
282071d4279SBram Moolenaarsyn keyword nasmDirective	__SECT__
283071d4279SBram Moolenaar"  Macro created standard directives: (requires %include)
284071d4279SBram Moolenaarsyn case match
285071d4279SBram Moolenaarsyn keyword nasmStdDirective	ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES
286071d4279SBram Moolenaarsyn keyword nasmStdDirective	ENDIF ELSE ELIF ELSIF IF
287071d4279SBram Moolenaar"syn keyword nasmStdDirective	BREAK CASE DEFAULT ENDSWITCH SWITCH
288071d4279SBram Moolenaar"syn keyword nasmStdDirective	CASE OF ENDCASE
289071d4279SBram Moolenaarsyn keyword nasmStdDirective	DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT
290071d4279SBram Moolenaarsyn case ignore
291071d4279SBram Moolenaar"  Format specific directives: (all formats)
292071d4279SBram Moolenaar"  (excluded: extension directives to section, global, common and extern)
293071d4279SBram Moolenaarsyn keyword nasmFmtDirective	ORG
294071d4279SBram Moolenaarsyn keyword nasmFmtDirective	EXPORT IMPORT GROUP UPPERCASE SEG WRT
295071d4279SBram Moolenaarsyn keyword nasmFmtDirective	LIBRARY
296071d4279SBram Moolenaarsyn case match
297071d4279SBram Moolenaarsyn keyword nasmFmtDirective	_GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_
298071d4279SBram Moolenaarsyn keyword nasmFmtDirective	..start ..got ..gotoff ..gotpc ..plt ..sym
299071d4279SBram Moolenaarsyn case ignore
300071d4279SBram Moolenaar
301071d4279SBram Moolenaar
302071d4279SBram Moolenaar
303071d4279SBram Moolenaar" Standard Instructions:
304071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>"
305071d4279SBram Moolenaarsyn keyword nasmInstructnError	CMPS MOVS LCS LODS STOS XLAT
306071d4279SBram Moolenaarsyn match   nasmStdInstruction	"\<MOV\>"
307071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1
308071d4279SBram Moolenaarsyn match   nasmStdInstruction	"\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
309071d4279SBram Moolenaarsyn match   nasmStdInstruction	"\<POP\>"
310071d4279SBram Moolenaarsyn keyword nasmStdInstruction	AAA AAD AAM AAS ADC ADD AND
311071d4279SBram Moolenaarsyn keyword nasmStdInstruction	BOUND BSF BSR BSWAP BT[C] BTR BTS
3124a74803eSBram Moolenaarsyn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
3134a74803eSBram Moolenaarsyn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
314071d4279SBram Moolenaarsyn keyword nasmStdInstruction	DAA DAS DEC DIV ENTER
3154a74803eSBram Moolenaarsyn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
316071d4279SBram Moolenaarsyn keyword nasmStdInstruction	JCXZ JECXZ JMP
3174a74803eSBram Moolenaarsyn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
318071d4279SBram Moolenaarsyn keyword nasmStdInstruction	LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
3194a74803eSBram Moolenaarsyn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
3204a74803eSBram Moolenaarsyn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW POPFQ
3214a74803eSBram Moolenaarsyn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
322071d4279SBram Moolenaarsyn keyword nasmStdInstruction	RCL RCR RETF RET[N] ROL ROR
323071d4279SBram Moolenaarsyn keyword nasmStdInstruction	SAHF SAL SAR SBB SCASB SCASD SCASW
3244a74803eSBram Moolenaarsyn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
325071d4279SBram Moolenaarsyn keyword nasmStdInstruction	TEST XADD XCHG XLATB XOR
3264a74803eSBram Moolenaarsyn keyword nasmStdInstruction	LFENCE MFENCE SFENCE
327071d4279SBram Moolenaar
328071d4279SBram Moolenaar
329071d4279SBram Moolenaar" System Instructions: (usually privileged)
330071d4279SBram Moolenaar"  Verification of pointer parameters
331071d4279SBram Moolenaarsyn keyword nasmSysInstruction	ARPL LAR LSL VERR VERW
332071d4279SBram Moolenaar"  Addressing descriptor tables
333071d4279SBram Moolenaarsyn keyword nasmSysInstruction	LLDT SLDT LGDT SGDT
334071d4279SBram Moolenaar"  Multitasking
335071d4279SBram Moolenaarsyn keyword nasmSysInstruction	LTR STR
336071d4279SBram Moolenaar"  Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.)
337071d4279SBram Moolenaarsyn keyword nasmSysInstruction	CLTS LOCK WAIT
338071d4279SBram Moolenaar"  Input and Output
339071d4279SBram Moolenaarsyn keyword nasmInstructnError	INS OUTS
340071d4279SBram Moolenaarsyn keyword nasmSysInstruction	IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD
341071d4279SBram Moolenaar"  Interrupt control
342071d4279SBram Moolenaarsyn keyword nasmSysInstruction	CLI STI LIDT SIDT
343071d4279SBram Moolenaar"  System control
344071d4279SBram Moolenaarsyn match   nasmSysInstruction	"\<MOV\s[^;]\{-}\<CR\o\>"me=s+3
345071d4279SBram Moolenaarsyn keyword nasmSysInstruction	HLT INVD LMSW
346071d4279SBram Moolenaarsyn keyword nasmSseInstruction	PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
347071d4279SBram Moolenaarsyn keyword nasmSseInstruction	RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD
348071d4279SBram Moolenaar"  TLB (Translation Lookahead Buffer) testing
349071d4279SBram Moolenaarsyn match   nasmSysInstruction	"\<MOV\s[^;]\{-}\<TR\o\>"me=s+3
350071d4279SBram Moolenaarsyn keyword nasmSysInstruction	INVLPG
351071d4279SBram Moolenaar
352071d4279SBram Moolenaar" Debugging Instructions: (privileged)
353071d4279SBram Moolenaarsyn match   nasmDbgInstruction	"\<MOV\s[^;]\{-}\<DR\o\>"me=s+3
354071d4279SBram Moolenaarsyn keyword nasmDbgInstruction	INT1 INT3 RDMSR RDTSC RDPMC WRMSR
355071d4279SBram Moolenaar
356071d4279SBram Moolenaar
357071d4279SBram Moolenaar" Floating Point Instructions: (requires FPU)
358071d4279SBram Moolenaarsyn match   nasmFpuInstruction	"\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>"
359071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	F2XM1 FABS FADD[P] FBLD FBSTP
360071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FCHS FCLEX FCOM[IP] FCOMP[P] FCOS
361071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE
362071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FIADD FICOM[P] FIDIV[R] FILD
363071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FIMUL FINCSTP FINIT FIST[P] FISUB[R]
364071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2
365071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FLDLN2 FLDPI FLDZ FMUL[P]
366071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE
367071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FNSTCW FNSTENV FNSTSW FNSTSW
368071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FPATAN FPREM[1] FPTAN FRNDINT FRSTOR
369071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT
370071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P]
371071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FTST FUCOM[IP] FUCOMP[P]
372071d4279SBram Moolenaarsyn keyword nasmFpuInstruction	FXAM FXCH FXTRACT FYL2X FYL2XP1
373071d4279SBram Moolenaar
374071d4279SBram Moolenaar
375071d4279SBram Moolenaar" Multi Media Xtension Packed Instructions: (requires MMX unit)
376071d4279SBram Moolenaar"  Standard MMX instructions: (requires MMX1 unit)
377071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>"
378071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<PCMP\a\{0,2}[BDWQ]\=\>"
379071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	EMMS MOVD MOVQ
380071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW
381071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PADDSB PADDSW PADDUSB PADDUSW PAND[N]
382071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW
383071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PMACHRIW PMADDWD PMULHW PMULLW POR
384071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW
385071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW
386071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PUNPCKHBW PUNPCKHDQ PUNPCKHWD
387071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR
388071d4279SBram Moolenaar"  Extended MMX instructions: (requires MMX2/SSE unit)
389071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	MASKMOVQ MOVNTQ
390071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB
391071d4279SBram Moolenaarsyn keyword nasmMmxInstruction	PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW
392071d4279SBram Moolenaar
393071d4279SBram Moolenaar
394071d4279SBram Moolenaar" Streaming SIMD Extension Packed Instructions: (requires SSE unit)
395071d4279SBram Moolenaarsyn match   nasmInstructnError	"\<CMP\a\{1,5}[PS]S\>"
396071d4279SBram Moolenaarsyn match   nasmSseInstruction	"\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>"
397071d4279SBram Moolenaarsyn keyword nasmSseInstruction	ADDPS ADDSS ANDNPS ANDPS
398071d4279SBram Moolenaarsyn keyword nasmSseInstruction	COMISS CVTPI2PS CVTPS2PI
399071d4279SBram Moolenaarsyn keyword nasmSseInstruction	CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI
400071d4279SBram Moolenaarsyn keyword nasmSseInstruction	DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR
401071d4279SBram Moolenaarsyn keyword nasmSseInstruction	MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS
402071d4279SBram Moolenaarsyn keyword nasmSseInstruction	MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS
403071d4279SBram Moolenaarsyn keyword nasmSseInstruction	MULPS MULSS
404071d4279SBram Moolenaarsyn keyword nasmSseInstruction	ORPS RCPPS RCPSS RSQRTPS RSQRTSS
405071d4279SBram Moolenaarsyn keyword nasmSseInstruction	SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS
406071d4279SBram Moolenaarsyn keyword nasmSseInstruction	UCOMISS UNPCKHPS UNPCKLPS XORPS
407071d4279SBram Moolenaar
408071d4279SBram Moolenaar
409071d4279SBram Moolenaar" Three Dimensional Now Packed Instructions: (requires 3DNow! unit)
410071d4279SBram Moolenaarsyn keyword nasmNowInstruction	FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE
411071d4279SBram Moolenaarsyn keyword nasmNowInstruction	PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1
412071d4279SBram Moolenaarsyn keyword nasmNowInstruction	PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD
413071d4279SBram Moolenaarsyn keyword nasmNowInstruction	PMULHRWA PREFETCH[W]
414071d4279SBram Moolenaar
415071d4279SBram Moolenaar
416071d4279SBram Moolenaar" Vendor Specific Instructions:
417071d4279SBram Moolenaar"  Cyrix instructions (requires Cyrix processor)
418071d4279SBram Moolenaarsyn keyword nasmCrxInstruction	PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW
419071d4279SBram Moolenaarsyn keyword nasmCrxInstruction	PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW
420071d4279SBram Moolenaarsyn keyword nasmCrxInstruction	RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS
421071d4279SBram Moolenaarsyn keyword nasmCrxInstruction	WRSHR
422071d4279SBram Moolenaar"  AMD instructions (requires AMD processor)
423071d4279SBram Moolenaarsyn keyword nasmAmdInstruction	SYSCALL SYSRET
424071d4279SBram Moolenaar
425071d4279SBram Moolenaar
426071d4279SBram Moolenaar" Undocumented Instructions:
427071d4279SBram Moolenaarsyn match   nasmUndInstruction	"\<POP\s[^;]*\<CS\>"me=s+3
428071d4279SBram Moolenaarsyn keyword nasmUndInstruction	CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL
429071d4279SBram Moolenaarsyn keyword nasmUndInstruction	LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS
430071d4279SBram Moolenaar
431071d4279SBram Moolenaar
432071d4279SBram Moolenaar
433071d4279SBram Moolenaar" Synchronize Syntax:
434071d4279SBram Moolenaarsyn sync clear
435071d4279SBram Moolenaarsyn sync minlines=50		"for multiple region nesting
436071d4279SBram Moolenaarsyn sync match  nasmSync	grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1
437071d4279SBram Moolenaarsyn sync match	nasmSync	grouphere NONE	       "^\s*%endmacro\>"
438071d4279SBram Moolenaar
439071d4279SBram Moolenaar
440071d4279SBram Moolenaar" Define the default highlighting.
44189bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
442071d4279SBram Moolenaar
443071d4279SBram Moolenaar" Sub Links:
444f37506f6SBram Moolenaarhi def link nasmInMacDirective	nasmDirective
445f37506f6SBram Moolenaarhi def link nasmInMacLabel		nasmLocalLabel
446f37506f6SBram Moolenaarhi def link nasmInMacLblWarn	nasmLabelWarn
447f37506f6SBram Moolenaarhi def link nasmInMacMacro		nasmMacro
448f37506f6SBram Moolenaarhi def link nasmInMacParam		nasmMacro
449f37506f6SBram Moolenaarhi def link nasmInMacParamNum	nasmDecNumber
450f37506f6SBram Moolenaarhi def link nasmInMacPreCondit	nasmPreCondit
451f37506f6SBram Moolenaarhi def link nasmInMacPreProc	nasmPreProc
452f37506f6SBram Moolenaarhi def link nasmInPreCondit	nasmPreCondit
453f37506f6SBram Moolenaarhi def link nasmInStructure	nasmStructure
454f37506f6SBram Moolenaarhi def link nasmStructureLabel	nasmStructure
455071d4279SBram Moolenaar
456071d4279SBram Moolenaar" Comment Group:
457f37506f6SBram Moolenaarhi def link nasmComment		Comment
458f37506f6SBram Moolenaarhi def link nasmSpecialComment	SpecialComment
459f37506f6SBram Moolenaarhi def link nasmInCommentTodo	Todo
460071d4279SBram Moolenaar
461071d4279SBram Moolenaar" Constant Group:
462f37506f6SBram Moolenaarhi def link nasmString		String
463690afe1fSBram Moolenaarhi def link nasmCString	String
464f37506f6SBram Moolenaarhi def link nasmStringError	Error
465690afe1fSBram Moolenaarhi def link nasmCStringEscape	SpecialChar
466690afe1fSBram Moolenaarhi def link nasmCStringFormat	SpecialChar
467f37506f6SBram Moolenaarhi def link nasmBinNumber		Number
468f37506f6SBram Moolenaarhi def link nasmOctNumber		Number
469f37506f6SBram Moolenaarhi def link nasmDecNumber		Number
470f37506f6SBram Moolenaarhi def link nasmHexNumber		Number
471f37506f6SBram Moolenaarhi def link nasmFltNumber		Float
472f37506f6SBram Moolenaarhi def link nasmNumberError	Error
473071d4279SBram Moolenaar
474071d4279SBram Moolenaar" Identifier Group:
475f37506f6SBram Moolenaarhi def link nasmLabel		Identifier
476f37506f6SBram Moolenaarhi def link nasmLocalLabel		Identifier
477f37506f6SBram Moolenaarhi def link nasmSpecialLabel	Special
478f37506f6SBram Moolenaarhi def link nasmLabelError		Error
479f37506f6SBram Moolenaarhi def link nasmLabelWarn		Todo
480071d4279SBram Moolenaar
481071d4279SBram Moolenaar" PreProc Group:
482f37506f6SBram Moolenaarhi def link nasmPreProc		PreProc
483f37506f6SBram Moolenaarhi def link nasmDefine		Define
484f37506f6SBram Moolenaarhi def link nasmInclude		Include
485f37506f6SBram Moolenaarhi def link nasmMacro		Macro
486f37506f6SBram Moolenaarhi def link nasmPreCondit		PreCondit
487f37506f6SBram Moolenaarhi def link nasmPreProcError	Error
488f37506f6SBram Moolenaarhi def link nasmPreProcWarn	Todo
489071d4279SBram Moolenaar
490071d4279SBram Moolenaar" Type Group:
491f37506f6SBram Moolenaarhi def link nasmType		Type
492f37506f6SBram Moolenaarhi def link nasmStorage		StorageClass
493f37506f6SBram Moolenaarhi def link nasmStructure		Structure
494f37506f6SBram Moolenaarhi def link nasmTypeError		Error
495071d4279SBram Moolenaar
496071d4279SBram Moolenaar" Directive Group:
497f37506f6SBram Moolenaarhi def link nasmConstant		Constant
498f37506f6SBram Moolenaarhi def link nasmInstrModifier	Operator
499f37506f6SBram Moolenaarhi def link nasmRepeat		Repeat
500f37506f6SBram Moolenaarhi def link nasmDirective		Keyword
501f37506f6SBram Moolenaarhi def link nasmStdDirective	Operator
502f37506f6SBram Moolenaarhi def link nasmFmtDirective	Keyword
503071d4279SBram Moolenaar
504071d4279SBram Moolenaar" Register Group:
505f37506f6SBram Moolenaarhi def link nasmCtrlRegister	Special
506f37506f6SBram Moolenaarhi def link nasmDebugRegister	Debug
507f37506f6SBram Moolenaarhi def link nasmTestRegister	Special
508f37506f6SBram Moolenaarhi def link nasmRegisterError	Error
509f37506f6SBram Moolenaarhi def link nasmMemRefError	Error
510071d4279SBram Moolenaar
511071d4279SBram Moolenaar" Instruction Group:
512f37506f6SBram Moolenaarhi def link nasmStdInstruction	Statement
513f37506f6SBram Moolenaarhi def link nasmSysInstruction	Statement
514f37506f6SBram Moolenaarhi def link nasmDbgInstruction	Debug
515f37506f6SBram Moolenaarhi def link nasmFpuInstruction	Statement
516f37506f6SBram Moolenaarhi def link nasmMmxInstruction	Statement
517f37506f6SBram Moolenaarhi def link nasmSseInstruction	Statement
518f37506f6SBram Moolenaarhi def link nasmNowInstruction	Statement
519f37506f6SBram Moolenaarhi def link nasmAmdInstruction	Special
520f37506f6SBram Moolenaarhi def link nasmCrxInstruction	Special
521f37506f6SBram Moolenaarhi def link nasmUndInstruction	Todo
522f37506f6SBram Moolenaarhi def link nasmInstructnError	Error
523071d4279SBram Moolenaar
524071d4279SBram Moolenaar
525071d4279SBram Moolenaarlet b:current_syntax = "nasm"
526071d4279SBram Moolenaar
527071d4279SBram Moolenaar" vim:ts=8 sw=4
528