forked from aniani/vim
		
	
		
			
				
	
	
		
			528 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			528 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | |
| " Language:	NASM - The Netwide Assembler (v0.98)
 | |
| " Maintainer:	Andriy Sokolov	<andriy145@gmail.com>
 | |
| " Original Author:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
 | |
| " Former Maintainer:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
 | |
| " Last Change:	2012 Feb 7
 | |
| " NASM Home:	http://www.nasm.us/
 | |
| 
 | |
| 
 | |
| 
 | |
| " Setup Syntax:
 | |
| "  Clear old syntax settings
 | |
| if version < 600
 | |
|   syn clear
 | |
| elseif exists("b:current_syntax")
 | |
|   finish
 | |
| endif
 | |
| "  Assembler syntax is case insensetive
 | |
| syn case ignore
 | |
| 
 | |
| 
 | |
| 
 | |
| " Vim search and movement commands on identifers
 | |
| if version < 600
 | |
|   "  Comments at start of a line inside which to skip search for indentifiers
 | |
|   set comments=:;
 | |
|   "  Identifier Keyword characters (defines \k)
 | |
|   set iskeyword=@,48-57,#,$,.,?,@-@,_,~
 | |
| else
 | |
|   "  Comments at start of a line inside which to skip search for indentifiers
 | |
|   setlocal comments=:;
 | |
|   "  Identifier Keyword characters (defines \k)
 | |
|   setlocal iskeyword=@,48-57,#,$,.,?,@-@,_,~
 | |
| endif
 | |
| 
 | |
| 
 | |
| 
 | |
| " Comments:
 | |
| syn region  nasmComment		start=";" keepend end="$" contains=@nasmGrpInComments
 | |
| syn region  nasmSpecialComment	start=";\*\*\*" keepend end="$"
 | |
| syn keyword nasmInCommentTodo	contained TODO FIXME XXX[XXXXX]
 | |
| syn cluster nasmGrpInComments	contains=nasmInCommentTodo
 | |
| syn cluster nasmGrpComments	contains=@nasmGrpInComments,nasmComment,nasmSpecialComment
 | |
| 
 | |
| 
 | |
| 
 | |
| " Label Identifiers:
 | |
| "  in NASM: 'Everything is a Label'
 | |
| "  Definition Label = label defined by %[i]define or %[i]assign
 | |
| "  Identifier Label = label defined as first non-keyword on a line or %[i]macro
 | |
| syn match   nasmLabelError	"$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
 | |
| syn match   nasmLabel		"\<\(\h\|[?@]\)\k*\>"
 | |
| syn match   nasmLabel		"[\$\~]\(\h\|[?@]\)\k*\>"lc=1
 | |
| "  Labels starting with one or two '.' are special
 | |
| syn match   nasmLocalLabel	"\<\.\(\w\|[#$?@~]\)\k*\>"
 | |
| syn match   nasmLocalLabel	"\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
 | |
| if !exists("nasm_no_warn")
 | |
|   syn match  nasmLabelWarn	"\<\~\=\$\=[_.][_.\~]*\>"
 | |
| endif
 | |
| if exists("nasm_loose_syntax")
 | |
|   syn match   nasmSpecialLabel	"\<\.\.@\k\+\>"
 | |
|   syn match   nasmSpecialLabel	"\<\$\.\.@\k\+\>"ms=s+1
 | |
|   if !exists("nasm_no_warn")
 | |
|     syn match   nasmLabelWarn	"\<\$\=\.\.@\(\d\|[#$\.~]\)\k*\>"
 | |
|   endif
 | |
|   " disallow use of nasm internal label format
 | |
|   syn match   nasmLabelError	"\<\$\=\.\.@\d\+\.\k*\>"
 | |
| else
 | |
|   syn match   nasmSpecialLabel	"\<\.\.@\(\h\|[?@]\)\k*\>"
 | |
|   syn match   nasmSpecialLabel	"\<\$\.\.@\(\h\|[?@]\)\k*\>"ms=s+1
 | |
| endif
 | |
| "  Labels can be dereferenced with '$' to destinguish them from reserved words
 | |
| syn match   nasmLabelError	"\<\$\K\k*\s*:"
 | |
| syn match   nasmLabelError	"^\s*\$\K\k*\>"
 | |
| syn match   nasmLabelError	"\<\~\s*\(\k*\s*:\|\$\=\.\k*\)"
 | |
| 
 | |
| 
 | |
| 
 | |
| " Constants:
 | |
