Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 2 | " Language: IA-64 (Itanium) assembly language |
| 3 | " Maintainer: Doug Kearns <dougkearns@gmail.com> |
| 4 | " Previous Maintainer: Parth Malwankar <pmalwankar@yahoo.com> |
| 5 | " File Version: 0.8 |
| 6 | " Last Change: 2020 Sep 25 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 7 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 8 | " quit when a syntax file was already loaded |
| 9 | if exists("b:current_syntax") |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 10 | finish |
| 11 | endif |
| 12 | |
| 13 | |
| 14 | "ignore case for assembly |
| 15 | syn case ignore |
| 16 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 17 | syn sync minlines=5 |
| 18 | |
| 19 | " Read the MASM syntax to start with |
| 20 | " This is needed as both IA-64 as well as IA-32 instructions are supported |
| 21 | source <sfile>:p:h/masm.vim |
| 22 | |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 23 | " Identifier Keyword characters (defines \k) |
| 24 | syn iskeyword @,48-57,#,$,.,:,?,@-@,_,~ |
| 25 | |
| 26 | syn region ia64Comment start="//" end="$" contains=ia64Todo |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 27 | syn region ia64Comment start="/\*" end="\*/" contains=ia64Todo |
| 28 | |
| 29 | syn match ia64Identifier "[a-zA-Z_$][a-zA-Z0-9_$]*" |
| 30 | syn match ia64Directive "\.[a-zA-Z_$][a-zA-Z_$.]\+" |
| 31 | syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=:\>"he=e-1 |
| 32 | syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=::\>"he=e-2 |
| 33 | syn match ia64Label "[a-zA-Z_$.][a-zA-Z0-9_$.]*\s\=#\>"he=e-1 |
| 34 | syn region ia64string start=+L\="+ skip=+\\\\\|\\"+ end=+"+ |
| 35 | syn match ia64Octal "0[0-7_]*\>" |
| 36 | syn match ia64Binary "0[bB][01_]*\>" |
| 37 | syn match ia64Hex "0[xX][0-9a-fA-F_]*\>" |
| 38 | syn match ia64Decimal "[1-9_][0-9_]*\>" |
| 39 | syn match ia64Float "[0-9_]*\.[0-9_]*\([eE][+-]\=[0-9_]*\)\=\>" |
| 40 | |
| 41 | "simple instructions |
| 42 | syn keyword ia64opcode add adds addl addp4 alloc and andcm cover epc |
| 43 | syn keyword ia64opcode fabs fand fandcm fc flushrs fneg fnegabs for |
| 44 | syn keyword ia64opcode fpabs fpack fpneg fpnegabs fselect fand fabdcm |
| 45 | syn keyword ia64opcode fc fwb fxor loadrs movl mux1 mux2 or padd4 |
| 46 | syn keyword ia64opcode pavgsub1 pavgsub2 popcnt psad1 pshl2 pshl4 pshladd2 |
| 47 | syn keyword ia64opcode pshradd2 psub4 rfi rsm rum shl shladd shladdp4 |
| 48 | syn keyword ia64opcode shrp ssm sub sum sync.i tak thash |
| 49 | syn keyword ia64opcode tpa ttag xor |
| 50 | |
| 51 | "put to override these being recognized as floats. They are orignally from masm.vim |
| 52 | "put here to avoid confusion with float |
| 53 | syn match ia64Directive "\.186" |
| 54 | syn match ia64Directive "\.286" |
| 55 | syn match ia64Directive "\.286c" |
| 56 | syn match ia64Directive "\.286p" |
| 57 | syn match ia64Directive "\.287" |
| 58 | syn match ia64Directive "\.386" |
| 59 | syn match ia64Directive "\.386c" |
| 60 | syn match ia64Directive "\.386p" |
| 61 | syn match ia64Directive "\.387" |
| 62 | syn match ia64Directive "\.486" |
| 63 | syn match ia64Directive "\.486c" |
| 64 | syn match ia64Directive "\.486p" |
| 65 | syn match ia64Directive "\.8086" |
| 66 | syn match ia64Directive "\.8087" |
| 67 | |
| 68 | |
| 69 | |
| 70 | "delimiters |
| 71 | syn match ia64delimiter ";;" |
| 72 | |
| 73 | "operators |
| 74 | syn match ia64operators "[\[\]()#,]" |
| 75 | syn match ia64operators "\(+\|-\|=\)" |
| 76 | |
| 77 | "TODO |
| 78 | syn match ia64Todo "\(TODO\|XXX\|FIXME\|NOTE\)" |
| 79 | |
| 80 | "What follows is a long list of regular expressions for parsing the |
| 81 | "ia64 instructions that use many completers |
| 82 | |
| 83 | "br |
| 84 | syn match ia64opcode "br\(\(\.\(cond\|call\|ret\|ia\|cloop\|ctop\|cexit\|wtop\|wexit\)\)\=\(\.\(spnt\|dpnt\|sptk\|dptk\)\)\=\(\.few\|\.many\)\=\(\.clr\)\=\)\=\>" |
| 85 | "break |
| 86 | syn match ia64opcode "break\(\.[ibmfx]\)\=\>" |
| 87 | "brp |
| 88 | syn match ia64opcode "brp\(\.\(sptk\|dptk\|loop\|exit\)\)\(\.imp\)\=\>" |
| 89 | syn match ia64opcode "brp\.ret\(\.\(sptk\|dptk\)\)\{1}\(\.imp\)\=\>" |
| 90 | "bsw |
| 91 | syn match ia64opcode "bsw\.[01]\>" |
| 92 | "chk |
| 93 | syn match ia64opcode "chk\.\(s\(\.[im]\)\=\)\>" |
| 94 | syn match ia64opcode "chk\.a\.\(clr\|nc\)\>" |
| 95 | "clrrrb |
| 96 | syn match ia64opcode "clrrrb\(\.pr\)\=\>" |
| 97 | "cmp/cmp4 |
| 98 | syn match ia64opcode "cmp4\=\.\(eq\|ne\|l[te]\|g[te]\|[lg]tu\|[lg]eu\)\(\.unc\)\=\>" |
| 99 | syn match ia64opcode "cmp4\=\.\(eq\|[lgn]e\|[lg]t\)\.\(\(or\(\.andcm\|cm\)\=\)\|\(and\(\(\.or\)\=cm\)\=\)\)\>" |
| 100 | "cmpxchg |
| 101 | syn match ia64opcode "cmpxchg[1248]\.\(acq\|rel\)\(\.nt1\|\.nta\)\=\>" |
| 102 | "czx |
| 103 | syn match ia64opcode "czx[12]\.[lr]\>" |
| 104 | "dep |
| 105 | syn match ia64opcode "dep\(\.z\)\=\>" |
| 106 | "extr |
| 107 | syn match ia64opcode "extr\(\.u\)\=\>" |
| 108 | "fadd |
| 109 | syn match ia64opcode "fadd\(\.[sd]\)\=\(\.s[0-3]\)\=\>" |
| 110 | "famax/famin |
| 111 | syn match ia64opcode "fa\(max\|min\)\(\.s[0-3]\)\=\>" |
| 112 | "fchkf/fmax/fmin |
| 113 | syn match ia64opcode "f\(chkf\|max\|min\)\(\.s[0-3]\)\=\>" |
| 114 | "fclass |
| 115 | syn match ia64opcode "fclass\(\.n\=m\)\(\.unc\)\=\>" |
| 116 | "fclrf/fpamax |
| 117 | syn match ia64opcode "f\(clrf\|pamax\|pamin\)\(\.s[0-3]\)\=\>" |
| 118 | "fcmp |
| 119 | syn match ia64opcode "fcmp\.\(n\=[lg][te]\|n\=eq\|\(un\)\=ord\)\(\.unc\)\=\(\.s[0-3]\)\=\>" |
| 120 | "fcvt/fcvt.xf/fcvt.xuf.pc.sf |
| 121 | syn match ia64opcode "fcvt\.\(\(fxu\=\(\.trunc\)\=\(\.s[0-3]\)\=\)\|\(xf\|xuf\(\.[sd]\)\=\(\.s[0-3]\)\=\)\)\>" |
| 122 | "fetchadd |
| 123 | syn match ia64opcode "fetchadd[48]\.\(acq\|rel\)\(\.nt1\|\.nta\)\=\>" |
| 124 | "fma/fmpy/fms |
| 125 | syn match ia64opcode "fm\([as]\|py\)\(\.[sd]\)\=\(\.s[0-3]\)\=\>" |
| 126 | "fmerge/fpmerge |
| 127 | syn match ia64opcode "fp\=merge\.\(ns\|se\=\)\>" |
| 128 | "fmix |
| 129 | syn match ia64opcode "fmix\.\(lr\|[lr]\)\>" |
| 130 | "fnma/fnorm/fnmpy |
| 131 | syn match ia64opcode "fn\(ma\|mpy\|orm\)\(\.[sd]\)\=\(\.s[0-3]\)\=\>" |
| 132 | "fpcmp |
| 133 | syn match ia64opcode "fpcmp\.\(n\=[lg][te]\|n\=eq\|\(un\)\=ord\)\(\.s[0-3]\)\=\>" |
| 134 | "fpcvt |
| 135 | syn match ia64opcode "fpcvt\.fxu\=\(\(\.trunc\)\=\(\.s[0-3]\)\=\)\>" |
| 136 | "fpma/fpmax/fpmin/fpmpy/fpms/fpnma/fpnmpy/fprcpa/fpsqrta |
| 137 | syn match ia64opcode "fp\(max\=\|min\|n\=mpy\|ms\|nma\|rcpa\|sqrta\)\(\.s[0-3]\)\=\>" |
| 138 | "frcpa/frsqrta |
| 139 | syn match ia64opcode "fr\(cpa\|sqrta\)\(\.s[0-3]\)\=\>" |
| 140 | "fsetc/famin/fchkf |
| 141 | syn match ia64opcode "f\(setc\|amin\|chkf\)\(\.s[0-3]\)\=\>" |
| 142 | "fsub |
| 143 | syn match ia64opcode "fsub\(\.[sd]\)\=\(\.s[0-3]\)\=\>" |
| 144 | "fswap |
| 145 | syn match ia64opcode "fswap\(\.n[lr]\=\)\=\>" |
| 146 | "fsxt |
| 147 | syn match ia64opcode "fsxt\.[lr]\>" |
| 148 | "getf |
| 149 | syn match ia64opcode "getf\.\([sd]\|exp\|sig\)\>" |
| 150 | "invala |
| 151 | syn match ia64opcode "invala\(\.[ae]\)\=\>" |
| 152 | "itc/itr |
| 153 | syn match ia64opcode "it[cr]\.[id]\>" |
| 154 | "ld |
| 155 | syn match ia64opcode "ld[1248]\>\|ld[1248]\(\.\(sa\=\|a\|c\.\(nc\|clr\(\.acq\)\=\)\|acq\|bias\)\)\=\(\.nt[1a]\)\=\>" |
| 156 | syn match ia64opcode "ld8\.fill\(\.nt[1a]\)\=\>" |
| 157 | "ldf |
| 158 | syn match ia64opcode "ldf[sde8]\(\(\.\(sa\=\|a\|c\.\(nc\|clr\)\)\)\=\(\.nt[1a]\)\=\)\=\>" |
| 159 | syn match ia64opcode "ldf\.fill\(\.nt[1a]\)\=\>" |
| 160 | "ldfp |
| 161 | syn match ia64opcode "ldfp[sd8]\(\(\.\(sa\=\|a\|c\.\(nc\|clr\)\)\)\=\(\.nt[1a]\)\=\)\=\>" |
| 162 | "lfetch |
| 163 | syn match ia64opcode "lfetch\(\.fault\(\.excl\)\=\|\.excl\)\=\(\.nt[12a]\)\=\>" |
| 164 | "mf |
| 165 | syn match ia64opcode "mf\(\.a\)\=\>" |
| 166 | "mix |
| 167 | syn match ia64opcode "mix[124]\.[lr]\>" |
| 168 | "mov |
| 169 | syn match ia64opcode "mov\(\.[im]\)\=\>" |
| 170 | syn match ia64opcode "mov\(\.ret\)\=\(\(\.sptk\|\.dptk\)\=\(\.imp\)\=\)\=\>" |
| 171 | "nop |
| 172 | syn match ia64opcode "nop\(\.[ibmfx]\)\=\>" |
| 173 | "pack |
| 174 | syn match ia64opcode "pack\(2\.[su]ss\|4\.sss\)\>" |
| 175 | "padd //padd4 added to keywords |
| 176 | syn match ia64opcode "padd[12]\(\.\(sss\|uus\|uuu\)\)\=\>" |
| 177 | "pavg |
| 178 | syn match ia64opcode "pavg[12]\(\.raz\)\=\>" |
| 179 | "pcmp |
| 180 | syn match ia64opcode "pcmp[124]\.\(eq\|gt\)\>" |
| 181 | "pmax/pmin |
| 182 | syn match ia64opcode "pm\(ax\|in\)\(\(1\.u\)\|2\)\>" |
| 183 | "pmpy |
| 184 | syn match ia64opcode "pmpy2\.[rl]\>" |
| 185 | "pmpyshr |
| 186 | syn match ia64opcode "pmpyshr2\(\.u\)\=\>" |
| 187 | "probe |
| 188 | syn match ia64opcode "probe\.[rw]\>" |
| 189 | syn match ia64opcode "probe\.\(\(r\|w\|rw\)\.fault\)\>" |
| 190 | "pshr |
| 191 | syn match ia64opcode "pshr[24]\(\.u\)\=\>" |
| 192 | "psub |
| 193 | syn match ia64opcode "psub[12]\(\.\(sss\|uu[su]\)\)\=\>" |
| 194 | "ptc |
| 195 | syn match ia64opcode "ptc\.\(l\|e\|ga\=\)\>" |
| 196 | "ptr |
| 197 | syn match ia64opcode "ptr\.\(d\|i\)\>" |
| 198 | "setf |
| 199 | syn match ia64opcode "setf\.\(s\|d\|exp\|sig\)\>" |
| 200 | "shr |
| 201 | syn match ia64opcode "shr\(\.u\)\=\>" |
| 202 | "srlz |
| 203 | syn match ia64opcode "srlz\(\.[id]\)\>" |
| 204 | "st |
| 205 | syn match ia64opcode "st[1248]\(\.rel\)\=\(\.nta\)\=\>" |
| 206 | syn match ia64opcode "st8\.spill\(\.nta\)\=\>" |
| 207 | "stf |
| 208 | syn match ia64opcode "stf[1248]\(\.nta\)\=\>" |
| 209 | syn match ia64opcode "stf\.spill\(\.nta\)\=\>" |
| 210 | "sxt |
| 211 | syn match ia64opcode "sxt[124]\>" |
| 212 | "tbit/tnat |
| 213 | syn match ia64opcode "t\(bit\|nat\)\(\.nz\|\.z\)\=\(\.\(unc\|or\(\.andcm\|cm\)\=\|and\(\.orcm\|cm\)\=\)\)\=\>" |
| 214 | "unpack |
| 215 | syn match ia64opcode "unpack[124]\.[lh]\>" |
| 216 | "xchq |
| 217 | syn match ia64opcode "xchg[1248]\(\.nt[1a]\)\=\>" |
| 218 | "xma/xmpy |
| 219 | syn match ia64opcode "xm\(a\|py\)\.[lh]u\=\>" |
| 220 | "zxt |
| 221 | syn match ia64opcode "zxt[124]\>" |
| 222 | |
| 223 | |
| 224 | "The regex for different ia64 registers are given below |
| 225 | |
| 226 | "limits the rXXX and fXXX and cr suffix in the range 0-127 |
| 227 | syn match ia64registers "\([fr]\|cr\)\([0-9]\|[1-9][0-9]\|1[0-1][0-9]\|12[0-7]\)\{1}\>" |
| 228 | "branch ia64registers |
| 229 | syn match ia64registers "b[0-7]\>" |
| 230 | "predicate ia64registers |
| 231 | syn match ia64registers "p\([0-9]\|[1-5][0-9]\|6[0-3]\)\>" |
| 232 | "application ia64registers |
| 233 | syn match ia64registers "ar\.\(fpsr\|mat\|unat\|rnat\|pfs\|bsp\|bspstore\|rsc\|lc\|ec\|ccv\|itc\|k[0-7]\)\>" |
| 234 | "ia32 AR's |
| 235 | syn match ia64registers "ar\.\(eflag\|fcr\|csd\|ssd\|cflg\|fsr\|fir\|fdr\)\>" |
| 236 | "sp/gp/pr/pr.rot/rp |
| 237 | syn keyword ia64registers sp gp pr pr.rot rp ip tp |
| 238 | "in/out/local |
| 239 | syn match ia64registers "\(in\|out\|loc\)\([0-9]\|[1-8][0-9]\|9[0-5]\)\>" |
| 240 | "argument ia64registers |
| 241 | syn match ia64registers "farg[0-7]\>" |
| 242 | "return value ia64registers |
| 243 | syn match ia64registers "fret[0-7]\>" |
| 244 | "psr |
| 245 | syn match ia64registers "psr\(\.\(l\|um\)\)\=\>" |
| 246 | "cr |
| 247 | syn match ia64registers "cr\.\(dcr\|itm\|iva\|pta\|ipsr\|isr\|ifa\|iip\|itir\|iipa\|ifs\|iim\|iha\|lid\|ivr\|tpr\|eoi\|irr[0-3]\|itv\|pmv\|lrr[01]\|cmcv\)\>" |
| 248 | "Indirect registers |
| 249 | syn match ia64registers "\(cpuid\|dbr\|ibr\|pkr\|pmc\|pmd\|rr\|itr\|dtr\)\>" |
| 250 | "MUX permutations for 8-bit elements |
| 251 | syn match ia64registers "\(@rev\|@mix\|@shuf\|@alt\|@brcst\)\>" |
| 252 | "floating point classes |
| 253 | syn match ia64registers "\(@nat\|@qnan\|@snan\|@pos\|@neg\|@zero\|@unorm\|@norm\|@inf\)\>" |
| 254 | "link relocation operators |
| 255 | syn match ia64registers "\(@\(\(\(gp\|sec\|seg\|image\)rel\)\|ltoff\|fptr\|ptloff\|ltv\|section\)\)\>" |
| 256 | |
| 257 | "Data allocation syntax |
| 258 | syn match ia64data "data[1248]\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>" |
| 259 | syn match ia64data "real\([48]\|1[06]\)\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>" |
| 260 | syn match ia64data "stringz\=\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.lsb\)\=\(\.ua\)\=\)\)\=\>" |
| 261 | |
| 262 | " Define the default highlighting. |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 263 | " Only when an item doesn't have highlighting yet |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 264 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 265 | "put masm groups with our groups |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 266 | hi def link masmOperator ia64operator |
| 267 | hi def link masmDirective ia64Directive |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 268 | hi def link masmOpcode ia64Opcode |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 269 | hi def link masmIdentifier ia64Identifier |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 270 | hi def link masmFloat ia64Float |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 271 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 272 | "ia64 specific stuff |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 273 | hi def link ia64Label Define |
| 274 | hi def link ia64Comment Comment |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 275 | hi def link ia64Directive Type |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 276 | hi def link ia64opcode Statement |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 277 | hi def link ia64registers Operator |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 278 | hi def link ia64string String |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 279 | hi def link ia64Hex Number |
Bram Moolenaar | 4f4d51a | 2020-10-11 13:57:40 +0200 | [diff] [blame] | 280 | hi def link ia64Binary Number |
| 281 | hi def link ia64Octal Number |
| 282 | hi def link ia64Float Float |
| 283 | hi def link ia64Decimal Number |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 284 | hi def link ia64Identifier Identifier |
| 285 | hi def link ia64data Type |
| 286 | hi def link ia64delimiter Delimiter |
| 287 | hi def link ia64operator Operator |
| 288 | hi def link ia64Todo Todo |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 289 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 290 | |
| 291 | let b:current_syntax = "ia64" |
| 292 | |
| 293 | " vim: ts=8 sw=2 |