#
# NASM,WASM,TASM,MASM and GAS x86 syntax highlight
# // Mike Gorchak
# // Andres Farfan 2012
#

caseinsensitive

context default lightgray

# NASM directives
    keyword whole BITS white
    keyword whole SECTION white
    keyword whole SEGMENT white
    keyword whole ABSOLUTE white
    keyword whole EXTERN white
    keyword whole GLOBAL white
    keyword whole COMMON white
    keyword whole CPU white

# NASM, WASM, TASM, MASM and common modifiers
    keyword whole ALIGN white
    keyword whole ALIGNB white
    keyword whole STRUC white
    keyword whole ENDSTRUC white
    keyword whole ISTRUC white
    keyword whole IEND white
    keyword whole AT white
    keyword whole __FILE__ white
    keyword whole __LINE__ white
    keyword whole __NASM_VER__ white
    keyword whole __NASM_VERSION_ID__ white
    keyword whole __NASM_MAJOR__ white
    keyword whole __NASM_MINOR__ white
    keyword whole __NASM_SUBMINOR__ white
    keyword whole __NASM_PATCHLEVEL__ white
    keyword whole __SECT__ white
    keyword whole STRICT white
    keyword whole SEG white
    keyword whole WRT white
    keyword whole NOSPLIT white
    keyword whole BYTE white
    keyword whole WORD white
    keyword whole DWORD white
    keyword whole QWORD white
    keyword whole TWORD white

# Pseudo instructions
    keyword whole ORG white
    keyword whole EQU white
    keyword whole DB white
    keyword whole DW white
    keyword whole DD white
    keyword whole DQ white
    keyword whole DT white
    keyword whole RESB white
    keyword whole RESW white
    keyword whole RESD white
    keyword whole RESQ white
    keyword whole REST white
    keyword whole INCBIN white
    keyword whole TIMES white

# GAS specific
    keyword whole .string white
    keyword whole .section white
    keyword whole .align white
    keyword whole .type white
    keyword whole .size white
    keyword whole .comm white
    keyword whole .ident white
    keyword whole .globl white
    keyword whole .rodata brightblue
    keyword whole .data brightblue
    keyword whole .text brightblue
    keyword whole .bss brightblue

# NASM/TASM Macroses
    keyword whole %ifdef brightred
    keyword whole %define brightred
    keyword whole %else brightred
    keyword whole %elif brightred
    keyword whole %endif brightred
    keyword whole %macro brightred
    keyword whole %endmacro brightred
    keyword whole %rep brightred
    keyword whole %repl brightred
    keyword whole %strlen brightred
    keyword whole %substr brightred
    keyword whole %arg brightred
    keyword whole %stacksize brightred
    keyword whole %local brightred
    keyword whole %push brightred
    keyword whole %pop brightred
    keyword whole %line brightred
    keyword whole %\! brightred
    keyword whole %\+ brightred

# Generic 16-bit registers set
    keyword whole %al brightmagenta
    keyword whole %bl brightmagenta
    keyword whole %cl brightmagenta
    keyword whole %dl brightmagenta
    keyword whole %ah brightmagenta
    keyword whole %bh brightmagenta
    keyword whole %ch brightmagenta
    keyword whole %dh brightmagenta
    keyword whole %ax brightmagenta
    keyword whole %bx brightmagenta
    keyword whole %cx brightmagenta
    keyword whole %dx brightmagenta
    keyword whole %si brightmagenta
    keyword whole %di brightmagenta
    keyword whole %bp brightmagenta
    keyword whole %sp brightmagenta
    keyword whole %es brightmagenta
    keyword whole %cs brightmagenta
    keyword whole %ds brightmagenta

    keyword whole AL brightmagenta
    keyword whole BL brightmagenta
    keyword whole CL brightmagenta
    keyword whole DL brightmagenta
    keyword whole AH brightmagenta
    keyword whole BH brightmagenta
    keyword whole CH brightmagenta
    keyword whole DH brightmagenta
    keyword whole AX brightmagenta
    keyword whole BX brightmagenta
    keyword whole CX brightmagenta
    keyword whole DX brightmagenta
    keyword whole SI brightmagenta
    keyword whole DI brightmagenta
    keyword whole BP brightmagenta
    keyword whole SP brightmagenta
    keyword whole ES brightmagenta
    keyword whole CS brightmagenta
    keyword whole DS brightmagenta