| syn match   nasmStringError	+["']+
 | |
| syn match   nasmString		+\("[^"]\{-}"\|'[^']\{-}'\)+
 | |
| syn match   nasmBinNumber	"\<[0-1]\+b\>"
 | |
| syn match   nasmBinNumber	"\<\~[0-1]\+b\>"lc=1
 | |
| syn match   nasmOctNumber	"\<\o\+q\>"
 | |
| syn match   nasmOctNumber	"\<\~\o\+q\>"lc=1
 | |
| syn match   nasmDecNumber	"\<\d\+\>"
 | |
| syn match   nasmDecNumber	"\<\~\d\+\>"lc=1
 | |
| syn match   nasmHexNumber	"\<\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"
 | |
| syn match   nasmHexNumber	"\<\~\(\d\x*h\|0x\x\+\|\$\d\x*\)\>"lc=1
 | |
| syn match   nasmFltNumber	"\<\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
 | |
| syn keyword nasmFltNumber	Inf Infinity Indefinite NaN SNaN QNaN
 | |
| syn match   nasmNumberError	"\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
 | |
| 
 | |
| 
 | |
| " Netwide Assembler Storage Directives:
 | |
| "  Storage types
 | |
| syn keyword nasmTypeError	DF EXTRN FWORD RESF TBYTE
 | |
| syn keyword nasmType		FAR NEAR SHORT
 | |
| syn keyword nasmType		BYTE WORD DWORD QWORD DQWORD HWORD DHWORD TWORD
 | |
| syn keyword nasmType		CDECL FASTCALL NONE PASCAL STDCALL
 | |
| syn keyword nasmStorage		DB DW DD DQ DDQ DT
 | |
| syn keyword nasmStorage		RESB RESW RESD RESQ RESDQ REST
 | |
| syn keyword nasmStorage		EXTERN GLOBAL COMMON
 | |
| "  Structured storage types
 | |
| syn match   nasmTypeError	"\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
 | |
| syn match   nasmStructureLabel	contained "\<\(AT\|I\=\(END\)\=\(STRUCT\=\|UNION\)\|I\=END\)\>"
 | |
| "   structures cannot be nested (yet) -> use: 'keepend' and 're='
 | |
| syn cluster nasmGrpCntnStruc	contains=ALLBUT,@nasmGrpInComments,nasmMacroDef,@nasmGrpInMacros,@nasmGrpInPreCondits,nasmStructureDef,@nasmGrpInStrucs
 | |
| syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnStruc
 | |
| syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnStruc
 | |
| syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
 | |
| "   union types are not part of nasm (yet)
 | |
| "syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnStruc
 | |
| "syn region  nasmStructureDef	transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnStruc,nasmInStructure
 | |
| syn match   nasmInStructure	contained "^\s*AT\>"hs=e-1
 | |
| syn cluster nasmGrpInStrucs	contains=nasmStructure,nasmInStructure,nasmStructureLabel
 | |
| 
 | |
| 
 | |
| 
 | |
| " PreProcessor Instructions:
 | |
| " NAsm PreProcs start with %, but % is not a character
 | |
| syn match   nasmPreProcError	"%{\=\(%\=\k\+\|%%\+\k*\|[+-]\=\d\+\)}\="
 | |
| if exists("nasm_loose_syntax")
 | |
|   syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
 | |
| else
 | |
|   syn cluster nasmGrpNxtCtx	contains=nasmStructureLabel,nasmLabel,nasmLabelError,nasmPreProcError
 | |
| endif
 | |
| 
 | |
| "  Multi-line macro
 | |
| syn cluster nasmGrpCntnMacro	contains=ALLBUT,@nasmGrpInComments,nasmStructureDef,@nasmGrpInStrucs,nasmMacroDef,@nasmGrpPreCondits,nasmMemReference,nasmInMacPreCondit,nasmInMacStrucDef
 | |
| 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
 | |
| if exists("nasm_loose_syntax")
 | |
|   syn match  nasmInMacLabel	contained "%\(%\k\+\>\|{%\k\+}\)"
 | |
|   syn match  nasmInMacLabel	contained "%\($\+\(\w\|[#\.?@~]\)\k*\>\|{$\+\(\w\|[#\.?@~]\)\k*}\)"
 | |
|   syn match  nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=nasmStructureLabel,nasmLabel,nasmInMacParam,nasmLocalLabel,nasmSpecialLabel,nasmLabelError,nasmPreProcError
 | |
|   if !exists("nasm_no_warn")
 | |
|     syn match nasmInMacLblWarn	contained "%\(%[$\.]\k*\>\|{%[$\.]\k*}\)"
 | |
|     syn match nasmInMacLblWarn	contained "%\($\+\(\d\|[#\.@~]\)\k*\|{\$\+\(\d\|[#\.@~]\)\k*}\)"
 | |
|     hi link nasmInMacCatLabel	nasmInMacLblWarn
 | |
|   else
 | |
|     hi link nasmInMacCatLabel	nasmInMacLabel
 | |
|   endif
 | |
| else
 | |
|   syn match  nasmInMacLabel	contained "%\(%\(\w\|[#?@~]\)\k*\>\|{%\(\w\|[#?@~]\)\k*}\)"
 | |
|   syn match  nasmInMacLabel	contained "%\($\+\(\h\|[?@]\)\k*\>\|{$\+\(\h\|[?@]\)\k*}\)"
 | |
|   hi link nasmInMacCatLabel	nasmLabelError
 | |
| endif
 | |
| syn match   nasmInMacCatLabel	contained "\d\K\k*"lc=1
 | |
| syn match   nasmInMacLabel	contained "\d}\k\+"lc=2
 | |
| if !exists("nasm_no_warn")
 | |
|   syn match  nasmInMacLblWarn	contained "%\(\($\+\|%\)[_~][._~]*\>\|{\($\+\|%\)[_~][._~]*}\)"
 | |
| endif
 | |
| syn match   nasmInMacPreProc	contained "^\s*%pop\>"hs=e-3
 | |
| syn match   nasmInMacPreProc	contained "^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
| "   structures cannot be nested (yet) -> use: 'keepend' and 're='
 | |
| syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUCT\>"hs=e-5 end="^\s*ENDSTRUCT\>"re=e-9 contains=@nasmGrpCntnMacro
 | |
| syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*STRUC\>"hs=e-4  end="^\s*ENDSTRUC\>"re=e-8  contains=@nasmGrpCntnMacro
 | |
| syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<ISTRUCT\=\>" end="\<IEND\(STRUCT\=\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
 | |
| "   union types are not part of nasm (yet)
 | |
| "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
 | |
| "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
 | |
| 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
 | |
| " Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
 | |
| syn match   nasmInMacPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
| syn match   nasmInMacPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
| syn match   nasmInMacPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
| syn match   nasmInMacParamNum	contained "\<\d\+\.list\>"me=e-5
 | |
| syn match   nasmInMacParamNum	contained "\<\d\+\.nolist\>"me=e-7
 | |
| syn match   nasmInMacDirective	contained "\.\(no\)\=list\>"
 | |
| syn match   nasmInMacMacro	contained transparent "macro\s"lc=5 skipwhite nextgroup=nasmStructureLabel
 | |
| syn match   nasmInMacMacro	contained "^\s*%rotate\>"hs=e-6
 | |
| syn match   nasmInMacParam	contained "%\([+-]\=\d\+\|{[+-]\=\d\+}\)"
 | |
| "   nasm conditional macro operands/arguments
 | |
| "   Todo: check feasebility; add too nasmGrpInMacros, etc.
 | |
| "syn match   nasmInMacCond	contained "\<\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
 | |
| syn cluster nasmGrpInMacros	contains=nasmMacro,nasmInMacMacro,nasmInMacParam,nasmInMacParamNum,nasmInMacDirective,nasmInMacLabel,nasmInMacLblWarn,nasmInMacMemRef,nasmInMacPreConDef,nasmInMacPreCondit,nasmInMacPreProc,nasmInMacStrucDef
 | |
| 
 | |
| "   Context pre-procs that are better used inside a macro
 | |
| if exists("nasm_ctx_outside_macro")
 | |
|   syn region nasmPreConditDef	transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
 | |
|   syn match  nasmCtxPreProc	"^\s*%pop\>"hs=e-3
 | |
|   if exists("nasm_loose_syntax")
 | |
|     syn match   nasmCtxLocLabel	"%$\+\(\w\|[#.?@~]\)\k*\>"
 | |
|   else
 | |
|     syn match   nasmCtxLocLabel	"%$\+\(\h\|[?@]\)\k*\>"
 | |
|   endif
 | |
|   syn match nasmCtxPreProc	"^\s*%\(push\|repl\)\>"hs=e-4 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
|   syn match nasmCtxPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
|   syn match nasmCtxPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
|   syn match nasmCtxPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
 | |
|   if exists("nasm_no_warn")
 | |
|     hi link nasmCtxPreCondit	nasmPreCondit
 | |
|     hi link nasmCtxPreProc	nasmPreProc
 | |
|     hi link nasmCtxLocLabel	nasmLocalLabel
 | |
|   else
 | |
|     hi link nasmCtxPreCondit	nasmPreProcWarn
 | |
|     hi link nasmCtxPreProc	nasmPreProcWarn
 | |
|     hi link nasmCtxLocLabel	nasmLabelWarn
 | |
|   endif
 | |
| endif
 | |
| 
 | |
| "  Conditional assembly
 | |
| syn cluster nasmGrpCntnPreCon	contains=ALLBUT,@nasmGrpInComments,@nasmGrpInMacros,@nasmGrpInStrucs
 | |
| 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
 | |
| syn match   nasmInPreCondit	contained "^\s*%el\(if\|se\)\>"hs=e-4
 | |
| syn match   nasmInPreCondit	contained "^\s*%elifid\>"hs=e-6
 | |
| syn match   nasmInPreCondit	contained "^\s*%elif\(def\|idn\|nid\|num\|str\)\>"hs=e-7
 | |
| syn match   nasmInPreCondit	contained "^\s*%elif\(n\(def\|idn\|num\|str\)\|idni\)\>"hs=e-8
 | |
| syn match   nasmInPreCondit	contained "^\s*%elifnidni\>"hs=e-9
 | |
| syn cluster nasmGrpInPreCondits	contains=nasmPreCondit,nasmInPreCondit,nasmCtxPreCondit
 | |
| syn cluster nasmGrpPreCondits	contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
 | |
| 
 | |
| "  Other pre-processor statements
 | |
| syn match   nasmPreProc		"^\s*%\(rep\|use\)\>"hs=e-3
 | |
| syn match   nasmPreProc		"^\s*%line\>"hs=e-4
 | |
| syn match   nasmPreProc		"^\s*%\(clear\|error\|fatal\)\>"hs=e-5
 | |
| syn match   nasmPreProc		"^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
 | |
| syn match   nasmPreProc		"^\s*%\(exitrep\|warning\)\>"hs=e-7
 | |
| syn match   nasmDefine		"^\s*%undef\>"hs=e-5
 | |
| syn match   nasmDefine		"^\s*%\(assign\|define\)\>"hs=e-6
 | |
| syn match   nasmDefine		"^\s*%i\(assign\|define\)\>"hs=e-7
 | |
| syn match   nasmDefine		"^\s*%unmacro\>"hs=e-7
 | |
| syn match   nasmInclude		"^\s*%include\>"hs=e-7
 | |
| " Todo: Treat the line tail after %fatal, %error, %warning as text
 | |
| 
 | |
| "  Multiple pre-processor instructions on single line detection (obsolete)
 | |
| "syn match   nasmPreProcError	+^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
 | |
| syn cluster nasmGrpPreProcs	contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCondits,nasmPreProc,nasmDefine,nasmInclude,nasmPreProcWarn,nasmPreProcError
 | |
| 
 | |
| 
 | |
| 
 | |
| " Register Identifiers:
 | |
| "  Register operands:
 | |
| syn match   nasmGen08Register	"\<[A-D][HL]\>"
 | |
| syn match   nasmGen16Register	"\<\([A-D]X\|[DS]I\|[BS]P\)\>"
 | |
| syn match   nasmGen32Register	"\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
 | |
| syn match   nasmGen64Register	"\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>"
 | |
| syn match   nasmSegRegister	"\<[C-GS]S\>"
 | |
| syn match   nasmSpcRegister	"\<E\=IP\>"
 | |
| syn match   nasmFpuRegister	"\<ST\o\>"
 | |
| syn match   nasmMmxRegister	"\<MM\o\>"
 | |
| syn match   nasmSseRegister	"\<XMM\o\>"
 | |
| syn match   nasmCtrlRegister	"\<CR\o\>"
 | |
| syn match   nasmDebugRegister	"\<DR\o\>"
 | |
| syn match   nasmTestRegister	"\<TR\o\>"
 | |
| syn match   nasmRegisterError	"\<\(CR[15-9]\|DR[4-58-9]\|TR[0-28-9]\)\>"
 | |
| syn match   nasmRegisterError	"\<X\=MM[8-9]\>"
 | |
| syn match   nasmRegisterError	"\<ST\((\d)\|[8-9]\>\)"
 | |
| syn match   nasmRegisterError	"\<E\([A-D][HL]\|[C-GS]S\)\>"
 | |
| "  Memory reference operand (address):
 | |
| syn match   nasmMemRefError	"[[\]]"
 | |
| syn cluster nasmGrpCntnMemRef	contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
 | |
| syn match   nasmInMacMemRef	contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
 | |
| syn match   nasmMemReference	"\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
 | |
| 
 | |
| 
 | |
| 
 | |
| " Netwide Assembler Directives:
 | |
| "  Compilation constants
 | |
| syn keyword nasmConstant	__BITS__ __DATE__ __FILE__ __FORMAT__ __LINE__
 | |
| syn keyword nasmConstant	__NASM_MAJOR__ __NASM_MINOR__ __NASM_VERSION__
 | |
| syn keyword nasmConstant	__TIME__
 | |
| "  Instruction modifiers
 | |
| syn match   nasmInstructnError	"\<TO\>"
 | |
| syn match   nasmInstrModifier	"\(^\|:\)\s*[C-GS]S\>"ms=e-1
 | |
| syn keyword nasmInstrModifier	A16 A32 O16 O32
 | |
| syn match   nasmInstrModifier	"\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)\s\+TO\>"lc=5,ms=e-1
 | |
| "   the 'to' keyword is not allowed for fpu-pop instructions (yet)
 | |
| "syn match   nasmInstrModifier	"\<F\(ADD\|MUL\|\(DIV\|SUB\)R\=\)P\s\+TO\>"lc=6,ms=e-1
 | |
| "  NAsm directives
 | |
| syn keyword nasmRepeat		TIMES
 | |
| syn keyword nasmDirective	ALIGN[B] INCBIN EQU NOSPLIT SPLIT
 | |
| syn keyword nasmDirective	ABSOLUTE BITS SECTION SEGMENT
 | |
| syn keyword nasmDirective	ENDSECTION ENDSEGMENT
 | |
| syn keyword nasmDirective	__SECT__
 | |
| "  Macro created standard directives: (requires %include)
 | |
| syn case match
 | |
| syn keyword nasmStdDirective	ENDPROC EPILOGUE LOCALS PROC PROLOGUE USES
 | |
| syn keyword nasmStdDirective	ENDIF ELSE ELIF ELSIF IF
 | |
| "syn keyword nasmStdDirective	BREAK CASE DEFAULT ENDSWITCH SWITCH
 | |
| "syn keyword nasmStdDirective	CASE OF ENDCASE
 | |
| syn keyword nasmStdDirective	DO ENDFOR ENDWHILE FOR REPEAT UNTIL WHILE EXIT
 | |
| syn case ignore
 | |
| "  Format specific directives: (all formats)
 | |
| "  (excluded: extension directives to section, global, common and extern)
 | |
| syn keyword nasmFmtDirective	ORG
 | |
| syn keyword nasmFmtDirective	EXPORT IMPORT GROUP UPPERCASE SEG WRT
 | |
| syn keyword nasmFmtDirective	LIBRARY
 | |
| syn case match
 | |
| syn keyword nasmFmtDirective	_GLOBAL_OFFSET_TABLE_ __GLOBAL_OFFSET_TABLE_
 | |
| syn keyword nasmFmtDirective	..start ..got ..gotoff ..gotpc ..plt ..sym
 | |
| syn case ignore
 | |
| 
 | |
| 
 | |
| 
 | |
| " Standard Instructions:
 | |
| syn match   nasmInstructnError	"\<\(F\=CMOV\|SET\)N\=\a\{0,2}\>"
 | |
| syn keyword nasmInstructnError	CMPS MOVS LCS LODS STOS XLAT
 | |
| syn match   nasmStdInstruction	"\<MOV\>"
 | |
| syn match   nasmInstructnError	"\<MOV\s[^,;[]*\<CS\>\s*[^:]"he=e-1
 | |
| syn match   nasmStdInstruction	"\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P[EO]\=\)\>"
 | |
| syn match   nasmStdInstruction	"\<POP\>"
 | |
| syn keyword nasmStdInstruction	AAA AAD AAM AAS ADC ADD AND
 | |
| syn keyword nasmStdInstruction	BOUND BSF BSR BSWAP BT[C] BTR BTS
 | |
| syn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
 | |
| syn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
 | |
| syn keyword nasmStdInstruction	DAA DAS DEC DIV ENTER
 | |
| syn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
 | |
| syn keyword nasmStdInstruction	JCXZ JECXZ JMP
 | |
| syn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
 | |
| syn keyword nasmStdInstruction	LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
 | |
| syn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
 | |
| syn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW POPFQ
 | |
| syn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
 | |
| syn keyword nasmStdInstruction	RCL RCR RETF RET[N] ROL ROR
 | |
| syn keyword nasmStdInstruction	SAHF SAL SAR SBB SCASB SCASD SCASW
 | |
| syn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
 | |
| syn keyword nasmStdInstruction	TEST XADD XCHG XLATB XOR
 | |
| syn keyword nasmStdInstruction	LFENCE MFENCE SFENCE
 | |
| 
 | |
| 
 | |
| " System Instructions: (usually privileged)
 | |
| "  Verification of pointer parameters
 | |
| syn keyword nasmSysInstruction	ARPL LAR LSL VERR VERW
 | |
| "  Addressing descriptor tables
 | |
| syn keyword nasmSysInstruction	LLDT SLDT LGDT SGDT
 | |
| "  Multitasking
 | |
| syn keyword nasmSysInstruction	LTR STR
 | |
| "  Coprocessing and Multiprocessing (requires fpu and multiple cpu's resp.)
 | |
| syn keyword nasmSysInstruction	CLTS LOCK WAIT
 | |
| "  Input and Output
 | |
| syn keyword nasmInstructnError	INS OUTS
 | |
| syn keyword nasmSysInstruction	IN INSB INSW INSD OUT OUTSB OUTSB OUTSW OUTSD
 | |
| "  Interrupt control
 | |
| syn keyword nasmSysInstruction	CLI STI LIDT SIDT
 | |
| "  System control
 | |
| syn match   nasmSysInstruction	"\<MOV\s[^;]\{-}\<CR\o\>"me=s+3
 | |
| syn keyword nasmSysInstruction	HLT INVD LMSW
 | |
| syn keyword nasmSseInstruction	PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
 | |
| syn keyword nasmSseInstruction	RSM SFENCE SMSW SYSENTER SYSEXIT UD2 WBINVD
 | |
| "  TLB (Translation Lookahead Buffer) testing
 | |
| syn match   nasmSysInstruction	"\<MOV\s[^;]\{-}\<TR\o\>"me=s+3
 | |
| syn keyword nasmSysInstruction	INVLPG
 | |
| 
 | |
| " Debugging Instructions: (privileged)
 | |
| syn match   nasmDbgInstruction	"\<MOV\s[^;]\{-}\<DR\o\>"me=s+3
 | |
| syn keyword nasmDbgInstruction	INT1 INT3 RDMSR RDTSC RDPMC WRMSR
 | |
| 
 | |
| 
 | |
| " Floating Point Instructions: (requires FPU)
 | |
| syn match   nasmFpuInstruction	"\<FCMOVN\=\([AB]E\=\|[CEPUZ]\)\>"
 | |
| syn keyword nasmFpuInstruction	F2XM1 FABS FADD[P] FBLD FBSTP
 | |
| syn keyword nasmFpuInstruction	FCHS FCLEX FCOM[IP] FCOMP[P] FCOS
 | |
| syn keyword nasmFpuInstruction	FDECSTP FDISI FDIV[P] FDIVR[P] FENI FFREE
 | |
| syn keyword nasmFpuInstruction	FIADD FICOM[P] FIDIV[R] FILD
 | |
| syn keyword nasmFpuInstruction	FIMUL FINCSTP FINIT FIST[P] FISUB[R]
 | |
| syn keyword nasmFpuInstruction	FLD[1] FLDCW FLDENV FLDL2E FLDL2T FLDLG2
 | |
| syn keyword nasmFpuInstruction	FLDLN2 FLDPI FLDZ FMUL[P]
 | |
| syn keyword nasmFpuInstruction	FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE
 | |
| syn keyword nasmFpuInstruction	FNSTCW FNSTENV FNSTSW FNSTSW
 | |
| syn keyword nasmFpuInstruction	FPATAN FPREM[1] FPTAN FRNDINT FRSTOR
 | |
| syn keyword nasmFpuInstruction	FSAVE FSCALE FSETPM FSIN FSINCOS FSQRT
 | |
| syn keyword nasmFpuInstruction	FSTCW FSTENV FST[P] FSTSW FSUB[P] FSUBR[P]
 | |
| syn keyword nasmFpuInstruction	FTST FUCOM[IP] FUCOMP[P]
 | |
| syn keyword nasmFpuInstruction	FXAM FXCH FXTRACT FYL2X FYL2XP1
 | |
| 
 | |
| 
 | |
| " Multi Media Xtension Packed Instructions: (requires MMX unit)
 | |
| "  Standard MMX instructions: (requires MMX1 unit)
 | |
| syn match   nasmInstructnError	"\<P\(ADD\|SUB\)U\=S\=[DQ]\=\>"
 | |
| syn match   nasmInstructnError	"\<PCMP\a\{0,2}[BDWQ]\=\>"
 | |
| syn keyword nasmMmxInstruction	EMMS MOVD MOVQ
 | |
| syn keyword nasmMmxInstruction	PACKSSDW PACKSSWB PACKUSWB PADDB PADDD PADDW
 | |
| syn keyword nasmMmxInstruction	PADDSB PADDSW PADDUSB PADDUSW PAND[N]
 | |
| syn keyword nasmMmxInstruction	PCMPEQB PCMPEQD PCMPEQW PCMPGTB PCMPGTD PCMPGTW
 | |
| syn keyword nasmMmxInstruction	PMACHRIW PMADDWD PMULHW PMULLW POR
 | |
| syn keyword nasmMmxInstruction	PSLLD PSLLQ PSLLW PSRAD PSRAW PSRLD PSRLQ PSRLW
 | |
| syn keyword nasmMmxInstruction	PSUBB PSUBD PSUBW PSUBSB PSUBSW PSUBUSB PSUBUSW
 | |
| syn keyword nasmMmxInstruction	PUNPCKHBW PUNPCKHDQ PUNPCKHWD
 | |
| syn keyword nasmMmxInstruction	PUNPCKLBW PUNPCKLDQ PUNPCKLWD PXOR
 | |
| "  Extended MMX instructions: (requires MMX2/SSE unit)
 | |
| syn keyword nasmMmxInstruction	MASKMOVQ MOVNTQ
 | |
| syn keyword nasmMmxInstruction	PAVGB PAVGW PEXTRW PINSRW PMAXSW PMAXUB
 | |
| syn keyword nasmMmxInstruction	PMINSW PMINUB PMOVMSKB PMULHUW PSADBW PSHUFW
 | |
| 
 | |
| 
 | |
| " Streaming SIMD Extension Packed Instructions: (requires SSE unit)
 | |
| syn match   nasmInstructnError	"\<CMP\a\{1,5}[PS]S\>"
 | |
| syn match   nasmSseInstruction	"\<CMP\(N\=\(EQ\|L[ET]\)\|\(UN\)\=ORD\)\=[PS]S\>"
 | |
| syn keyword nasmSseInstruction	ADDPS ADDSS ANDNPS ANDPS
 | |
| syn keyword nasmSseInstruction	COMISS CVTPI2PS CVTPS2PI
 | |
| syn keyword nasmSseInstruction	CVTSI2SS CVTSS2SI CVTTPS2PI CVTTSS2SI
 | |
| syn keyword nasmSseInstruction	DIVPS DIVSS FXRSTOR FXSAVE LDMXCSR
 | |
| syn keyword nasmSseInstruction	MAXPS MAXSS MINPS MINSS MOVAPS MOVHLPS MOVHPS
 | |
| syn keyword nasmSseInstruction	MOVLHPS MOVLPS MOVMSKPS MOVNTPS MOVSS MOVUPS
 | |
| syn keyword nasmSseInstruction	MULPS MULSS
 | |
| syn keyword nasmSseInstruction	ORPS RCPPS RCPSS RSQRTPS RSQRTSS
 | |
| syn keyword nasmSseInstruction	SHUFPS SQRTPS SQRTSS STMXCSR SUBPS SUBSS
 | |
| syn keyword nasmSseInstruction	UCOMISS UNPCKHPS UNPCKLPS XORPS
 | |
| 
 | |
| 
 | |
| " Three Dimensional Now Packed Instructions: (requires 3DNow! unit)
 | |
| syn keyword nasmNowInstruction	FEMMS PAVGUSB PF2ID PFACC PFADD PFCMPEQ PFCMPGE
 | |
| syn keyword nasmNowInstruction	PFCMPGT PFMAX PFMIN PFMUL PFRCP PFRCPIT1
 | |
| syn keyword nasmNowInstruction	PFRCPIT2 PFRSQIT1 PFRSQRT PFSUB[R] PI2FD
 | |
| syn keyword nasmNowInstruction	PMULHRWA PREFETCH[W]
 | |
| 
 | |
| 
 | |
| " Vendor Specific Instructions:
 | |
| "  Cyrix instructions (requires Cyrix processor)
 | |
| syn keyword nasmCrxInstruction	PADDSIW PAVEB PDISTIB PMAGW PMULHRW[C] PMULHRIW
 | |
| syn keyword nasmCrxInstruction	PMVGEZB PMVLZB PMVNZB PMVZB PSUBSIW
 | |
| syn keyword nasmCrxInstruction	RDSHR RSDC RSLDT SMINT SMINTOLD SVDC SVLDT SVTS
 | |
| syn keyword nasmCrxInstruction	WRSHR
 | |
| "  AMD instructions (requires AMD processor)
 | |
| syn keyword nasmAmdInstruction	SYSCALL SYSRET
 | |
| 
 | |
| 
 | |
| " Undocumented Instructions:
 | |
| syn match   nasmUndInstruction	"\<POP\s[^;]*\<CS\>"me=s+3
 | |
| syn keyword nasmUndInstruction	CMPXCHG486 IBTS ICEBP INT01 INT03 LOADALL
 | |
| syn keyword nasmUndInstruction	LOADALL286 LOADALL386 SALC SMI UD1 UMOV XBTS
 | |
| 
 | |
| 
 | |
| 
 | |
| " Synchronize Syntax:
 | |
| syn sync clear
 | |
| syn sync minlines=50		"for multiple region nesting
 | |
| syn sync match  nasmSync	grouphere nasmMacroDef "^\s*%i\=macro\>"me=s-1
 | |
| syn sync match	nasmSync	grouphere NONE	       "^\s*%endmacro\>"
 | |
| 
 | |
| 
 | |
| " Define the default highlighting.
 | |
| " For version 5.7 and earlier: only when not done already
 | |
| " For version 5.8 and later  : only when an item doesn't have highlighting yet
 | |
| if version >= 508 || !exists("did_nasm_syntax_inits")
 | |
|   if version < 508
 | |
|     let did_nasm_syntax_inits = 1
 | |
|     command -nargs=+ HiLink hi link <args>
 | |
|   else
 | |
|     command -nargs=+ HiLink hi def link <args>
 | |
|   endif
 | |
| 
 | |
|   " Sub Links:
 | |
|   HiLink nasmInMacDirective	nasmDirective
 | |
|   HiLink nasmInMacLabel		nasmLocalLabel
 | |
|   HiLink nasmInMacLblWarn	nasmLabelWarn
 | |
|   HiLink nasmInMacMacro		nasmMacro
 | |
|   HiLink nasmInMacParam		nasmMacro
 | |
|   HiLink nasmInMacParamNum	nasmDecNumber
 | |
|   HiLink nasmInMacPreCondit	nasmPreCondit
 | |
|   HiLink nasmInMacPreProc	nasmPreProc
 | |
|   HiLink nasmInPreCondit	nasmPreCondit
 | |
|   HiLink nasmInStructure	nasmStructure
 | |
|   HiLink nasmStructureLabel	nasmStructure
 | |
| 
 | |
|   " Comment Group:
 | |
|   HiLink nasmComment		Comment
 | |
|   HiLink nasmSpecialComment	SpecialComment
 | |
|   HiLink nasmInCommentTodo	Todo
 | |
| 
 | |
|   " Constant Group:
 | |
|   HiLink nasmString		String
 | |
|   HiLink nasmStringError	Error
 | |
|   HiLink nasmBinNumber		Number
 | |
|   HiLink nasmOctNumber		Number
 | |
|   HiLink nasmDecNumber		Number
 | |
|   HiLink nasmHexNumber		Number
 | |
|   HiLink nasmFltNumber		Float
 | |
|   HiLink nasmNumberError	Error
 | |
| 
 | |
|   " Identifier Group:
 | |
|   HiLink nasmLabel		Identifier
 | |
|   HiLink nasmLocalLabel		Identifier
 | |
|   HiLink nasmSpecialLabel	Special
 | |
|   HiLink nasmLabelError		Error
 | |
|   HiLink nasmLabelWarn		Todo
 | |
| 
 | |
|   " PreProc Group:
 | |
|   HiLink nasmPreProc		PreProc
 | |
|   HiLink nasmDefine		Define
 | |
|   HiLink nasmInclude		Include
 | |
|   HiLink nasmMacro		Macro
 | |
|   HiLink nasmPreCondit		PreCondit
 | |
|   HiLink nasmPreProcError	Error
 | |
|   HiLink nasmPreProcWarn	Todo
 | |
| 
 | |
|   " Type Group:
 | |
|   HiLink nasmType		Type
 | |
|   HiLink nasmStorage		StorageClass
 | |
|   HiLink nasmStructure		Structure
 | |
|   HiLink nasmTypeError		Error
 | |
| 
 | |
|   " Directive Group:
 | |
|   HiLink nasmConstant		Constant
 | |
|   HiLink nasmInstrModifier	Operator
 | |
|   HiLink nasmRepeat		Repeat
 | |
|   HiLink nasmDirective		Keyword
 | |
|   HiLink nasmStdDirective	Operator
 | |
|   HiLink nasmFmtDirective	Keyword
 | |
| 
 | |
|   " Register Group:
 | |
|   HiLink nasmCtrlRegister	Special
 | |
|   HiLink nasmDebugRegister	Debug
 | |
|   HiLink nasmTestRegister	Special
 | |
|   HiLink nasmRegisterError	Error
 | |
|   HiLink nasmMemRefError	Error
 | |
| 
 | |
|   " Instruction Group:
 | |
|   HiLink nasmStdInstruction	Statement
 | |
|   HiLink nasmSysInstruction	Statement
 | |
|   HiLink nasmDbgInstruction	Debug
 | |
|   HiLink nasmFpuInstruction	Statement
 | |
|   HiLink nasmMmxInstruction	Statement
 | |
|   HiLink nasmSseInstruction	Statement
 | |
|   HiLink nasmNowInstruction	Statement
 | |
|   HiLink nasmAmdInstruction	Special
 | |
|   HiLink nasmCrxInstruction	Special
 | |
|   HiLink nasmUndInstruction	Todo
 | |
|   HiLink nasmInstructnError	Error
 | |
| 
 | |
|   delcommand HiLink
 | |
| endif
 | |
| 
 | |
| let b:current_syntax = "nasm"
 | |
| 
 | |
| " vim:ts=8 sw=4
 |