Merge branch 'vim-runtime'
[vim_mainline.git] / runtime / syntax / asm68k.vim
blob8463e487e14d2060bfe46e61b37ef29e327c48e9
1 " Vim syntax file
2 " Language:     Motorola 68000 Assembler
3 " Maintainer:   Steve Wall
4 " Last change:  2001 May 01
6 " This is incomplete.  In particular, support for 68020 and
7 " up and 68851/68881 co-processors is partial or non-existant.
8 " Feel free to contribute...
11 " For version 5.x: Clear all syntax items
12 " For version 6.x: Quit when a syntax file was already loaded
13 if version < 600
14   syntax clear
15 elseif exists("b:current_syntax")
16   finish
17 endif
19 syn case ignore
21 " Partial list of register symbols
22 syn keyword asm68kReg   a0 a1 a2 a3 a4 a5 a6 a7 d0 d1 d2 d3 d4 d5 d6 d7
23 syn keyword asm68kReg   pc sr ccr sp usp ssp
25 " MC68010
26 syn keyword asm68kReg   vbr sfc sfcr dfc dfcr
28 " MC68020
29 syn keyword asm68kReg   msp isp zpc cacr caar
30 syn keyword asm68kReg   za0 za1 za2 za3 za4 za5 za6 za7
31 syn keyword asm68kReg   zd0 zd1 zd2 zd3 zd4 zd5 zd6 zd7
33 " MC68030
34 syn keyword asm68kReg   crp srp tc ac0 ac1 acusr tt0 tt1 mmusr
36 " MC68040
37 syn keyword asm68kReg   dtt0 dtt1 itt0 itt1 urp
39 " MC68851 registers
40 syn keyword asm68kReg   cal val scc crp srp drp tc ac psr pcsr
41 syn keyword asm68kReg   bac0 bac1 bac2 bac3 bac4 bac5 bac6 bac7
42 syn keyword asm68kReg   bad0 bad1 bad2 bad3 bad4 bad5 bad6 bad7
44 " MC68881/82 registers
45 syn keyword asm68kReg   fp0 fp1 fp2 fp3 fp4 fp5 fp6 fp7
46 syn keyword asm68kReg   control status iaddr fpcr fpsr fpiar
48 " M68000 opcodes - order is important!
49 syn match asm68kOpcode "\<abcd\(\.b\)\=\s"
50 syn match asm68kOpcode "\<adda\(\.[wl]\)\=\s"
51 syn match asm68kOpcode "\<addi\(\.[bwl]\)\=\s"
52 syn match asm68kOpcode "\<addq\(\.[bwl]\)\=\s"
53 syn match asm68kOpcode "\<addx\(\.[bwl]\)\=\s"
54 syn match asm68kOpcode "\<add\(\.[bwl]\)\=\s"
55 syn match asm68kOpcode "\<andi\(\.[bwl]\)\=\s"
56 syn match asm68kOpcode "\<and\(\.[bwl]\)\=\s"
57 syn match asm68kOpcode "\<as[lr]\(\.[bwl]\)\=\s"
58 syn match asm68kOpcode "\<b[vc][cs]\(\.[bwls]\)\=\s"
59 syn match asm68kOpcode "\<beq\(\.[bwls]\)\=\s"
60 syn match asm68kOpcode "\<bg[et]\(\.[bwls]\)\=\s"
61 syn match asm68kOpcode "\<b[hm]i\(\.[bwls]\)\=\s"
62 syn match asm68kOpcode "\<bl[est]\(\.[bwls]\)\=\s"
63 syn match asm68kOpcode "\<bne\(\.[bwls]\)\=\s"
64 syn match asm68kOpcode "\<bpl\(\.[bwls]\)\=\s"
65 syn match asm68kOpcode "\<bchg\(\.[bl]\)\=\s"
66 syn match asm68kOpcode "\<bclr\(\.[bl]\)\=\s"
67 syn match asm68kOpcode "\<bfchg\s"
68 syn match asm68kOpcode "\<bfclr\s"
69 syn match asm68kOpcode "\<bfexts\s"
70 syn match asm68kOpcode "\<bfextu\s"
71 syn match asm68kOpcode "\<bfffo\s"
72 syn match asm68kOpcode "\<bfins\s"
73 syn match asm68kOpcode "\<bfset\s"
74 syn match asm68kOpcode "\<bftst\s"
75 syn match asm68kOpcode "\<bkpt\s"
76 syn match asm68kOpcode "\<bra\(\.[bwls]\)\=\s"
77 syn match asm68kOpcode "\<bset\(\.[bl]\)\=\s"
78 syn match asm68kOpcode "\<bsr\(\.[bwl]\)\=\s"
79 syn match asm68kOpcode "\<btst\(\.[bl]\)\=\s"
80 syn match asm68kOpcode "\<callm\s"
81 syn match asm68kOpcode "\<cas2\(\.[wl]\)\=\s"
82 syn match asm68kOpcode "\<cas\(\.[bwl]\)\=\s"
83 syn match asm68kOpcode "\<chk2\(\.[bwl]\)\=\s"
84 syn match asm68kOpcode "\<chk\(\.[wl]\)\=\s"
85 syn match asm68kOpcode "\<clr\(\.[bwl]\)\=\s"
86 syn match asm68kOpcode "\<cmpa\(\.[wl]\)\=\s"
87 syn match asm68kOpcode "\<cmpi\(\.[bwl]\)\=\s"
88 syn match asm68kOpcode "\<cmpm\(\.[bwl]\)\=\s"
89 syn match asm68kOpcode "\<cmp2\(\.[bwl]\)\=\s"
90 syn match asm68kOpcode "\<cmp\(\.[bwl]\)\=\s"
91 syn match asm68kOpcode "\<db[cv][cs]\(\.w\)\=\s"
92 syn match asm68kOpcode "\<dbeq\(\.w\)\=\s"
93 syn match asm68kOpcode "\<db[ft]\(\.w\)\=\s"
94 syn match asm68kOpcode "\<dbg[et]\(\.w\)\=\s"
95 syn match asm68kOpcode "\<db[hm]i\(\.w\)\=\s"
96 syn match asm68kOpcode "\<dbl[est]\(\.w\)\=\s"
97 syn match asm68kOpcode "\<dbne\(\.w\)\=\s"
98 syn match asm68kOpcode "\<dbpl\(\.w\)\=\s"
99 syn match asm68kOpcode "\<dbra\(\.w\)\=\s"
100 syn match asm68kOpcode "\<div[su]\(\.[wl]\)\=\s"
101 syn match asm68kOpcode "\<div[su]l\(\.l\)\=\s"
102 syn match asm68kOpcode "\<eori\(\.[bwl]\)\=\s"
103 syn match asm68kOpcode "\<eor\(\.[bwl]\)\=\s"
104 syn match asm68kOpcode "\<exg\(\.l\)\=\s"
105 syn match asm68kOpcode "\<extb\(\.l\)\=\s"
106 syn match asm68kOpcode "\<ext\(\.[wl]\)\=\s"
107 syn match asm68kOpcode "\<illegal\>"
108 syn match asm68kOpcode "\<jmp\(\.[ls]\)\=\s"
109 syn match asm68kOpcode "\<jsr\(\.[ls]\)\=\s"
110 syn match asm68kOpcode "\<lea\(\.l\)\=\s"
111 syn match asm68kOpcode "\<link\(\.[wl]\)\=\s"
112 syn match asm68kOpcode "\<ls[lr]\(\.[bwl]\)\=\s"
113 syn match asm68kOpcode "\<movea\(\.[wl]\)\=\s"
114 syn match asm68kOpcode "\<movec\(\.l\)\=\s"
115 syn match asm68kOpcode "\<movem\(\.[wl]\)\=\s"
116 syn match asm68kOpcode "\<movep\(\.[wl]\)\=\s"
117 syn match asm68kOpcode "\<moveq\(\.l\)\=\s"
118 syn match asm68kOpcode "\<moves\(\.[bwl]\)\=\s"
119 syn match asm68kOpcode "\<move\(\.[bwl]\)\=\s"
120 syn match asm68kOpcode "\<mul[su]\(\.[wl]\)\=\s"
121 syn match asm68kOpcode "\<nbcd\(\.b\)\=\s"
122 syn match asm68kOpcode "\<negx\(\.[bwl]\)\=\s"
123 syn match asm68kOpcode "\<neg\(\.[bwl]\)\=\s"
124 syn match asm68kOpcode "\<nop\>"
125 syn match asm68kOpcode "\<not\(\.[bwl]\)\=\s"
126 syn match asm68kOpcode "\<ori\(\.[bwl]\)\=\s"
127 syn match asm68kOpcode "\<or\(\.[bwl]\)\=\s"
128 syn match asm68kOpcode "\<pack\s"
129 syn match asm68kOpcode "\<pea\(\.l\)\=\s"
130 syn match asm68kOpcode "\<reset\>"
131 syn match asm68kOpcode "\<ro[lr]\(\.[bwl]\)\=\s"
132 syn match asm68kOpcode "\<rox[lr]\(\.[bwl]\)\=\s"
133 syn match asm68kOpcode "\<rt[dm]\s"
134 syn match asm68kOpcode "\<rt[ers]\>"
135 syn match asm68kOpcode "\<sbcd\(\.b\)\=\s"
136 syn match asm68kOpcode "\<s[cv][cs]\(\.b\)\=\s"
137 syn match asm68kOpcode "\<seq\(\.b\)\=\s"
138 syn match asm68kOpcode "\<s[ft]\(\.b\)\=\s"
139 syn match asm68kOpcode "\<sg[et]\(\.b\)\=\s"
140 syn match asm68kOpcode "\<s[hm]i\(\.b\)\=\s"
141 syn match asm68kOpcode "\<sl[est]\(\.b\)\=\s"
142 syn match asm68kOpcode "\<sne\(\.b\)\=\s"
143 syn match asm68kOpcode "\<spl\(\.b\)\=\s"
144 syn match asm68kOpcode "\<suba\(\.[wl]\)\=\s"
145 syn match asm68kOpcode "\<subi\(\.[bwl]\)\=\s"
146 syn match asm68kOpcode "\<subq\(\.[bwl]\)\=\s"
147 syn match asm68kOpcode "\<subx\(\.[bwl]\)\=\s"
148 syn match asm68kOpcode "\<sub\(\.[bwl]\)\=\s"
149 syn match asm68kOpcode "\<swap\(\.w\)\=\s"
150 syn match asm68kOpcode "\<tas\(\.b\)\=\s"
151 syn match asm68kOpcode "\<tdiv[su]\(\.l\)\=\s"
152 syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\(\.[wl]\)\=\s"
153 syn match asm68kOpcode "\<t\(rap\)\=eq\(\.[wl]\)\=\s"
154 syn match asm68kOpcode "\<t\(rap\)\=[ft]\(\.[wl]\)\=\s"
155 syn match asm68kOpcode "\<t\(rap\)\=g[et]\(\.[wl]\)\=\s"
156 syn match asm68kOpcode "\<t\(rap\)\=[hm]i\(\.[wl]\)\=\s"
157 syn match asm68kOpcode "\<t\(rap\)\=l[est]\(\.[wl]\)\=\s"
158 syn match asm68kOpcode "\<t\(rap\)\=ne\(\.[wl]\)\=\s"
159 syn match asm68kOpcode "\<t\(rap\)\=pl\(\.[wl]\)\=\s"
160 syn match asm68kOpcode "\<t\(rap\)\=v\>"
161 syn match asm68kOpcode "\<t\(rap\)\=[cv][cs]\>"
162 syn match asm68kOpcode "\<t\(rap\)\=eq\>"
163 syn match asm68kOpcode "\<t\(rap\)\=[ft]\>"
164 syn match asm68kOpcode "\<t\(rap\)\=g[et]\>"
165 syn match asm68kOpcode "\<t\(rap\)\=[hm]i\>"
166 syn match asm68kOpcode "\<t\(rap\)\=l[est]\>"
167 syn match asm68kOpcode "\<t\(rap\)\=ne\>"
168 syn match asm68kOpcode "\<t\(rap\)\=pl\>"
169 syn match asm68kOpcode "\<trap\s"
170 syn match asm68kOpcode "\<tst\(\.[bwl]\)\=\s"
171 syn match asm68kOpcode "\<unlk\s"
172 syn match asm68kOpcode "\<unpk\s"
174 " Valid labels
175 syn match asm68kLabel           "^[a-z_?.][a-z0-9_?.$]*$"
176 syn match asm68kLabel           "^[a-z_?.][a-z0-9_?.$]*\s"he=e-1
177 syn match asm68kLabel           "^\s*[a-z_?.][a-z0-9_?.$]*:"he=e-1
179 " Various number formats
180 syn match hexNumber             "\$[0-9a-fA-F]\+\>"
181 syn match hexNumber             "\<[0-9][0-9a-fA-F]*H\>"
182 syn match octNumber             "@[0-7]\+\>"
183 syn match octNumber             "\<[0-7]\+[QO]\>"
184 syn match binNumber             "%[01]\+\>"
185 syn match binNumber             "\<[01]\+B\>"
186 syn match decNumber             "\<[0-9]\+D\=\>"
187 syn match floatE                "_*E_*" contained
188 syn match floatExponent         "_*E_*[-+]\=[0-9]\+" contained contains=floatE
189 syn match floatNumber           "[-+]\=[0-9]\+_*E_*[-+]\=[0-9]\+" contains=floatExponent
190 syn match floatNumber           "[-+]\=[0-9]\+\.[0-9]\+\(E[-+]\=[0-9]\+\)\=" contains=floatExponent
191 syn match floatNumber           ":\([0-9a-f]\+_*\)\+"
193 " Character string constants
194 syn match asm68kStringError     "'[ -~]*'"
195 syn match asm68kStringError     "'[ -~]*$"
196 syn region asm68kString         start="'" skip="''" end="'" oneline contains=asm68kCharError
197 syn match asm68kCharError       "[^ -~]" contained
199 " Immediate data
200 syn match asm68kImmediate       "#\$[0-9a-fA-F]\+" contains=hexNumber
201 syn match asm68kImmediate       "#[0-9][0-9a-fA-F]*H" contains=hexNumber
202 syn match asm68kImmediate       "#@[0-7]\+" contains=octNumber
203 syn match asm68kImmediate       "#[0-7]\+[QO]" contains=octNumber
204 syn match asm68kImmediate       "#%[01]\+" contains=binNumber
205 syn match asm68kImmediate       "#[01]\+B" contains=binNumber
206 syn match asm68kImmediate       "#[0-9]\+D\=" contains=decNumber
207 syn match asm68kSymbol          "[a-z_?.][a-z0-9_?.$]*" contained
208 syn match asm68kImmediate       "#[a-z_?.][a-z0-9_?.]*" contains=asm68kSymbol
210 " Special items for comments
211 syn keyword asm68kTodo          contained TODO
213 " Operators
214 syn match asm68kOperator        "[-+*/]"        " Must occur before Comments
215 syn match asm68kOperator        "\.SIZEOF\."
216 syn match asm68kOperator        "\.STARTOF\."
217 syn match asm68kOperator        "<<"            " shift left
218 syn match asm68kOperator        ">>"            " shift right
219 syn match asm68kOperator        "&"             " bit-wise logical and
220 syn match asm68kOperator        "!"             " bit-wise logical or
221 syn match asm68kOperator        "!!"            " exclusive or
222 syn match asm68kOperator        "<>"            " inequality
223 syn match asm68kOperator        "="             " must be before other ops containing '='
224 syn match asm68kOperator        ">="
225 syn match asm68kOperator        "<="
226 syn match asm68kOperator        "=="            " operand existance - used in macro definitions
228 " Condition code style operators
229 syn match asm68kOperator        "<[CV][CS]>"
230 syn match asm68kOperator        "<EQ>"
231 syn match asm68kOperator        "<G[TE]>"
232 syn match asm68kOperator        "<[HM]I>"
233 syn match asm68kOperator        "<L[SET]>"
234 syn match asm68kOperator        "<NE>"
235 syn match asm68kOperator        "<PL>"
237 " Comments
238 syn match asm68kComment         ";.*" contains=asm68kTodo
239 syn match asm68kComment         "\s!.*"ms=s+1 contains=asm68kTodo
240 syn match asm68kComment         "^\s*[*!].*" contains=asm68kTodo
242 " Include
243 syn match asm68kInclude         "\<INCLUDE\s"
245 " Standard macros
246 syn match asm68kCond            "\<IF\(\.[BWL]\)\=\s"
247 syn match asm68kCond            "\<THEN\(\.[SL]\)\=\>"
248 syn match asm68kCond            "\<ELSE\(\.[SL]\)\=\>"
249 syn match asm68kCond            "\<ENDI\>"
250 syn match asm68kCond            "\<BREAK\(\.[SL]\)\=\>"
251 syn match asm68kRepeat          "\<FOR\(\.[BWL]\)\=\s"
252 syn match asm68kRepeat          "\<DOWNTO\s"
253 syn match asm68kRepeat          "\<TO\s"
254 syn match asm68kRepeat          "\<BY\s"
255 syn match asm68kRepeat          "\<DO\(\.[SL]\)\=\>"
256 syn match asm68kRepeat          "\<ENDF\>"
257 syn match asm68kRepeat          "\<NEXT\(\.[SL]\)\=\>"
258 syn match asm68kRepeat          "\<REPEAT\>"
259 syn match asm68kRepeat          "\<UNTIL\(\.[BWL]\)\=\s"
260 syn match asm68kRepeat          "\<WHILE\(\.[BWL]\)\=\s"
261 syn match asm68kRepeat          "\<ENDW\>"
263 " Macro definition
264 syn match asm68kMacro           "\<MACRO\>"
265 syn match asm68kMacro           "\<LOCAL\s"
266 syn match asm68kMacro           "\<MEXIT\>"
267 syn match asm68kMacro           "\<ENDM\>"
268 syn match asm68kMacroParam      "\\[0-9]"
270 " Conditional assembly
271 syn match asm68kPreCond         "\<IFC\s"
272 syn match asm68kPreCond         "\<IFDEF\s"
273 syn match asm68kPreCond         "\<IFEQ\s"
274 syn match asm68kPreCond         "\<IFGE\s"
275 syn match asm68kPreCond         "\<IFGT\s"
276 syn match asm68kPreCond         "\<IFLE\s"
277 syn match asm68kPreCond         "\<IFLT\s"
278 syn match asm68kPreCond         "\<IFNC\>"
279 syn match asm68kPreCond         "\<IFNDEF\s"
280 syn match asm68kPreCond         "\<IFNE\s"
281 syn match asm68kPreCond         "\<ELSEC\>"
282 syn match asm68kPreCond         "\<ENDC\>"
284 " Loop control
285 syn match asm68kPreCond         "\<REPT\s"
286 syn match asm68kPreCond         "\<IRP\s"
287 syn match asm68kPreCond         "\<IRPC\s"
288 syn match asm68kPreCond         "\<ENDR\>"
290 " Directives
291 syn match asm68kDirective       "\<ALIGN\s"
292 syn match asm68kDirective       "\<CHIP\s"
293 syn match asm68kDirective       "\<COMLINE\s"
294 syn match asm68kDirective       "\<COMMON\(\.S\)\=\s"
295 syn match asm68kDirective       "\<DC\(\.[BWLSDXP]\)\=\s"
296 syn match asm68kDirective       "\<DC\.\\[0-9]\s"me=e-3 " Special use in a macro def
297 syn match asm68kDirective       "\<DCB\(\.[BWLSDXP]\)\=\s"
298 syn match asm68kDirective       "\<DS\(\.[BWLSDXP]\)\=\s"
299 syn match asm68kDirective       "\<END\>"
300 syn match asm68kDirective       "\<EQU\s"
301 syn match asm68kDirective       "\<FEQU\(\.[SDXP]\)\=\s"
302 syn match asm68kDirective       "\<FAIL\>"
303 syn match asm68kDirective       "\<FOPT\s"
304 syn match asm68kDirective       "\<\(NO\)\=FORMAT\>"
305 syn match asm68kDirective       "\<IDNT\>"
306 syn match asm68kDirective       "\<\(NO\)\=LIST\>"
307 syn match asm68kDirective       "\<LLEN\s"
308 syn match asm68kDirective       "\<MASK2\>"
309 syn match asm68kDirective       "\<NAME\s"
310 syn match asm68kDirective       "\<NOOBJ\>"
311 syn match asm68kDirective       "\<OFFSET\s"
312 syn match asm68kDirective       "\<OPT\>"
313 syn match asm68kDirective       "\<ORG\(\.[SL]\)\=\>"
314 syn match asm68kDirective       "\<\(NO\)\=PAGE\>"
315 syn match asm68kDirective       "\<PLEN\s"
316 syn match asm68kDirective       "\<REG\s"
317 syn match asm68kDirective       "\<RESTORE\>"
318 syn match asm68kDirective       "\<SAVE\>"
319 syn match asm68kDirective       "\<SECT\(\.S\)\=\s"
320 syn match asm68kDirective       "\<SECTION\(\.S\)\=\s"
321 syn match asm68kDirective       "\<SET\s"
322 syn match asm68kDirective       "\<SPC\s"
323 syn match asm68kDirective       "\<TTL\s"
324 syn match asm68kDirective       "\<XCOM\s"
325 syn match asm68kDirective       "\<XDEF\s"
326 syn match asm68kDirective       "\<XREF\(\.S\)\=\s"
328 syn case match
330 " Define the default highlighting.
331 " For version 5.7 and earlier: only when not done already
332 " For version 5.8 and later: only when an item doesn't have highlighting yet
333 if version >= 508 || !exists("did_asm68k_syntax_inits")
334   if version < 508
335     let did_asm68k_syntax_inits = 1
336     command -nargs=+ HiLink hi link <args>
337   else
338     command -nargs=+ HiLink hi def link <args>
339   endif
341   " The default methods for highlighting.  Can be overridden later
342   " Comment Constant Error Identifier PreProc Special Statement Todo Type
343   "
344   " Constant            Boolean Character Number String
345   " Identifier          Function
346   " PreProc             Define Include Macro PreCondit
347   " Special             Debug Delimiter SpecialChar SpecialComment Tag
348   " Statement           Conditional Exception Keyword Label Operator Repeat
349   " Type                StorageClass Structure Typedef
351   HiLink asm68kComment          Comment
352   HiLink asm68kTodo             Todo
354   HiLink hexNumber              Number          " Constant
355   HiLink octNumber              Number          " Constant
356   HiLink binNumber              Number          " Constant
357   HiLink decNumber              Number          " Constant
358   HiLink floatNumber            Number          " Constant
359   HiLink floatExponent          Number          " Constant
360   HiLink floatE                 SpecialChar     " Statement
361   "HiLink floatE                Number          " Constant
363   HiLink asm68kImmediate        SpecialChar     " Statement
364   "HiLink asm68kSymbol          Constant
366   HiLink asm68kString           String          " Constant
367   HiLink asm68kCharError        Error
368   HiLink asm68kStringError      Error
370   HiLink asm68kReg              Identifier
371   HiLink asm68kOperator         Identifier
373   HiLink asm68kInclude          Include         " PreProc
374   HiLink asm68kMacro            Macro           " PreProc
375   HiLink asm68kMacroParam       Keyword         " Statement
377   HiLink asm68kDirective        Special
378   HiLink asm68kPreCond          Special
381   HiLink asm68kOpcode           Statement
382   HiLink asm68kCond             Conditional     " Statement
383   HiLink asm68kRepeat           Repeat          " Statement
385   HiLink asm68kLabel            Type
386   delcommand HiLink
387 endif
389 let b:current_syntax = "asm68k"
391 " vim: ts=8 sw=2