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