xref: /vim-8.2.3635/runtime/syntax/masm.vim (revision cf2d8dee)
1" Vim syntax file
2" Language:	Microsoft Macro Assembler (80x86)
3" Orig Author:	Rob Brady <[email protected]>
4" Maintainer:	Wu Yongwei <[email protected]>
5" Last Change:	$Date: 2013/11/13 11:49:24 $
6" $Revision: 1.48 $
7
8" Quit when a syntax file was already loaded
9if exists("b:current_syntax")
10  finish
11endif
12
13let s:cpo_save = &cpo
14set cpo&vim
15
16syn case ignore
17
18
19syn match masmIdentifier	"[@a-z_$?][@a-z0-9_$?]*"
20syn match masmLabel		"^\s*[@a-z_$?][@a-z0-9_$?]*:"he=e-1
21
22syn match masmDecimal		"[-+]\?\d\+[dt]\?"
23syn match masmBinary		"[-+]\?[0-1]\+[by]"  "put this before hex or 0bfh dies!
24syn match masmOctal		"[-+]\?[0-7]\+[oq]"
25syn match masmHexadecimal	"[-+]\?[0-9]\x*h"
26syn match masmFloatRaw		"[-+]\?[0-9]\x*r"
27syn match masmFloat		"[-+]\?\d\+\.\(\d*\(E[-+]\?\d\+\)\?\)\?"
28
29syn match masmComment		";.*" contains=@Spell
30syn region masmComment		start=+COMMENT\s*\z(\S\)+ end=+\z1.*+ contains=@Spell
31syn region masmString		start=+'+ end=+'+ oneline contains=@Spell
32syn region masmString		start=+"+ end=+"+ oneline contains=@Spell
33
34syn region masmTitleArea	start=+\<TITLE\s+lc=5 start=+\<SUBTITLE\s+lc=8 start=+\<SUBTTL\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmTitle
35syn region masmTextArea		start=+\<NAME\s+lc=4 start=+\<INCLUDE\s+lc=7 start=+\<INCLUDELIB\s+lc=10 end=+$+ end=+;+me=e-1 contains=masmText
36syn match masmTitle		"[^\t ;]\([^;]*[^\t ;]\)\?" contained contains=@Spell
37syn match masmText		"[^\t ;]\([^;]*[^\t ;]\)\?" contained
38
39syn region masmOptionOpt	start=+\<OPTION\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption
40syn region masmContextOpt	start=+\<PUSHCONTEXT\s+lc=11 start=+\<POPCONTEXT\s+lc=10 end=+$+ end=+;+me=e-1 contains=masmOption
41syn region masmModelOpt		start=+\.MODEL\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption,masmType
42syn region masmSegmentOpt	start=+\<SEGMENT\s+lc=7 end=+$+ end=+;+me=e-1 contains=masmOption,masmString
43syn region masmProcOpt		start=+\<PROC\s+lc=4 end=+$+ end=+;+me=e-1 contains=masmOption,masmType,masmRegister,masmIdentifier
44syn region masmAssumeOpt	start=+\<ASSUME\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption,masmOperator,masmType,masmRegister,masmIdentifier
45syn region masmExpression	start=+\.IF\s+lc=3 start=+\.WHILE\s+lc=6 start=+\.UNTIL\s+lc=6 start=+\<IF\s+lc=2 start=+\<IF2\s+lc=3 start=+\<ELSEIF\s+lc=6 start=+\<ELSEIF2\s+lc=7 start=+\<REPEAT\s+lc=6 start=+\<WHILE\s+lc=5 end=+$+ end=+;+me=e-1 contains=masmType,masmOperator,masmRegister,masmIdentifier,masmDecimal,masmBinary,masmHexadecimal,masmFloatRaw,masmString
46
47syn keyword masmOption		TINY SMALL COMPACT MEDIUM LARGE HUGE contained
48syn keyword masmOption		NEARSTACK FARSTACK contained
49syn keyword masmOption		PUBLIC PRIVATE STACK COMMON MEMORY AT contained
50syn keyword masmOption		BYTE WORD DWORD PARA PAGE contained
51syn keyword masmOption		USE16 USE32 FLAT contained
52syn keyword masmOption		INFO READ WRITE EXECUTE SHARED contained
53syn keyword masmOption		NOPAGE NOCACHE DISCARD contained
54syn keyword masmOption		READONLY USES FRAME contained
55syn keyword masmOption		CASEMAP DOTNAME NODOTNAME EMULATOR contained
56syn keyword masmOption		NOEMULATOR EPILOGUE EXPR16 EXPR32 contained
57syn keyword masmOption		LANGUAGE LJMP NOLJMP M510 NOM510 contained
58syn keyword masmOption		NOKEYWORD NOSIGNEXTEND OFFSET contained
59syn keyword masmOption		OLDMACROS NOOLDMACROS OLDSTRUCTS contained
60syn keyword masmOption		NOOLDSTRUCTS PROC PROLOGUE READONLY contained
61syn keyword masmOption		NOREADONLY SCOPED NOSCOPED SEGMENT contained
62syn keyword masmOption		SETIF2 contained
63syn keyword masmOption		ABS ALL ASSUMES CPU ERROR EXPORT contained
64syn keyword masmOption		FORCEFRAME LISTING LOADDS NONE contained
65syn keyword masmOption		NONUNIQUE NOTHING OS_DOS RADIX REQ contained
66syn keyword masmType		STDCALL SYSCALL C BASIC FORTRAN PASCAL
67syn keyword masmType		PTR NEAR FAR NEAR16 FAR16 NEAR32 FAR32
68syn keyword masmType		REAL4 REAL8 REAL10 BYTE SBYTE TBYTE
69syn keyword masmType		WORD DWORD QWORD FWORD SWORD SDWORD
70syn keyword masmOperator	AND NOT OR SHL SHR XOR MOD DUP
71syn keyword masmOperator	EQ GE GT LE LT NE
72syn keyword masmOperator	LROFFSET SEG LENGTH LENGTHOF SIZE SIZEOF
73syn keyword masmOperator	CODEPTR DATAPTR FAR NEAR SHORT THIS TYPE
74syn keyword masmOperator	HIGH HIGHWORD LOW LOWWORD OPATTR MASK WIDTH
75syn match   masmOperator	"OFFSET\(\sFLAT:\)\?"
76syn match   masmOperator	".TYPE\>"
77syn match   masmOperator	"CARRY?"
78syn match   masmOperator	"OVERFLOW?"
79syn match   masmOperator	"PARITY?"
80syn match   masmOperator	"SIGN?"
81syn match   masmOperator	"ZERO?"
82syn keyword masmDirective	ALIAS ASSUME CATSTR COMM DB DD DF DOSSEG DQ DT
83syn keyword masmDirective	DW ECHO ELSE ELSEIF ELSEIF1 ELSEIF2 ELSEIFB
84syn keyword masmDirective	ELSEIFDEF ELSEIFDIF ELSEIFDIFI ELSEIFE
85syn keyword masmDirective	ELSEIFIDN ELSEIFIDNI ELSEIFNB ELSEIFNDEF END
86syn keyword masmDirective	ENDIF ENDM ENDP ENDS EQU EVEN EXITM EXTERN
87syn keyword masmDirective	EXTERNDEF EXTRN FOR FORC GOTO GROUP IF IF1 IF2
88syn keyword masmDirective	IFB IFDEF IFDIF IFDIFI IFE IFIDN IFIDNI IFNB
89syn keyword masmDirective	IFNDEF INCLUDE INCLUDELIB INSTR INVOKE IRP
90syn keyword masmDirective	IRPC LABEL LOCAL MACRO NAME OPTION ORG PAGE
91syn keyword masmDirective	POPCONTEXT PROC PROTO PUBLIC PURGE PUSHCONTEXT
92syn keyword masmDirective	RECORD REPEAT REPT SEGMENT SIZESTR STRUC
93syn keyword masmDirective	STRUCT SUBSTR SUBTITLE SUBTTL TEXTEQU TITLE
94syn keyword masmDirective	TYPEDEF UNION WHILE
95syn match   masmDirective	"\.8086\>"
96syn match   masmDirective	"\.8087\>"
97syn match   masmDirective	"\.NO87\>"
98syn match   masmDirective	"\.186\>"
99syn match   masmDirective	"\.286\>"
100syn match   masmDirective	"\.286C\>"
101syn match   masmDirective	"\.286P\>"
102syn match   masmDirective	"\.287\>"
103syn match   masmDirective	"\.386\>"
104syn match   masmDirective	"\.386C\>"
105syn match   masmDirective	"\.386P\>"
106syn match   masmDirective	"\.387\>"
107syn match   masmDirective	"\.486\>"
108syn match   masmDirective	"\.486P\>"
109syn match   masmDirective	"\.586\>"
110syn match   masmDirective	"\.586P\>"
111syn match   masmDirective	"\.686\>"
112syn match   masmDirective	"\.686P\>"
113syn match   masmDirective	"\.K3D\>"
114syn match   masmDirective	"\.MMX\>"
115syn match   masmDirective	"\.XMM\>"
116syn match   masmDirective	"\.ALPHA\>"
117syn match   masmDirective	"\.DOSSEG\>"
118syn match   masmDirective	"\.SEQ\>"
119syn match   masmDirective	"\.CODE\>"
120syn match   masmDirective	"\.CONST\>"
121syn match   masmDirective	"\.DATA\>"
122syn match   masmDirective	"\.DATA?"
123syn match   masmDirective	"\.EXIT\>"
124syn match   masmDirective	"\.FARDATA\>"
125syn match   masmDirective	"\.FARDATA?"
126syn match   masmDirective	"\.MODEL\>"
127syn match   masmDirective	"\.STACK\>"
128syn match   masmDirective	"\.STARTUP\>"
129syn match   masmDirective	"\.IF\>"
130syn match   masmDirective	"\.ELSE\>"
131syn match   masmDirective	"\.ELSEIF\>"
132syn match   masmDirective	"\.ENDIF\>"
133syn match   masmDirective	"\.REPEAT\>"
134syn match   masmDirective	"\.UNTIL\>"
135syn match   masmDirective	"\.UNTILCXZ\>"
136syn match   masmDirective	"\.WHILE\>"
137syn match   masmDirective	"\.ENDW\>"
138syn match   masmDirective	"\.BREAK\>"
139syn match   masmDirective	"\.CONTINUE\>"
140syn match   masmDirective	"\.ERR\>"
141syn match   masmDirective	"\.ERR1\>"
142syn match   masmDirective	"\.ERR2\>"
143syn match   masmDirective	"\.ERRB\>"
144syn match   masmDirective	"\.ERRDEF\>"
145syn match   masmDirective	"\.ERRDIF\>"
146syn match   masmDirective	"\.ERRDIFI\>"
147syn match   masmDirective	"\.ERRE\>"
148syn match   masmDirective	"\.ERRIDN\>"
149syn match   masmDirective	"\.ERRIDNI\>"
150syn match   masmDirective	"\.ERRNB\>"
151syn match   masmDirective	"\.ERRNDEF\>"
152syn match   masmDirective	"\.ERRNZ\>"
153syn match   masmDirective	"\.LALL\>"
154syn match   masmDirective	"\.SALL\>"
155syn match   masmDirective	"\.XALL\>"
156syn match   masmDirective	"\.LFCOND\>"
157syn match   masmDirective	"\.SFCOND\>"
158syn match   masmDirective	"\.TFCOND\>"
159syn match   masmDirective	"\.CREF\>"
160syn match   masmDirective	"\.NOCREF\>"
161syn match   masmDirective	"\.XCREF\>"
162syn match   masmDirective	"\.LIST\>"
163syn match   masmDirective	"\.NOLIST\>"
164syn match   masmDirective	"\.XLIST\>"
165syn match   masmDirective	"\.LISTALL\>"
166syn match   masmDirective	"\.LISTIF\>"
167syn match   masmDirective	"\.NOLISTIF\>"
168syn match   masmDirective	"\.LISTMACRO\>"
169syn match   masmDirective	"\.NOLISTMACRO\>"
170syn match   masmDirective	"\.LISTMACROALL\>"
171syn match   masmDirective	"\.FPO\>"
172syn match   masmDirective	"\.RADIX\>"
173syn match   masmDirective	"\.SAFESEH\>"
174syn match   masmDirective	"%OUT\>"
175syn match   masmDirective	"ALIGN\>"
176syn match   masmOption		"ALIGN([0-9]\+)"
177
178syn keyword masmRegister	AX BX CX DX SI DI BP SP
179syn keyword masmRegister	CS DS SS ES FS GS
180syn keyword masmRegister	AH BH CH DH AL BL CL DL
181syn keyword masmRegister	EAX EBX ECX EDX ESI EDI EBP ESP
182syn keyword masmRegister	CR0 CR2 CR3 CR4
183syn keyword masmRegister	DR0 DR1 DR2 DR3 DR6 DR7
184syn keyword masmRegister	TR3 TR4 TR5 TR6 TR7
185syn match   masmRegister	"ST([0-7])"
186
187" x86-64 registers
188syn keyword masmRegister	RAX RBX RCX RDX RSI RDI RBP RSP
189syn keyword masmRegister	R8 R9 R10 R11 R12 R13 R14 R15
190syn keyword masmRegister	R8D R9D R10D R11D R12D R13D R14D R15D
191syn keyword masmRegister	R8W R9W R10W R11W R12W R13W R14W R15W
192syn keyword masmRegister	R8B R9B R10B R11B R12B R13B R14B R15B
193
194" SSE/AVX registers
195syn match   masmRegister	"\(X\|Y\)MM[0-9]\>"
196syn match   masmRegister	"\(X\|Y\)MM1[0-5]\>"
197
198" Instruction prefixes
199syn keyword masmOpcode		LOCK REP REPE REPNE REPNZ REPZ
200
201" 8086/8088 opcodes
202syn keyword masmOpcode		AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD
203syn keyword masmOpcode		CLI CMC CMP CMPS CMPSB CMPSW CWD DAA DAS DEC
204syn keyword masmOpcode		DIV ESC HLT IDIV IMUL IN INC INT INTO IRET
205syn keyword masmOpcode		JCXZ JMP LAHF LDS LEA LES LODS LODSB LODSW
206syn keyword masmOpcode		LOOP LOOPE LOOPEW LOOPNE LOOPNEW LOOPNZ
207syn keyword masmOpcode		LOOPNZW LOOPW LOOPZ LOOPZW MOV MOVS MOVSB
208syn keyword masmOpcode		MOVSW MUL NEG NOP NOT OR OUT POP POPF PUSH
209syn keyword masmOpcode		PUSHF RCL RCR RET RETF RETN ROL ROR SAHF SAL
210syn keyword masmOpcode		SAR SBB SCAS SCASB SCASW SHL SHR STC STD STI
211syn keyword masmOpcode		STOS STOSB STOSW SUB TEST WAIT XCHG XLAT XLATB
212syn keyword masmOpcode		XOR
213syn match   masmOpcode	      "J\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
214
215" 80186 opcodes
216syn keyword masmOpcode		BOUND ENTER INS INSB INSW LEAVE OUTS OUTSB
217syn keyword masmOpcode		OUTSW POPA PUSHA PUSHW
218
219" 80286 opcodes
220syn keyword masmOpcode		ARPL LAR LSL SGDT SIDT SLDT SMSW STR VERR VERW
221
222" 80286/80386 privileged opcodes
223syn keyword masmOpcode		CLTS LGDT LIDT LLDT LMSW LTR
224
225" 80386 opcodes
226syn keyword masmOpcode		BSF BSR BT BTC BTR BTS CDQ CMPSD CWDE INSD
227syn keyword masmOpcode		IRETD IRETDF IRETF JECXZ LFS LGS LODSD LOOPD
228syn keyword masmOpcode		LOOPED LOOPNED LOOPNZD LOOPZD LSS MOVSD MOVSX
229syn keyword masmOpcode		MOVZX OUTSD POPAD POPFD PUSHAD PUSHD PUSHFD
230syn keyword masmOpcode		SCASD SHLD SHRD STOSD
231syn match   masmOpcode	    "SET\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
232
233" 80486 opcodes
234syn keyword masmOpcode		BSWAP CMPXCHG INVD INVLPG WBINVD XADD
235
236" Floating-point opcodes as of 487
237syn keyword masmOpFloat		F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX
238syn keyword masmOpFloat		FNCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
239syn keyword masmOpFloat		FNDISI FDIV FDIVP FDIVR FDIVRP FENI FNENI
240syn keyword masmOpFloat		FFREE FIADD FICOM FICOMP FIDIV FIDIVR FILD
241syn keyword masmOpFloat		FIMUL FINCSTP FINIT FNINIT FIST FISTP FISUB
242syn keyword masmOpFloat		FISUBR FLD FLDCW FLDENV FLDLG2 FLDLN2 FLDL2E
243syn keyword masmOpFloat		FLDL2T FLDPI FLDZ FLD1 FMUL FMULP FNOP FPATAN
244syn keyword masmOpFloat		FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE FNSAVE
245syn keyword masmOpFloat		FSCALE FSETPM FSIN FSINCOS FSQRT FST FSTCW
246syn keyword masmOpFloat		FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW FSUB
247syn keyword masmOpFloat		FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP
248syn keyword masmOpFloat		FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
249
250" Floating-point opcodes in Pentium and later processors
251syn keyword masmOpFloat		FCMOVE FCMOVNE FCMOVB FCMOVBE FCMOVNB FCMOVNBE
252syn keyword masmOpFloat		FCMOVU FCMOVNU FCOMI FUCOMI FCOMIP FUCOMIP
253syn keyword masmOpFloat		FXSAVE FXRSTOR
254
255" MMX opcodes (Pentium w/ MMX, Pentium II, and later)
256syn keyword masmOpcode		MOVD MOVQ PACKSSWB PACKSSDW PACKUSWB
257syn keyword masmOpcode		PUNPCKHBW PUNPCKHWD PUNPCKHDQ
258syn keyword masmOpcode		PUNPCKLBW PUNPCKLWD PUNPCKLDQ
259syn keyword masmOpcode		PADDB PADDW PADDD PADDSB PADDSW PADDUSB PADDUSW
260syn keyword masmOpcode		PSUBB PSUBW PSUBD PSUBSB PSUBSW PSUBUSB PSUBUSW
261syn keyword masmOpcode		PMULHW PMULLW PMADDWD
262syn keyword masmOpcode		PCMPEQB PCMPEQW PCMPEQD PCMPGTB PCMPGTW PCMPGTD
263syn keyword masmOpcode		PAND PANDN POR PXOR
264syn keyword masmOpcode		PSLLW PSLLD PSLLQ PSRLW PSRLD PSRLQ PSRAW PSRAD
265syn keyword masmOpcode		EMMS
266
267" SSE opcodes (Pentium III and later)
268syn keyword masmOpcode		MOVAPS MOVUPS MOVHPS MOVHLPS MOVLPS MOVLHPS
269syn keyword masmOpcode		MOVMSKPS MOVSS
270syn keyword masmOpcode		ADDPS ADDSS SUBPS SUBSS MULPS MULSS DIVPS DIVSS
271syn keyword masmOpcode		RCPPS RCPSS SQRTPS SQRTSS RSQRTPS RSQRTSS
272syn keyword masmOpcode		MAXPS MAXSS MINPS MINSS
273syn keyword masmOpcode		CMPPS CMPSS COMISS UCOMISS
274syn keyword masmOpcode		ANDPS ANDNPS ORPS XORPS
275syn keyword masmOpcode		SHUFPS UNPCKHPS UNPCKLPS
276syn keyword masmOpcode		CVTPI2PS CVTSI2SS CVTPS2PI CVTTPS2PI
277syn keyword masmOpcode		CVTSS2SI CVTTSS2SI
278syn keyword masmOpcode		LDMXCSR STMXCSR
279syn keyword masmOpcode		PAVGB PAVGW PEXTRW PINSRW PMAXUB PMAXSW
280syn keyword masmOpcode		PMINUB PMINSW PMOVMSKB PMULHUW PSADBW PSHUFW
281syn keyword masmOpcode		MASKMOVQ MOVNTQ MOVNTPS SFENCE
282syn keyword masmOpcode		PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
283
284" SSE2 opcodes (Pentium 4 and later)
285syn keyword masmOpcode		MOVAPD MOVUPD MOVHPD MOVLPD MOVMSKPD MOVSD
286syn keyword masmOpcode		ADDPD ADDSD SUBPD SUBSD MULPD MULSD DIVPD DIVSD
287syn keyword masmOpcode		SQRTPD SQRTSD MAXPD MAXSD MINPD MINSD
288syn keyword masmOpcode		ANDPD ANDNPD ORPD XORPD
289syn keyword masmOpcode		CMPPD CMPSD COMISD UCOMISD
290syn keyword masmOpcode		SHUFPD UNPCKHPD UNPCKLPD
291syn keyword masmOpcode		CVTPD2PI CVTTPD2PI CVTPI2PD CVTPD2DQ
292syn keyword masmOpcode		CVTTPD2DQ CVTDQ2PD CVTPS2PD CVTPD2PS
293syn keyword masmOpcode		CVTSS2SD CVTSD2SS CVTSD2SI CVTTSD2SI CVTSI2SD
294syn keyword masmOpcode		CVTDQ2PS CVTPS2DQ CVTTPS2DQ
295syn keyword masmOpcode		MOVDQA MOVDQU MOVQ2DQ MOVDQ2Q PMULUDQ
296syn keyword masmOpcode		PADDQ PSUBQ PSHUFLW PSHUFHW PSHUFD
297syn keyword masmOpcode		PSLLDQ PSRLDQ PUNPCKHQDQ PUNPCKLQDQ
298syn keyword masmOpcode		CLFLUSH LFENCE MFENCE PAUSE MASKMOVDQU
299syn keyword masmOpcode		MOVNTPD MOVNTDQ MOVNTI
300
301" SSE3 opcodes (Pentium 4 w/ Hyper-Threading and later)
302syn keyword masmOpcode		FISTTP LDDQU ADDSUBPS ADDSUBPD
303syn keyword masmOpcode		HADDPS HSUBPS HADDPD HSUBPD
304syn keyword masmOpcode		MOVSHDUP MOVSLDUP MOVDDUP MONITOR MWAIT
305
306" SSSE3 opcodes (Core and later)
307syn keyword masmOpcode		PSIGNB PSIGNW PSIGND PABSB PABSW PABSD
308syn keyword masmOpcode		PALIGNR PSHUFB PMULHRSW PMADDUBSW
309syn keyword masmOpcode		PHSUBW PHSUBD PHSUBSW PHADDW PHADDD PHADDSW
310
311" SSE 4.1 opcodes (Penryn and later)
312syn keyword masmOpcode		MPSADBW PHMINPOSUW PMULDQ PMULLD DPPS DPPD
313syn keyword masmOpcode		BLENDPS BLENDPD BLENDVPS BLENDVPD
314syn keyword masmOpcode		PBLENDVB PBLENDW
315syn keyword masmOpcode		PMINSB PMAXSB PMINSD PMAXSD
316syn keyword masmOpcode		PMINUW PMAXUW PMINUD PMAXUD
317syn keyword masmOpcode		ROUNDPS ROUNDSS ROUNDPD ROUNDSD
318syn keyword masmOpcode		INSERTPS PINSRB PINSRD PINSRQ
319syn keyword masmOpcode		EXTRACTPS PEXTRB PEXTRD PEXTRQ
320syn keyword masmOpcode		PMOVSXBW PMOVZXBW PMOVSXBD PMOVZXBD
321syn keyword masmOpcode		PMOVSXBQ PMOVZXBQ PMOVSXWD PMOVZXWD
322syn keyword masmOpcode		PMOVSXWQ PMOVZXWQ PMOVSXDQ PMOVZXDQ
323syn keyword masmOpcode		PTEST PCMPEQQ PACKUSDW MOVNTDQA
324
325" SSE 4.2 opcodes (Nehalem and later)
326syn keyword masmOpcode		PCMPESTRI PCMPESTRM PCMPISTRI PCMPISTRM PCMPGTQ
327syn keyword masmOpcode		CRC32 POPCNT LZCNT
328
329" AES-NI (Westmere (2010) and later)
330syn keyword masmOpcode		AESENC AESENCLAST AESDEC AESDECLAST
331syn keyword masmOpcode		AESKEYGENASSIST AESIMC PCLMULQDQ
332
333" AVX (Sandy Bridge (2011) and later)
334syn keyword masmOpcode		VBROADCASTSS VBROADCASTSD VBROADCASTF128
335syn keyword masmOpcode		VINSERTF128 VEXTRACTF128 VMASKMOVPS VMASKMOVPD
336syn keyword masmOpcode		VPERMILPS VPERMILPD VPERM2F128
337syn keyword masmOpcode		VZEROALL VZEROUPPER
338
339" Other opcodes in Pentium and later processors
340syn keyword masmOpcode		CMPXCHG8B CPUID UD2
341syn keyword masmOpcode		RSM RDMSR WRMSR RDPMC RDTSC SYSENTER SYSEXIT
342syn match   masmOpcode	   "CMOV\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
343
344
345" The default highlighting
346hi def link masmLabel		PreProc
347hi def link masmComment		Comment
348hi def link masmDirective	Statement
349hi def link masmType		Type
350hi def link masmOperator	Type
351hi def link masmOption		Special
352hi def link masmRegister	Special
353hi def link masmString		String
354hi def link masmText		String
355hi def link masmTitle		Title
356hi def link masmOpcode		Statement
357hi def link masmOpFloat		Statement
358
359hi def link masmHexadecimal	Number
360hi def link masmDecimal		Number
361hi def link masmOctal		Number
362hi def link masmBinary		Number
363hi def link masmFloatRaw	Number
364hi def link masmFloat		Number
365
366hi def link masmIdentifier	Identifier
367
368syntax sync minlines=50
369
370let b:current_syntax = "masm"
371
372let &cpo = s:cpo_save
373unlet s:cpo_save
374
375" vim: ts=8
376