1" Vim syntax file
2" Language:	GNU Assembler
3" Maintainer:	Erik Wognsen <erik.wognsen@gmail.com>
4"		Previous maintainer:
5"		Kevin Dahlhausen <kdahlhaus@yahoo.com>
6" Last Change:	2010 Apr 18
7
8" Thanks to Ori Avtalion for feedback on the comment markers!
9
10" For version 5.x: Clear all syntax items
11" For version 6.0 and later: Quit when a syntax file was already loaded
12if version < 600
13  syntax clear
14elseif exists("b:current_syntax")
15  finish
16endif
17
18syn case ignore
19
20" storage types
21syn match asmType "\.long"
22syn match asmType "\.ascii"
23syn match asmType "\.asciz"
24syn match asmType "\.byte"
25syn match asmType "\.double"
26syn match asmType "\.float"
27syn match asmType "\.hword"
28syn match asmType "\.int"
29syn match asmType "\.octa"
30syn match asmType "\.quad"
31syn match asmType "\.short"
32syn match asmType "\.single"
33syn match asmType "\.space"
34syn match asmType "\.string"
35syn match asmType "\.word"
36
37syn match asmLabel		"[a-z_][a-z0-9_]*:"he=e-1
38syn match asmIdentifier		"[a-z_][a-z0-9_]*"
39
40" Various #'s as defined by GAS ref manual sec 3.6.2.1
41" Technically, the first decNumber def is actually octal,
42" since the value of 0-7 octal is the same as 0-7 decimal,
43" I prefer to map it as decimal:
44syn match decNumber		"0\+[1-7]\=[\t\n$,; ]"
45syn match decNumber		"[1-9]\d*"
46syn match octNumber		"0[0-7][0-7]\+"
47syn match hexNumber		"0[xX][0-9a-fA-F]\+"
48syn match binNumber		"0[bB][0-1]*"
49
50syn keyword asmTodo		contained TODO
51
52" GAS supports various comment markers as described here:
53" http://sourceware.org/binutils/docs-2.19/as/Comments.html
54" I have commented out the ARM comment marker "@" by default as I think more
55" people are using "@" with the .type directive. See
56" http://sourceware.org/binutils/docs-2.19/as/Type.html
57syn region asmComment		start="/\*" end="\*/" contains=asmTodo
58syn match asmComment		"[#;!|].*" contains=asmTodo
59" syn match asmComment		"@.*" contains=asmTodo
60
61syn match asmInclude		"\.include"
62syn match asmCond		"\.if"
63syn match asmCond		"\.else"
64syn match asmCond		"\.endif"
65syn match asmMacro		"\.macro"
66syn match asmMacro		"\.endm"
67
68syn match asmDirective		"\.[a-z][a-z]\+"
69
70
71syn case match
72
73" Define the default highlighting.
74" For version 5.7 and earlier: only when not done already
75" For version 5.8 and later: only when an item doesn't have highlighting yet
76if version >= 508 || !exists("did_asm_syntax_inits")
77  if version < 508
78    let did_asm_syntax_inits = 1
79    command -nargs=+ HiLink hi link <args>
80  else
81    command -nargs=+ HiLink hi def link <args>
82  endif
83
84  " The default methods for highlighting.  Can be overridden later
85  HiLink asmSection	Special
86  HiLink asmLabel	Label
87  HiLink asmComment	Comment
88  HiLink asmTodo	Todo
89  HiLink asmDirective	Statement
90
91  HiLink asmInclude	Include
92  HiLink asmCond	PreCondit
93  HiLink asmMacro	Macro
94
95  HiLink hexNumber	Number
96  HiLink decNumber	Number
97  HiLink octNumber	Number
98  HiLink binNumber	Number
99
100  HiLink asmIdentifier Identifier
101  HiLink asmType	Type
102
103  delcommand HiLink
104endif
105
106let b:current_syntax = "asm"
107
108" vim: ts=8
109