blob: e5f16c5bdc1ff519347a5d7894fd3d3c52c785f8 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: GNU Assembler
Bram Moolenaar555cdc22010-01-12 21:31:21 +01003" Maintainer: Erik Wognsen <erik.wognsen@gmail.com>
4" Previous maintainer:
5" Kevin Dahlhausen <kdahlhaus@yahoo.com>
Bram Moolenaar92dff182014-02-11 19:15:50 +01006" Last Change: 2014 Feb 04
Bram Moolenaar00a927d2010-05-14 23:24:24 +02007
8" Thanks to Ori Avtalion for feedback on the comment markers!
Bram Moolenaar071d4272004-06-13 20:20:40 +00009
10" For version 5.x: Clear all syntax items
Bram Moolenaar555cdc22010-01-12 21:31:21 +010011" For version 6.0 and later: Quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000012if version < 600
13 syntax clear
14elseif exists("b:current_syntax")
15 finish
16endif
17
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010018let s:cpo_save = &cpo
19set cpo&vim
20
Bram Moolenaar071d4272004-06-13 20:20:40 +000021syn case ignore
22
Bram Moolenaar071d4272004-06-13 20:20:40 +000023" storage types
24syn match asmType "\.long"
25syn match asmType "\.ascii"
26syn match asmType "\.asciz"
27syn match asmType "\.byte"
28syn match asmType "\.double"
29syn match asmType "\.float"
30syn match asmType "\.hword"
31syn match asmType "\.int"
32syn match asmType "\.octa"
33syn match asmType "\.quad"
34syn match asmType "\.short"
35syn match asmType "\.single"
36syn match asmType "\.space"
37syn match asmType "\.string"
38syn match asmType "\.word"
39
40syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1
41syn match asmIdentifier "[a-z_][a-z0-9_]*"
42
43" Various #'s as defined by GAS ref manual sec 3.6.2.1
44" Technically, the first decNumber def is actually octal,
45" since the value of 0-7 octal is the same as 0-7 decimal,
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010046" I (Kevin) prefer to map it as decimal:
Bram Moolenaar071d4272004-06-13 20:20:40 +000047syn match decNumber "0\+[1-7]\=[\t\n$,; ]"
48syn match decNumber "[1-9]\d*"
49syn match octNumber "0[0-7][0-7]\+"
50syn match hexNumber "0[xX][0-9a-fA-F]\+"
51syn match binNumber "0[bB][0-1]*"
52
Bram Moolenaar00a927d2010-05-14 23:24:24 +020053syn keyword asmTodo contained TODO
54
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010055
56" GAS supports one type of multi line comments:
Bram Moolenaar00a927d2010-05-14 23:24:24 +020057syn region asmComment start="/\*" end="\*/" contains=asmTodo
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010058
Bram Moolenaar53bfca22012-04-13 23:04:47 +020059" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
60" a backslash ending a C++ style comment does not extend the comment to the
61" next line (hence the syntax region does not define 'skip="\\$"')
62syn region asmComment start="//" end="$" keepend contains=asmTodo
63
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010064" Line comment characters depend on the target architecture and command line
65" options and some comments may double as logical line number directives or
66" preprocessor commands. This situation is described at
67" http://sourceware.org/binutils/docs-2.22/as/Comments.html
68" Some line comment characters have other meanings for other targets. For
69" example, .type directives may use the `@' character which is also an ARM
70" comment marker.
71" As a compromise to accommodate what I arbitrarily assume to be the most
72" frequently used features of the most popular architectures (and also the
73" non-GNU assembly languages that use this syntax file because their asm files
74" are also named *.asm), the following are used as line comment characters:
Bram Moolenaar00a927d2010-05-14 23:24:24 +020075syn match asmComment "[#;!|].*" contains=asmTodo
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010076
77" Side effects of this include:
78" - When `;' is used to separate statements on the same line (many targets
79" support this), all statements except the first get highlighted as
80" comments. As a remedy, remove `;' from the above.
81" - ARM comments are not highlighted correctly. For ARM, uncomment the
82" following two lines and comment the one above.
83"syn match asmComment "@.*" contains=asmTodo
84"syn match asmComment "^#.*" contains=asmTodo
85
86" Advanced users of specific architectures will probably want to change the
87" comment highlighting or use a specific, more comprehensive syntax file.
Bram Moolenaar071d4272004-06-13 20:20:40 +000088
89syn match asmInclude "\.include"
90syn match asmCond "\.if"
91syn match asmCond "\.else"
92syn match asmCond "\.endif"
93syn match asmMacro "\.macro"
94syn match asmMacro "\.endm"
95
Bram Moolenaar92dff182014-02-11 19:15:50 +010096" Assembler directives start with a '.' and may contain upper case (e.g.,
97" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in
98" CFI directives (e.g., .cfi_startproc). This will also match labels starting
99" with '.', including the GCC auto-generated '.L' labels.
100syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
102
103syn case match
104
105" Define the default highlighting.
106" For version 5.7 and earlier: only when not done already
107" For version 5.8 and later: only when an item doesn't have highlighting yet
108if version >= 508 || !exists("did_asm_syntax_inits")
109 if version < 508
110 let did_asm_syntax_inits = 1
111 command -nargs=+ HiLink hi link <args>
112 else
113 command -nargs=+ HiLink hi def link <args>
114 endif
115
116 " The default methods for highlighting. Can be overridden later
117 HiLink asmSection Special
118 HiLink asmLabel Label
119 HiLink asmComment Comment
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200120 HiLink asmTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 HiLink asmDirective Statement
122
123 HiLink asmInclude Include
124 HiLink asmCond PreCondit
125 HiLink asmMacro Macro
126
127 HiLink hexNumber Number
128 HiLink decNumber Number
129 HiLink octNumber Number
130 HiLink binNumber Number
131
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100132 HiLink asmIdentifier Identifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133 HiLink asmType Type
134
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135 delcommand HiLink
136endif
137
138let b:current_syntax = "asm"
139
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100140let &cpo = s:cpo_save
141unlet s:cpo_save
142
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143" vim: ts=8