blob: abee78b86d5ad4651acaa4b6b50b0450a2034e92 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar9964e462007-05-05 17:54:07 +00002" Language: Microsoft Macro Assembler (80x86)
3" Orig Author: Rob Brady <robb@datatone.com>
4" Maintainer: Wu Yongwei <wuyongwei@gmail.com>
Bram Moolenaar2cfb4a22020-05-07 18:56:00 +02005" Last Change: 2020-05-07 17:04:10 +0800
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +01007" Quit when a syntax file was already loaded
8if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009 finish
10endif
11
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +010012let s:cpo_save = &cpo
13set cpo&vim
14
Bram Moolenaar2cfb4a22020-05-07 18:56:00 +020015setlocal iskeyword=@,48-57,_,36,60,62,63,@-@
16
Bram Moolenaar071d4272004-06-13 20:20:40 +000017syn case ignore
18
19
Bram Moolenaar2cfb4a22020-05-07 18:56:00 +020020syn match masmIdentifier "[@a-z_$?][@a-z0-9_$?<>]*"
Bram Moolenaar9964e462007-05-05 17:54:07 +000021syn match masmLabel "^\s*[@a-z_$?][@a-z0-9_$?]*:"he=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +000022
Bram Moolenaar9964e462007-05-05 17:54:07 +000023syn 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\+\)\?\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
Bram Moolenaar9964e462007-05-05 17:54:07 +000030syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
Bram Moolenaar9964e462007-05-05 17:54:07 +000035syn 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
Bram Moolenaarff1d0d42007-05-10 17:24:16 +000037syn match masmTitle "[^\t ;]\([^;]*[^\t ;]\)\?" contained contains=@Spell
Bram Moolenaar9964e462007-05-05 17:54:07 +000038syn match masmText "[^\t ;]\([^;]*[^\t ;]\)\?" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000039
Bram Moolenaar9964e462007-05-05 17:54:07 +000040syn region masmOptionOpt start=+\<OPTION\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption
Bram Moolenaarff1d0d42007-05-10 17:24:16 +000041syn region masmContextOpt start=+\<PUSHCONTEXT\s+lc=11 start=+\<POPCONTEXT\s+lc=10 end=+$+ end=+;+me=e-1 contains=masmOption
Bram Moolenaar9964e462007-05-05 17:54:07 +000042syn 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
Bram Moolenaarff1d0d42007-05-10 17:24:16 +000045syn region masmAssumeOpt start=+\<ASSUME\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption,masmOperator,masmType,masmRegister,masmIdentifier
Bram Moolenaar9964e462007-05-05 17:54:07 +000046syn 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
Bram Moolenaarff1d0d42007-05-10 17:24:16 +000064syn 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
Bram Moolenaar9964e462007-05-05 17:54:07 +000067syn 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]\+)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179syn keyword masmRegister AX BX CX DX SI DI BP SP
Bram Moolenaar9964e462007-05-05 17:54:07 +0000180syn keyword masmRegister CS DS SS ES FS GS
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181syn keyword masmRegister AH BH CH DH AL BL CL DL
182syn keyword masmRegister EAX EBX ECX EDX ESI EDI EBP ESP
Bram Moolenaar9964e462007-05-05 17:54:07 +0000183syn 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])"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100188" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100195" SSE/AVX registers
196syn match masmRegister "\(X\|Y\)MM[0-9]\>"
197syn match masmRegister "\(X\|Y\)MM1[0-5]\>"
198
Bram Moolenaar9964e462007-05-05 17:54:07 +0000199" Instruction prefixes
200syn keyword masmOpcode LOCK REP REPE REPNE REPNZ REPZ
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201
Bram Moolenaar9964e462007-05-05 17:54:07 +0000202" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238syn 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
Bram Moolenaar9964e462007-05-05 17:54:07 +0000245syn 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
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100307" 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
Bram Moolenaar9964e462007-05-05 17:54:07 +0000340" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100346" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100360hi 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100367hi def link masmIdentifier Identifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +0100369syntax sync minlines=50
Bram Moolenaar071d4272004-06-13 20:20:40 +0000370
371let b:current_syntax = "masm"
372
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100373let &cpo = s:cpo_save
374unlet s:cpo_save
375
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376" vim: ts=8