Mercurial > hg > RemoteEditor > vim7
comparison runtime/syntax/nasm.vim @ 0:76efa0be13f1
Initial revision
author | atsuki |
---|---|
date | Sat, 10 Nov 2007 15:07:22 +0900 |
parents | |
children | c16898406ff2 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:76efa0be13f1 |
---|---|
1 " Vim syntax file | |
2 " Language: NASM - The Netwide Assembler (v0.98) | |
3 " Maintainer: Manuel M.H. Stol <mmh.stol@gmx.net> | |
4 " Last Change: 2003 May 11 | |
5 " Vim URL: http://www.vim.org/lang.html | |
6 " NASM Home: http://www.cryogen.com/Nasm/ | |
7 | |
8 | |
9 | |
10 " Setup Syntax: | |
11 " Clear old syntax settings | |
12 if version < 600 | |
13 syn clear | |
14 elseif exists("b:current_syntax") | |
15 finish | |
16 endif | |
17 " Assembler syntax is case insensetive | |
18 syn case ignore | |
19 | |
20 | |
21 | |
22 " Vim search and movement commands on identifers | |
23 if version < 600 | |
24 " Comments at start of a line inside which to skip search for indentifiers | |
25 set comments=:; | |
26 " Identifier Keyword characters (defines \k) | |
27 set iskeyword=@,48-57,#,$,.,?,@-@,_,~ | |
28 else | |
29 " Comments at start of a line inside which to skip search for indentifiers | |
30 setlocal comments=:; | |
31 " Identifier Keyword characters (defines \k) | |
32 setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~ | |
33 endif | |
34 | |
35 | |
36 | |
37 " Comments: | |
38 syn region nasmComment start=";" keepend end="$" contains=@nasmGrpInComments | |
39 syn region nasmSpecialComment start=";\*\*\*" keepend end="$" | |
40 syn keyword nasmInCommentTodo contained TODO FIXME XXX[XXXXX] | |
41 syn cluster nasmGrpInComments contains=nasmInCommentTodo | |
42 syn cluster nasmGrpComments contains=@nasmGrpInComments,nasmComment,nasmSpecialComment | |
43 | |
44 | |
45 | |
46 " Label Identifiers: | |
47 " in NASM: 'Everything is a Label' | |
48 " Definition Label = label defined by %[i]define or %[i]assign | |
49 " Identifier Label = label defined as first non-keyword on a line or %[i]macro | |
50 syn match nasmLabelError "$\=\(\d\+\K\|[#\.@]\|\$\$\k\)\k*\>" | |
51 syn match nasmLabel "\<\(\h\|[?@]\)\k*\>" | |
52 syn match nasmLabel "[\$\~]\(\h\|[?@]\)\k*\>"lc=1 | |
53 " Labels starting with one or two '.' are special | |
54 syn match nasmLocalLabel "\<\.\(\w\|[#$?@~]\)\k*\>" | |
55 syn match nasmLocalLabel "\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1 | |
56 if !exists("nasm_no_warn") | |
57 syn match nasmLabelWarn "\<\~\=\$\=[_\.][_\.\~]*\>" | |
58 endif | |
59 if exists("nasm_loose_syntax") | |
60 syn match nasmSpecialLabel "\<\.\.@\k\+\>" | |
61 syn match nasmSpecialLabel "\<\$\.\.@\k\+\>"ms=s+1 | |
62 if !exists("nasm_no_warn") | |
63 syn match nasmLabelWarn "\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>" | |
64 endif | |
65 " disallow use of nasm internal label format | |
66 syn match nasmLabelError "\<\$\=\.\.@\d\+\.\k*\>" | |
67 else | |
68 syn match nasmSpecialLabel "\<\.\.@\(\h\|[?@]\)\k*\>" | |
69 syn match nasmSpecialLabel "\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1 | |
70 endif | |
71 " Labels can be dereferenced with '$' to destinguish them from reserved words | |
72 syn match nasmLabelError "\<\$\K\k*\s*:" | |
73 syn match nasmLabelError "^\s*\$\K\k*\>" | |
74 syn match nasmLabelError "\<\~\s*\(\k*\s*:\|\$\=\.\k*\)" | |
75 | |
76 | |
77 | |
78 " Constants: | |
79 syn match nasmStringError +["']+ | |
80 syn match nasmString +\("[^"]\{-}"\|'[^']\{-}'\)+ | |
81 syn match nasmBinNumber "\<[0-1]\+b\>" | |
82 syn match nasmBinNumber "\<\~[0-1]\+b\>"lc=1 | |
83 syn match nasmOctNumber "\<\o\+q\>" | |
84 syn match nasmOctNumber "\<\~\o\+q\>"lc=1 | |
85 syn match nasmDecNumber "\<\d\+\>" | |
86 syn match nasmDecNumber "\<\~\d\+\>"lc=1 | |
87 syn match nasmHexNumber "\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>" | |
88 syn match nasmHexNumber "\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1 | |
89 syn match nasmFltNumber "\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>" | |
90 syn keyword nasmFltNumber Inf Infinity Indefinite NaN SNaN QNaN | |
91 syn match nasmNumberError "\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>" | |
92 | |
93 | |
94 | |
95 " Netwide Assembler Storage Directives: | |
96 " Storage types | |
97 syn keyword nasmTypeError DF EXTRN FWORD RESF TBYTE | |
98 syn keyword nasmType FAR NEAR SHORT | |
99 syn keyword nasmType BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD | |
100 syn keyword nasmType CDECL FASTCALL NONE PASCAL STDCALL | |
101 syn keyword nasmStorage DB DW DD DQ DDQ DT | |
102 syn keyword nasmStorage RESB RESW RESD RESQ RESDQ REST | |
103 syn keyword nasmStorage EXTERN GLOBAL COMMON | |
104 " Structured storage types | |
105 syn match nasmTypeError "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>" | |
106 syn match nasmStructureLabel contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>" | |
107 " structures cannot be nested (yet) -> use: 'keepend' and 're=' | |
108 syn cluster nasmGrpCntnStruc contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs | |
109 syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc | |
110 syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnStruc | |
111 syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure | |
112 " union types are not part of nasm (yet) | |
113 "syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc | |
114 "syn region nasmStructureDef transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure | |
115 syn match nasmInStructure contained "^\s*AT\>"hs=e-1 | |
116 syn cluster nasmGrpInStrucs contains=nasmStructure,nasmInStructure,nasmStructureLabel | |
117 | |
118 | |
119 | |
120 " PreProcessor Instructions: | |
121 " NAsm PreProcs start with %, but % is not a character | |
122 syn match nasmPreProcError "%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\=" | |
123 if exists("nasm_loose_syntax") | |
124 syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError | |
125 else | |
126 syn cluster nasmGrpNxtCtx contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError | |
127 endif | |
128 | |
129 " Multi-line macro | |
130 syn cluster nasmGrpCntnMacro contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef | |
131 syn 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 | |
132 if exists("nasm_loose_syntax") | |
133 syn match nasmInMacLabel contained "%\(%\k\+\>\|{%\k\+}\)" | |
134 syn match nasmInMacLabel contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)" | |
135 syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError | |
136 if !exists("nasm_no_warn") | |
137 syn match nasmInMacLblWarn contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)" | |
138 syn match nasmInMacLblWarn contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)" | |
139 hi link nasmInMacCatLabel nasmInMacLblWarn | |
140 else | |
141 hi link nasmInMacCatLabel nasmInMacLabel | |
142 endif | |
143 else | |
144 syn match nasmInMacLabel contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)" | |
145 syn match nasmInMacLabel contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)" | |
146 hi link nasmInMacCatLabel nasmLabelError | |
147 endif | |
148 syn match nasmInMacCatLabel contained "\d\K\k*"lc=1 | |
149 syn match nasmInMacLabel contained "\d}\k\+"lc=2 | |
150 if !exists("nasm_no_warn") | |
151 syn match nasmInMacLblWarn contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)" | |
152 endif | |
153 syn match nasmInMacPreProc contained "^\s*%pop\>"hs=e-3 | |
154 syn match nasmInMacPreProc contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx | |
155 " structures cannot be nested (yet) -> use: 'keepend' and 're=' | |
156 syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro | |
157 syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4 end="^\s*ENDSTRUC\>"re=e-8 contains=@nasmGrpCntnMacro | |
158 syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure | |
159 " union types are not part of nasm (yet) | |
160 "syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro | |
161 "syn region nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure | |
162 syn 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 | |
163 syn match nasmInMacPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx | |
164 syn match nasmInMacPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx | |
165 syn match nasmInMacPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx | |
166 syn match nasmInMacParamNum contained "\<\d\+\.list\>"me=e-5 | |
167 syn match nasmInMacParamNum contained "\<\d\+\.nolist\>"me=e-7 | |
168 syn match nasmInMacDirective contained "\.\(no\)\=list\>" | |
169 syn match nasmInMacMacro contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel | |
170 syn match nasmInMacMacro contained "^\s*%rotate\>"hs=e-6 | |
171 syn match nasmInMacParam contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)" | |
172 " nasm conditional macro operands/arguments | |
173 " Todo: check feasebility; add too nasmGrpInMacros, etc. | |
174 "syn match nasmInMacCond contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>" | |
175 syn cluster nasmGrpInMacros contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef | |
176 | |
177 " Context pre-procs that are better used inside a macro | |
178 if exists("nasm_ctx_outside_macro") | |
179 syn region nasmPreConditDef transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon | |
180 syn match nasmCtxPreProc "^\s*%pop\>"hs=e-3 | |
181 if exists("nasm_loose_syntax") | |
182 syn match nasmCtxLocLabel "%$\+\(\w\|[#\.?@~]\)\k*\>" | |
183 else | |
184 syn match nasmCtxLocLabel "%$\+\(\h\|[?@]\)\k*\>" | |
185 endif | |
186 syn match nasmCtxPreProc "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx | |
187 syn match nasmCtxPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx | |
188 syn match nasmCtxPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx | |
189 syn match nasmCtxPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx | |
190 if exists("nasm_no_warn") | |
191 hi link nasmCtxPreCondit nasmPreCondit | |
192 hi link nasmCtxPreProc nasmPreProc | |
193 hi link nasmCtxLocLabel nasmLocalLabel | |
194 else | |
195 hi link nasmCtxPreCondit nasmPreProcWarn | |
196 hi link nasmCtxPreProc nasmPreProcWarn | |
197 hi link nasmCtxLocLabel nasmLabelWarn | |
198 endif | |
199 endif | |
200 | |
201 " Conditional assembly | |
202 syn cluster nasmGrpCntnPreCon contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs | |
203 syn 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 | |
204 syn match nasmInPreCondit contained "^\s*%el\(if\|se\)\>"hs=e-4 | |
205 syn match nasmInPreCondit contained "^\s*%elifid\>"hs=e-6 | |
206 syn match nasmInPreCondit contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7 | |
207 syn match nasmInPreCondit contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8 | |
208 syn match nasmInPreCondit contained "^\s*%elifnidni\>"hs=e-9 | |
209 syn cluster nasmGrpInPreCondits contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit | |
210 syn cluster nasmGrpPreCondits contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel | |
211 | |
212 " Other pre-processor statements | |
213 syn match nasmPreProc "^\s*%rep\>"hs=e-3 | |
214 syn match nasmPreProc "^\s*%line\>"hs=e-4 | |
215 syn match nasmPreProc "^\s*%\(clear\|error\)\>"hs=e-5 | |
216 syn match nasmPreProc "^\s*%endrep\>"hs=e-6 | |
217 syn match nasmPreProc "^\s*%exitrep\>"hs=e-7 | |
218 syn match nasmDefine "^\s*%undef\>"hs=e-5 | |
219 syn match nasmDefine "^\s*%\(assign\|define\)\>"hs=e-6 | |
220 syn match nasmDefine "^\s*%i\(assign\|define\)\>"hs=e-7 | |
221 syn match nasmInclude "^\s*%include\>"hs=e-7 | |
222 | |
223 " Multiple pre-processor instructions on single line detection (obsolete) | |
224 "syn match nasmPreProcError +^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+ | |
225 syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError | |
226 | |
227 | |
228 | |
229 " Register Identifiers: | |
230 " Register operands: | |
231 syn match nasmGen08Register "\<[A-D][HL]\>" | |
232 syn match nasmGen16Register "\<\([A-D]X\|[DS]I\|[BS]P\)\>" | |
233 syn match nasmGen32Register "\<E\([A-D]X\|[DS]I\|[BS]P\)\>" | |
234 syn match nasmSegRegister "\<[C-GS]S\>" | |
235 syn match nasmSpcRegister "\<E\=IP\>" | |
236 syn match nasmFpuRegister "\<ST\o\>" | |
237 syn match nasmMmxRegister "\<MM\o\>" | |
238 syn match nasmSseRegister "\<XMM\o\>" | |
239 syn match nasmCtrlRegister "\<CR\o\>" | |
240 syn match nasmDebugRegister "\<DR\o\>" | |
241 syn match nasmTestRegister "\<TR\o\>" | |
242 syn match nasmRegisterError "\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>" | |
243 syn match nasmRegisterError "\<X\=MM[8-9]\>" | |
244 syn match nasmRegisterError "\<ST\((\d)\|[8-9]\>\)" | |
245 syn match nasmRegisterError "\<E\([A-D][HL]\|[C-GS]S\)\>" | |
246 " Memory reference operand (address): | |
247 syn match nasmMemRefError "[\[\]]" | |
248 syn cluster nasmGrpCntnMemRef contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError | |
249 syn match nasmInMacMemRef contained "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam | |
250 syn match nasmMemReference "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel | |
251 | |
252 | |
253 | |
254 " Netwide Assembler Directives: | |
255 " Compilation constants | |
256 syn keyword nasmConstant __BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__ | |
257 syn keyword nasmConstant __NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__ | |
258 syn keyword nasmConstant __TIME__ | |
259 " Instruction modifiers | |
260 syn match nasmInstructnError "\<TO\>" | |
261 syn match nasmInstrModifier "\(^\|:\)\s*[C-GS]S\>"ms=e-1 | |
262 syn keyword nasmInstrModifier A16 A32 O16 O32 | |
263 syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1 | |
264 " the 'to' keyword is not allowed for fpu-pop instructions (yet) | |
265 "syn match nasmInstrModifier "\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1 | |
266 " NAsm directives | |
267 syn keyword nasmRepeat TIMES | |
268 syn keyword nasmDirective ALIGN[B] INCBIN EQU NOSPLIT SPLIT | |
269 syn keyword nasmDirective ABSOLUTE BITS SECTION SEGMENT | |
270 syn keyword nasmDirective ENDSECTION ENDSEGMENT | |
271 syn keyword nasmDirective __SECT__ | |
272 " Macro created standard directives: (requires %include) | |
273 syn case match | |
274 syn keyword nasmStdDirective ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES | |
275 syn keyword nasmStdDirective ENDIF ELSE ELIF ELSIF IF | |
276 "syn keyword nasmStdDirective BREAK CASE DEFAULT ENDSWITCH SWITCH | |
277 "syn keyword nasmStdDirective CASE OF ENDCASE | |
278 syn keyword nasmStdDirective DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT | |
279 syn case ignore | |
280 " Format specific directives: (all formats) | |
281 " (excluded: extension directives to section, global, common and extern) | |
282 syn keyword nasmFmtDirective ORG | |
283 syn keyword nasmFmtDirective EXPORT IMPORT GROUP UPPERCASE SEG WRT | |
284 syn keyword nasmFmtDirective LIBRARY | |
285 syn case match | |
286 syn keyword nasmFmtDirective _GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_ | |
287 syn keyword nasmFmtDirective ..start ..got ..gotoff ..gotpc ..plt ..sym | |
288 syn case ignore | |
289 | |
290 | |
291 | |
292 " Standard Instructions: | |
293 syn match nasmInstructnError "\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>" | |
294 syn keyword nasmInstructnError CMPS MOVS LCS LODS STOS XLAT | |
295 syn match nasmStdInstruction "\<MOV\>" | |
296 syn match nasmInstructnError "\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1 | |
297 syn match nasmStdInstruction "\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>" | |
298 syn match nasmStdInstruction "\<POP\>" | |
299 syn keyword nasmStdInstruction AAA AAD AAM AAS ADC ADD AND | |
300 syn keyword nasmStdInstruction BOUND BSF BSR BSWAP BT[C] BTR BTS | |
301 syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW | |
302 syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E] | |
303 syn keyword nasmStdInstruction DAA DAS DEC DIV ENTER | |
304 syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW | |
305 syn keyword nasmStdInstruction JCXZ JECXZ JMP | |
306 syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD | |
307 syn keyword nasmStdInstruction LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS | |
308 syn keyword nasmStdInstruction MOVSB MOVSD MOVSW MOVSX MOVZX MUL NEG NOP NOT | |
309 syn keyword nasmStdInstruction OR POPA[D] POPAW POPF[D] POPFW | |
310 syn keyword nasmStdInstruction PUSH[AD] PUSHAW PUSHF[D] PUSHFW | |
311 syn keyword nasmStdInstruction RCL RCR RETF RET[N] ROL ROR | |
312 syn keyword nasmStdInstruction SAHF SAL SAR SBB SCASB SCASD SCASW | |
313 syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW SUB | |
314 syn keyword nasmStdInstruction TEST XADD XCHG XLATB XOR | |
315 | |
316 | |
317 " System Instructions: (usually privileged) | |
318 " Verification of pointer parameters | |
319 syn keyword nasmSysInstruction ARPL LAR LSL VERR VERW | |
320 " Addressing descriptor tables | |
321 syn keyword nasmSysInstruction LLDT SLDT LGDT SGDT | |
322 " Multitasking | |
323 syn keyword nasmSysInstruction LTR STR | |
324 " Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.) | |
325 syn keyword nasmSysInstruction CLTS LOCK WAIT | |
326 " Input and Output | |
327 syn keyword nasmInstructnError INS OUTS | |
328 syn keyword nasmSysInstruction IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD | |
329 " Interrupt control | |
330 syn keyword nasmSysInstruction CLI STI LIDT SIDT | |
331 " System control | |
332 syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<CR\o\>"me=s+3 | |
333 syn keyword nasmSysInstruction HLT INVD LMSW | |
334 syn keyword nasmSseInstruction PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA | |
335 syn keyword nasmSseInstruction RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD | |
336 " TLB (Translation Lookahead Buffer) testing | |
337 syn match nasmSysInstruction "\<MOV\s[^;]\{-}\<TR\o\>"me=s+3 | |
338 syn keyword nasmSysInstruction INVLPG | |
339 | |
340 " Debugging Instructions: (privileged) | |
341 syn match nasmDbgInstruction "\<MOV\s[^;]\{-}\<DR\o\>"me=s+3 | |
342 syn keyword nasmDbgInstruction INT1 INT3 RDMSR RDTSC RDPMC WRMSR | |
343 | |
344 | |
345 " Floating Point Instructions: (requires FPU) | |
346 syn match nasmFpuInstruction "\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>" | |
347 syn keyword nasmFpuInstruction F2XM1 FABS FADD[P] FBLD FBSTP | |
348 syn keyword nasmFpuInstruction FCHS FCLEX FCOM[IP] FCOMP[P] FCOS | |
349 syn keyword nasmFpuInstruction FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE | |
350 syn keyword nasmFpuInstruction FIADD FICOM[P] FIDIV[R] FILD | |
351 syn keyword nasmFpuInstruction FIMUL FINCSTP FINIT FIST[P] FISUB[R] | |
352 syn keyword nasmFpuInstruction FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2 | |
353 syn keyword nasmFpuInstruction FLDLN2 FLDPI FLDZ FMUL[P] | |
354 syn keyword nasmFpuInstruction FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE | |
355 syn keyword nasmFpuInstruction FNSTCW FNSTENV FNSTSW FNSTSW | |
356 syn keyword nasmFpuInstruction FPATAN FPREM[1] FPTAN FRNDINT FRSTOR | |
357 syn keyword nasmFpuInstruction FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT | |
358 syn keyword nasmFpuInstruction FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P] | |
359 syn keyword nasmFpuInstruction FTST FUCOM[IP] FUCOMP[P] | |
360 syn keyword nasmFpuInstruction FXAM FXCH FXTRACT FYL2X FYL2XP1 | |
361 | |
362 | |
363 " Multi Media Xtension Packed Instructions: (requires MMX unit) | |
364 " Standard MMX instructions: (requires MMX1 unit) | |
365 syn match nasmInstructnError "\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>" | |
366 syn match nasmInstructnError "\<PCMP\a\{0,2}[BDWQ]\=\>" | |
367 syn keyword nasmMmxInstruction EMMS MOVD MOVQ | |
368 syn keyword nasmMmxInstruction PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW | |
369 syn keyword nasmMmxInstruction PADDSB PADDSW PADDUSB PADDUSW PAND[N] | |
370 syn keyword nasmMmxInstruction PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW | |
371 syn keyword nasmMmxInstruction PMACHRIW PMADDWD PMULHW PMULLW POR | |
372 syn keyword nasmMmxInstruction PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW | |
373 syn keyword nasmMmxInstruction PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW | |
374 syn keyword nasmMmxInstruction PUNPCKHBW PUNPCKHDQ PUNPCKHWD | |
375 syn keyword nasmMmxInstruction PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR | |
376 " Extended MMX instructions: (requires MMX2/SSE unit) | |
377 syn keyword nasmMmxInstruction MASKMOVQ MOVNTQ | |
378 syn keyword nasmMmxInstruction PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB | |
379 syn keyword nasmMmxInstruction PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW | |
380 | |
381 | |
382 " Streaming SIMD Extension Packed Instructions: (requires SSE unit) | |
383 syn match nasmInstructnError "\<CMP\a\{1,5}[PS]S\>" | |
384 syn match nasmSseInstruction "\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>" | |
385 syn keyword nasmSseInstruction ADDPS ADDSS ANDNPS ANDPS | |
386 syn keyword nasmSseInstruction COMISS CVTPI2PS CVTPS2PI | |
387 syn keyword nasmSseInstruction CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI | |
388 syn keyword nasmSseInstruction DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR | |
389 syn keyword nasmSseInstruction MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS | |
390 syn keyword nasmSseInstruction MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS | |
391 syn keyword nasmSseInstruction MULPS MULSS | |
392 syn keyword nasmSseInstruction ORPS RCPPS RCPSS RSQRTPS RSQRTSS | |
393 syn keyword nasmSseInstruction SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS | |
394 syn keyword nasmSseInstruction UCOMISS UNPCKHPS UNPCKLPS XORPS | |
395 | |
396 | |
397 " Three Dimensional Now Packed Instructions: (requires 3DNow! unit) | |
398 syn keyword nasmNowInstruction FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE | |
399 syn keyword nasmNowInstruction PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1 | |
400 syn keyword nasmNowInstruction PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD | |
401 syn keyword nasmNowInstruction PMULHRWA PREFETCH[W] | |
402 | |
403 | |
404 " Vendor Specific Instructions: | |
405 " Cyrix instructions (requires Cyrix processor) | |
406 syn keyword nasmCrxInstruction PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW | |
407 syn keyword nasmCrxInstruction PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW | |
408 syn keyword nasmCrxInstruction RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS | |
409 syn keyword nasmCrxInstruction WRSHR | |
410 " AMD instructions (requires AMD processor) | |
411 syn keyword nasmAmdInstruction SYSCALL SYSRET | |
412 | |
413 | |
414 " Undocumented Instructions: | |
415 syn match nasmUndInstruction "\<POP\s[^;]*\<CS\>"me=s+3 | |
416 syn keyword nasmUndInstruction CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL | |
417 syn keyword nasmUndInstruction LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS | |
418 | |
419 | |
420 | |
421 " Synchronize Syntax: | |
422 syn sync clear | |
423 syn sync minlines=50 "for multiple region nesting | |
424 syn sync match nasmSync grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1 | |
425 syn sync match nasmSync grouphere NONE "^\s*%endmacro\>" | |
426 | |
427 | |
428 " Define the default highlighting. | |
429 " For version 5.7 and earlier: only when not done already | |
430 " For version 5.8 and later : only when an item doesn't have highlighting yet | |
431 if version >= 508 || !exists("did_nasm_syntax_inits") | |
432 if version < 508 | |
433 let did_nasm_syntax_inits = 1 | |
434 command -nargs=+ HiLink hi link <args> | |
435 else | |
436 command -nargs=+ HiLink hi def link <args> | |
437 endif | |
438 | |
439 " Sub Links: | |
440 HiLink nasmInMacDirective nasmDirective | |
441 HiLink nasmInMacLabel nasmLocalLabel | |
442 HiLink nasmInMacLblWarn nasmLabelWarn | |
443 HiLink nasmInMacMacro nasmMacro | |
444 HiLink nasmInMacParam nasmMacro | |
445 HiLink nasmInMacParamNum nasmDecNumber | |
446 HiLink nasmInMacPreCondit nasmPreCondit | |
447 HiLink nasmInMacPreProc nasmPreProc | |
448 HiLink nasmInPreCondit nasmPreCondit | |
449 HiLink nasmInStructure nasmStructure | |
450 HiLink nasmStructureLabel nasmStructure | |
451 | |
452 " Comment Group: | |
453 HiLink nasmComment Comment | |
454 HiLink nasmSpecialComment SpecialComment | |
455 HiLink nasmInCommentTodo Todo | |
456 | |
457 " Constant Group: | |
458 HiLink nasmString String | |
459 HiLink nasmStringError Error | |
460 HiLink nasmBinNumber Number | |
461 HiLink nasmOctNumber Number | |
462 HiLink nasmDecNumber Number | |
463 HiLink nasmHexNumber Number | |
464 HiLink nasmFltNumber Float | |
465 HiLink nasmNumberError Error | |
466 | |
467 " Identifier Group: | |
468 HiLink nasmLabel Identifier | |
469 HiLink nasmLocalLabel Identifier | |
470 HiLink nasmSpecialLabel Special | |
471 HiLink nasmLabelError Error | |
472 HiLink nasmLabelWarn Todo | |
473 | |
474 " PreProc Group: | |
475 HiLink nasmPreProc PreProc | |
476 HiLink nasmDefine Define | |
477 HiLink nasmInclude Include | |
478 HiLink nasmMacro Macro | |
479 HiLink nasmPreCondit PreCondit | |
480 HiLink nasmPreProcError Error | |
481 HiLink nasmPreProcWarn Todo | |
482 | |
483 " Type Group: | |
484 HiLink nasmType Type | |
485 HiLink nasmStorage StorageClass | |
486 HiLink nasmStructure Structure | |
487 HiLink nasmTypeError Error | |
488 | |
489 " Directive Group: | |
490 HiLink nasmConstant Constant | |
491 HiLink nasmInstrModifier Operator | |
492 HiLink nasmRepeat Repeat | |
493 HiLink nasmDirective Keyword | |
494 HiLink nasmStdDirective Operator | |
495 HiLink nasmFmtDirective Keyword | |
496 | |
497 " Register Group: | |
498 HiLink nasmCtrlRegister Special | |
499 HiLink nasmDebugRegister Debug | |
500 HiLink nasmTestRegister Special | |
501 HiLink nasmRegisterError Error | |
502 HiLink nasmMemRefError Error | |
503 | |
504 " Instruction Group: | |
505 HiLink nasmStdInstruction Statement | |
506 HiLink nasmSysInstruction Statement | |
507 HiLink nasmDbgInstruction Debug | |
508 HiLink nasmFpuInstruction Statement | |
509 HiLink nasmMmxInstruction Statement | |
510 HiLink nasmSseInstruction Statement | |
511 HiLink nasmNowInstruction Statement | |
512 HiLink nasmAmdInstruction Special | |
513 HiLink nasmCrxInstruction Special | |
514 HiLink nasmUndInstruction Todo | |
515 HiLink nasmInstructnError Error | |
516 | |
517 delcommand HiLink | |
518 endif | |
519 | |
520 let b:current_syntax = "nasm" | |
521 | |
522 " vim:ts=8 sw=4 |