# Generic 32-bit registers set
    keyword whole %eax brightmagenta
    keyword whole %ebx brightmagenta
    keyword whole %ecx brightmagenta
    keyword whole %edx brightmagenta
    keyword whole %esi brightmagenta
    keyword whole %edi brightmagenta
    keyword whole %ebp brightmagenta
    keyword whole %esp brightmagenta
    keyword whole %fs brightmagenta
    keyword whole %gs brightmagenta

    keyword whole EAX brightmagenta
    keyword whole EBX brightmagenta
    keyword whole ECX brightmagenta
    keyword whole EDX brightmagenta
    keyword whole ESI brightmagenta
    keyword whole EDI brightmagenta
    keyword whole EBP brightmagenta
    keyword whole ESP brightmagenta
    keyword whole FS brightmagenta
    keyword whole GS brightmagenta

    keyword whole CR0 magenta
    keyword whole CR1 magenta
    keyword whole CR2 magenta
    keyword whole CR3 magenta
    keyword whole DR0 magenta
    keyword whole DR1 magenta
    keyword whole DR3 magenta
    keyword whole DR4 magenta
    keyword whole DR5 magenta
    keyword whole DR6 magenta
    keyword whole DR7 magenta
    keyword whole TR0 magenta
    keyword whole TR1 magenta
    keyword whole TR2 magenta
    keyword whole TR3 magenta
    keyword whole TR4 magenta
    keyword whole TR5 magenta
    keyword whole TR6 magenta
    keyword whole TR7 magenta
    keyword whole TR8 magenta
    keyword whole TR9 magenta
    keyword whole TR10 magenta
    keyword whole TR11 magenta

# Generic AMD64 registers set
    keyword whole %rax brightmagenta
    keyword whole %rbx brightmagenta
    keyword whole %rcx brightmagenta
    keyword whole %rdx brightmagenta
    keyword whole %rsi brightmagenta
    keyword whole %rdi brightmagenta
    keyword whole %rbp brightmagenta
    keyword whole %rsp brightmagenta
    keyword whole %r8 brightmagenta
    keyword whole %r9 brightmagenta
    keyword whole %r10 brightmagenta
    keyword whole %r11 brightmagenta
    keyword whole %r12 brightmagenta
    keyword whole %r13 brightmagenta
    keyword whole %r14 brightmagenta
    keyword whole %r15 brightmagenta

    keyword whole RAX brightmagenta
    keyword whole RBX brightmagenta
    keyword whole RCX brightmagenta
    keyword whole RDX brightmagenta
    keyword whole RSI brightmagenta
    keyword whole RDI brightmagenta
    keyword whole RBP brightmagenta
    keyword whole RSP brightmagenta
    keyword whole R8 brightmagenta
    keyword whole R9 brightmagenta
    keyword whole R10 brightmagenta
    keyword whole R11 brightmagenta
    keyword whole R12 brightmagenta
    keyword whole R13 brightmagenta
    keyword whole R14 brightmagenta
    keyword whole R15 brightmagenta

#AMD64 32-bit registers. 64-bit mode
    keyword whole %r8d brightmagenta
    keyword whole %r9d brightmagenta
    keyword whole %r10d brightmagenta
    keyword whole %r11d brightmagenta
    keyword whole %r12d brightmagenta
    keyword whole %r13d brightmagenta
    keyword whole %r14d brightmagenta
    keyword whole %r15d brightmagenta

    keyword whole R8D brightmagenta
    keyword whole R9D brightmagenta
    keyword whole R10D brightmagenta
    keyword whole R11D brightmagenta
    keyword whole R12D brightmagenta
    keyword whole R13D brightmagenta
    keyword whole R14D brightmagenta
    keyword whole R15D brightmagenta

#AMD64 16-bit registers. 64-bit mode
    keyword whole %r8w brightmagenta
    keyword whole %r9w brightmagenta
    keyword whole %r10w brightmagenta
    keyword whole %r11w brightmagenta
    keyword whole %r12w brightmagenta
    keyword whole %r13w brightmagenta
    keyword whole %r14w brightmagenta
    keyword whole %r15w brightmagenta

    keyword whole R8W brightmagenta
    keyword whole R9W brightmagenta
    keyword whole R10W brightmagenta
    keyword whole R11W brightmagenta
    keyword whole R12W brightmagenta
    keyword whole R13W brightmagenta
    keyword whole R14W brightmagenta
    keyword whole R15W brightmagenta

#AMD64 8-bit registers. 64-bit mode
    keyword whole %sil brightmagenta
    keyword whole %dil brightmagenta
    keyword whole %bpl brightmagenta
    keyword whole %spl brightmagenta
    keyword whole %r8b brightmagenta
    keyword whole %r9b brightmagenta
    keyword whole %r10b brightmagenta
    keyword whole %r11b brightmagenta
    keyword whole %r12b brightmagenta
    keyword whole %r13b brightmagenta
    keyword whole %r14b brightmagenta
    keyword whole %r15b brightmagenta

    keyword whole SIL brightmagenta
    keyword whole DIL brightmagenta
    keyword whole BPL brightmagenta
    keyword whole SPL brightmagenta
    keyword whole R8B brightmagenta
    keyword whole R9B brightmagenta
    keyword whole R10B brightmagenta
    keyword whole R11B brightmagenta
    keyword whole R12B brightmagenta
    keyword whole R13B brightmagenta
    keyword whole R14B brightmagenta
    keyword whole R15B brightmagenta

#AMD64 System registers. 64-bit mode
    keyword whole CR8 magenta

#AMD64 SSE Registers. 64-bit mode
    keyword whole %xmm8 brightcyan
    keyword whole %xmm9 brightcyan
    keyword whole %xmm10 brightcyan
    keyword whole %xmm11 brightcyan
    keyword whole %xmm12 brightcyan
    keyword whole %xmm13 brightcyan
    keyword whole %xmm14 brightcyan
    keyword whole %xmm15 brightcyan

    keyword whole xmm8 brightcyan
    keyword whole xmm9 brightcyan
    keyword whole xmm10 brightcyan
    keyword whole xmm11 brightcyan
    keyword whole xmm12 brightcyan
    keyword whole xmm13 brightcyan
    keyword whole xmm14 brightcyan
    keyword whole xmm15 brightcyan

# FPU registers set
    keyword whole st0 brightcyan
    keyword whole st1 brightcyan
    keyword whole st2 brightcyan
    keyword whole st3 brightcyan
    keyword whole st4 brightcyan
    keyword whole st5 brightcyan
    keyword whole st6 brightcyan
    keyword whole st7 brightcyan
    keyword whole %st0 brightcyan
    keyword whole %st1 brightcyan
    keyword whole %st2 brightcyan
    keyword whole %st3 brightcyan
    keyword whole %st4 brightcyan
    keyword whole %st5 brightcyan
    keyword whole %st6 brightcyan
    keyword whole %st7 brightcyan

# MMX/3DNOW registers set
    keyword whole mm0 brightcyan
    keyword whole mm1 brightcyan
    keyword whole mm2 brightcyan
    keyword whole mm3 brightcyan
    keyword whole mm4 brightcyan
    keyword whole mm5 brightcyan
    keyword whole mm6 brightcyan
    keyword whole mm7 brightcyan
    keyword whole %mm0 brightcyan
    keyword whole %mm1 brightcyan
    keyword whole %mm2 brightcyan
    keyword whole %mm3 brightcyan
    keyword whole %mm4 brightcyan
    keyword whole %mm5 brightcyan
    keyword whole %mm6 brightcyan
    keyword whole %mm7 brightcyan

# SSE registers set
    keyword whole xmm0 brightcyan
    keyword whole xmm1 brightcyan
    keyword whole xmm2 brightcyan
    keyword whole xmm3 brightcyan
    keyword whole xmm4 brightcyan
    keyword whole xmm5 brightcyan
    keyword whole xmm6 brightcyan
    keyword whole xmm7 brightcyan
    keyword whole %xmm0 brightcyan
    keyword whole %xmm1 brightcyan
    keyword whole %xmm2 brightcyan
    keyword whole %xmm3 brightcyan
    keyword whole %xmm4 brightcyan
    keyword whole %xmm5 brightcyan
    keyword whole %xmm6 brightcyan
    keyword whole %xmm7 brightcyan

# Common symbols
    keyword ; brown
    keyword ! brown
    keyword /\* brown
    keyword \*/ brown
    keyword [ white
    keyword ] white
    keyword , white
    keyword \+ white
    keyword - white
    keyword . white
    keyword ( white
    keyword ) white
    keyword : white
    keyword @ white
    keyword >> white
    keyword << white
    keyword % white
    keyword \\ white
    keyword / white
    keyword // white
    keyword ~ white
    keyword ^ white
    keyword & white
    keyword \* white
    keyword | white
    keyword $ brightgreen
    keyword $$ brightgreen
    keyword %% cyan

context " " green
context ' ' brightgreen
context exclusive ; \n brown
    spellcheck

context exclusive /\* \*/ brown
    spellcheck

context exclusive ! \n brown
    spellcheck
