github.com/rsc/go@v0.0.0-20150416155037-e040fd465409/src/cmd/old8a/lex.go (about) 1 // Inferno utils/8a/lex.c 2 // http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c 3 // 4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. 5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) 6 // Portions Copyright © 1997-1999 Vita Nuova Limited 7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) 8 // Portions Copyright © 2004,2006 Bruce Ellis 9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) 10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others 11 // Portions Copyright © 2009 The Go Authors. All rights reserved. 12 // 13 // Permission is hereby granted, free of charge, to any person obtaining a copy 14 // of this software and associated documentation files (the "Software"), to deal 15 // in the Software without restriction, including without limitation the rights 16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 // copies of the Software, and to permit persons to whom the Software is 18 // furnished to do so, subject to the following conditions: 19 // 20 // The above copyright notice and this permission notice shall be included in 21 // all copies or substantial portions of the Software. 22 // 23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 // THE SOFTWARE. 30 31 //go:generate go tool yacc a.y 32 33 package main 34 35 import ( 36 "cmd/internal/asm" 37 "cmd/internal/obj" 38 "cmd/internal/obj/x86" 39 ) 40 41 var ( 42 yyerror = asm.Yyerror 43 nullgen obj.Addr 44 stmtline int32 45 ) 46 47 func main() { 48 cinit() 49 50 asm.LSCONST = LSCONST 51 asm.LCONST = LCONST 52 asm.LFCONST = LFCONST 53 asm.LNAME = LNAME 54 asm.LVAR = LVAR 55 asm.LLAB = LLAB 56 57 asm.Lexinit = lexinit 58 asm.Cclean = cclean 59 asm.Yyparse = yyparse 60 61 asm.Thechar = '8' 62 asm.Thestring = "386" 63 asm.Thelinkarch = &x86.Link386 64 65 asm.Main() 66 } 67 68 type yy struct{} 69 70 func (yy) Lex(v *yySymType) int { 71 var av asm.Yylval 72 tok := asm.Yylex(&av) 73 v.sym = av.Sym 74 v.lval = av.Lval 75 v.sval = av.Sval 76 v.dval = av.Dval 77 return tok 78 } 79 80 func (yy) Error(msg string) { 81 asm.Yyerror("%s", msg) 82 } 83 84 func yyparse() { 85 yyParse(yy{}) 86 } 87 88 var lexinit = []asm.Lextab{ 89 {"SP", LSP, obj.NAME_AUTO}, 90 {"SB", LSB, obj.NAME_EXTERN}, 91 {"FP", LFP, obj.NAME_PARAM}, 92 {"PC", LPC, obj.TYPE_BRANCH}, 93 {"AL", LBREG, x86.REG_AL}, 94 {"CL", LBREG, x86.REG_CL}, 95 {"DL", LBREG, x86.REG_DL}, 96 {"BL", LBREG, x86.REG_BL}, 97 {"AH", LBREG, x86.REG_AH}, 98 {"CH", LBREG, x86.REG_CH}, 99 {"DH", LBREG, x86.REG_DH}, 100 {"BH", LBREG, x86.REG_BH}, 101 {"AX", LLREG, x86.REG_AX}, 102 {"CX", LLREG, x86.REG_CX}, 103 {"DX", LLREG, x86.REG_DX}, 104 {"BX", LLREG, x86.REG_BX}, 105 /* "SP", LLREG, REG_SP, */ 106 {"BP", LLREG, x86.REG_BP}, 107 {"SI", LLREG, x86.REG_SI}, 108 {"DI", LLREG, x86.REG_DI}, 109 {"F0", LFREG, x86.REG_F0 + 0}, 110 {"F1", LFREG, x86.REG_F0 + 1}, 111 {"F2", LFREG, x86.REG_F0 + 2}, 112 {"F3", LFREG, x86.REG_F0 + 3}, 113 {"F4", LFREG, x86.REG_F0 + 4}, 114 {"F5", LFREG, x86.REG_F0 + 5}, 115 {"F6", LFREG, x86.REG_F0 + 6}, 116 {"F7", LFREG, x86.REG_F0 + 7}, 117 {"X0", LXREG, x86.REG_X0 + 0}, 118 {"X1", LXREG, x86.REG_X0 + 1}, 119 {"X2", LXREG, x86.REG_X0 + 2}, 120 {"X3", LXREG, x86.REG_X0 + 3}, 121 {"X4", LXREG, x86.REG_X0 + 4}, 122 {"X5", LXREG, x86.REG_X0 + 5}, 123 {"X6", LXREG, x86.REG_X0 + 6}, 124 {"X7", LXREG, x86.REG_X0 + 7}, 125 {"CS", LSREG, x86.REG_CS}, 126 {"SS", LSREG, x86.REG_SS}, 127 {"DS", LSREG, x86.REG_DS}, 128 {"ES", LSREG, x86.REG_ES}, 129 {"FS", LSREG, x86.REG_FS}, 130 {"GS", LSREG, x86.REG_GS}, 131 {"TLS", LSREG, x86.REG_TLS}, 132 {"GDTR", LBREG, x86.REG_GDTR}, 133 {"IDTR", LBREG, x86.REG_IDTR}, 134 {"LDTR", LBREG, x86.REG_LDTR}, 135 {"MSW", LBREG, x86.REG_MSW}, 136 {"TASK", LBREG, x86.REG_TASK}, 137 {"CR0", LBREG, x86.REG_CR + 0}, 138 {"CR1", LBREG, x86.REG_CR + 1}, 139 {"CR2", LBREG, x86.REG_CR + 2}, 140 {"CR3", LBREG, x86.REG_CR + 3}, 141 {"CR4", LBREG, x86.REG_CR + 4}, 142 {"CR5", LBREG, x86.REG_CR + 5}, 143 {"CR6", LBREG, x86.REG_CR + 6}, 144 {"CR7", LBREG, x86.REG_CR + 7}, 145 {"DR0", LBREG, x86.REG_DR + 0}, 146 {"DR1", LBREG, x86.REG_DR + 1}, 147 {"DR2", LBREG, x86.REG_DR + 2}, 148 {"DR3", LBREG, x86.REG_DR + 3}, 149 {"DR4", LBREG, x86.REG_DR + 4}, 150 {"DR5", LBREG, x86.REG_DR + 5}, 151 {"DR6", LBREG, x86.REG_DR + 6}, 152 {"DR7", LBREG, x86.REG_DR + 7}, 153 {"TR0", LBREG, x86.REG_TR + 0}, 154 {"TR1", LBREG, x86.REG_TR + 1}, 155 {"TR2", LBREG, x86.REG_TR + 2}, 156 {"TR3", LBREG, x86.REG_TR + 3}, 157 {"TR4", LBREG, x86.REG_TR + 4}, 158 {"TR5", LBREG, x86.REG_TR + 5}, 159 {"TR6", LBREG, x86.REG_TR + 6}, 160 {"TR7", LBREG, x86.REG_TR + 7}, 161 {"AAA", LTYPE0, x86.AAAA}, 162 {"AAD", LTYPE0, x86.AAAD}, 163 {"AAM", LTYPE0, x86.AAAM}, 164 {"AAS", LTYPE0, x86.AAAS}, 165 {"ADCB", LTYPE3, x86.AADCB}, 166 {"ADCL", LTYPE3, x86.AADCL}, 167 {"ADCW", LTYPE3, x86.AADCW}, 168 {"ADDB", LTYPE3, x86.AADDB}, 169 {"ADDL", LTYPE3, x86.AADDL}, 170 {"ADDW", LTYPE3, x86.AADDW}, 171 {"ADJSP", LTYPE2, x86.AADJSP}, 172 {"ANDB", LTYPE3, x86.AANDB}, 173 {"ANDL", LTYPE3, x86.AANDL}, 174 {"ANDW", LTYPE3, x86.AANDW}, 175 {"ARPL", LTYPE3, x86.AARPL}, 176 {"BOUNDL", LTYPE3, x86.ABOUNDL}, 177 {"BOUNDW", LTYPE3, x86.ABOUNDW}, 178 {"BSFL", LTYPE3, x86.ABSFL}, 179 {"BSFW", LTYPE3, x86.ABSFW}, 180 {"BSRL", LTYPE3, x86.ABSRL}, 181 {"BSRW", LTYPE3, x86.ABSRW}, 182 {"BSWAPL", LTYPE1, x86.ABSWAPL}, 183 {"BTCL", LTYPE3, x86.ABTCL}, 184 {"BTCW", LTYPE3, x86.ABTCW}, 185 {"BTL", LTYPE3, x86.ABTL}, 186 {"BTRL", LTYPE3, x86.ABTRL}, 187 {"BTRW", LTYPE3, x86.ABTRW}, 188 {"BTSL", LTYPE3, x86.ABTSL}, 189 {"BTSW", LTYPE3, x86.ABTSW}, 190 {"BTW", LTYPE3, x86.ABTW}, 191 {"BYTE", LTYPE2, x86.ABYTE}, 192 {"CALL", LTYPEC, obj.ACALL}, 193 {"CLC", LTYPE0, x86.ACLC}, 194 {"CLD", LTYPE0, x86.ACLD}, 195 {"CLI", LTYPE0, x86.ACLI}, 196 {"CLTS", LTYPE0, x86.ACLTS}, 197 {"CMC", LTYPE0, x86.ACMC}, 198 {"CMPB", LTYPE4, x86.ACMPB}, 199 {"CMPL", LTYPE4, x86.ACMPL}, 200 {"CMPW", LTYPE4, x86.ACMPW}, 201 {"CMPSB", LTYPE0, x86.ACMPSB}, 202 {"CMPSL", LTYPE0, x86.ACMPSL}, 203 {"CMPSW", LTYPE0, x86.ACMPSW}, 204 {"CMPXCHG8B", LTYPE1, x86.ACMPXCHG8B}, 205 {"CMPXCHGB", LTYPE3, x86.ACMPXCHGB}, 206 {"CMPXCHGL", LTYPE3, x86.ACMPXCHGL}, 207 {"CMPXCHGW", LTYPE3, x86.ACMPXCHGW}, 208 {"CPUID", LTYPE0, x86.ACPUID}, 209 {"DAA", LTYPE0, x86.ADAA}, 210 {"DAS", LTYPE0, x86.ADAS}, 211 {"DATA", LTYPED, obj.ADATA}, 212 {"DECB", LTYPE1, x86.ADECB}, 213 {"DECL", LTYPE1, x86.ADECL}, 214 {"DECW", LTYPE1, x86.ADECW}, 215 {"DIVB", LTYPE2, x86.ADIVB}, 216 {"DIVL", LTYPE2, x86.ADIVL}, 217 {"DIVW", LTYPE2, x86.ADIVW}, 218 {"END", LTYPE0, obj.AEND}, 219 {"ENTER", LTYPE2, x86.AENTER}, 220 {"GLOBL", LTYPEG, obj.AGLOBL}, 221 {"HLT", LTYPE0, x86.AHLT}, 222 {"IDIVB", LTYPE2, x86.AIDIVB}, 223 {"IDIVL", LTYPE2, x86.AIDIVL}, 224 {"IDIVW", LTYPE2, x86.AIDIVW}, 225 {"IMULB", LTYPE2, x86.AIMULB}, 226 {"IMULL", LTYPEI, x86.AIMULL}, 227 {"IMULW", LTYPEI, x86.AIMULW}, 228 {"INB", LTYPE0, x86.AINB}, 229 {"INL", LTYPE0, x86.AINL}, 230 {"INW", LTYPE0, x86.AINW}, 231 {"INCB", LTYPE1, x86.AINCB}, 232 {"INCL", LTYPE1, x86.AINCL}, 233 {"INCW", LTYPE1, x86.AINCW}, 234 {"INSB", LTYPE0, x86.AINSB}, 235 {"INSL", LTYPE0, x86.AINSL}, 236 {"INSW", LTYPE0, x86.AINSW}, 237 {"INT", LTYPE2, x86.AINT}, 238 {"INTO", LTYPE0, x86.AINTO}, 239 {"IRETL", LTYPE0, x86.AIRETL}, 240 {"IRETW", LTYPE0, x86.AIRETW}, 241 {"JOS", LTYPER, x86.AJOS}, /* overflow set (OF = 1) */ 242 {"JO", LTYPER, x86.AJOS}, /* alternate */ 243 {"JOC", LTYPER, x86.AJOC}, /* overflow clear (OF = 0) */ 244 {"JNO", LTYPER, x86.AJOC}, /* alternate */ 245 {"JCS", LTYPER, x86.AJCS}, /* carry set (CF = 1) */ 246 {"JB", LTYPER, x86.AJCS}, /* alternate */ 247 {"JC", LTYPER, x86.AJCS}, /* alternate */ 248 {"JNAE", LTYPER, x86.AJCS}, /* alternate */ 249 {"JLO", LTYPER, x86.AJCS}, /* alternate */ 250 {"JCC", LTYPER, x86.AJCC}, /* carry clear (CF = 0) */ 251 {"JAE", LTYPER, x86.AJCC}, /* alternate */ 252 {"JNB", LTYPER, x86.AJCC}, /* alternate */ 253 {"JNC", LTYPER, x86.AJCC}, /* alternate */ 254 {"JHS", LTYPER, x86.AJCC}, /* alternate */ 255 {"JEQ", LTYPER, x86.AJEQ}, /* equal (ZF = 1) */ 256 {"JE", LTYPER, x86.AJEQ}, /* alternate */ 257 {"JZ", LTYPER, x86.AJEQ}, /* alternate */ 258 {"JNE", LTYPER, x86.AJNE}, /* not equal (ZF = 0) */ 259 {"JNZ", LTYPER, x86.AJNE}, /* alternate */ 260 {"JLS", LTYPER, x86.AJLS}, /* lower or same (unsigned) (CF = 1 || ZF = 1) */ 261 {"JBE", LTYPER, x86.AJLS}, /* alternate */ 262 {"JNA", LTYPER, x86.AJLS}, /* alternate */ 263 {"JHI", LTYPER, x86.AJHI}, /* higher (unsigned) (CF = 0 && ZF = 0) */ 264 {"JA", LTYPER, x86.AJHI}, /* alternate */ 265 {"JNBE", LTYPER, x86.AJHI}, /* alternate */ 266 {"JMI", LTYPER, x86.AJMI}, /* negative (minus) (SF = 1) */ 267 {"JS", LTYPER, x86.AJMI}, /* alternate */ 268 {"JPL", LTYPER, x86.AJPL}, /* non-negative (plus) (SF = 0) */ 269 {"JNS", LTYPER, x86.AJPL}, /* alternate */ 270 {"JPS", LTYPER, x86.AJPS}, /* parity set (PF = 1) */ 271 {"JP", LTYPER, x86.AJPS}, /* alternate */ 272 {"JPE", LTYPER, x86.AJPS}, /* alternate */ 273 {"JPC", LTYPER, x86.AJPC}, /* parity clear (PF = 0) */ 274 {"JNP", LTYPER, x86.AJPC}, /* alternate */ 275 {"JPO", LTYPER, x86.AJPC}, /* alternate */ 276 {"JLT", LTYPER, x86.AJLT}, /* less than (signed) (SF != OF) */ 277 {"JL", LTYPER, x86.AJLT}, /* alternate */ 278 {"JNGE", LTYPER, x86.AJLT}, /* alternate */ 279 {"JGE", LTYPER, x86.AJGE}, /* greater than or equal (signed) (SF = OF) */ 280 {"JNL", LTYPER, x86.AJGE}, /* alternate */ 281 {"JLE", LTYPER, x86.AJLE}, /* less than or equal (signed) (ZF = 1 || SF != OF) */ 282 {"JNG", LTYPER, x86.AJLE}, /* alternate */ 283 {"JGT", LTYPER, x86.AJGT}, /* greater than (signed) (ZF = 0 && SF = OF) */ 284 {"JG", LTYPER, x86.AJGT}, /* alternate */ 285 {"JNLE", LTYPER, x86.AJGT}, /* alternate */ 286 {"JCXZL", LTYPER, x86.AJCXZL}, 287 {"JCXZW", LTYPER, x86.AJCXZW}, 288 {"JMP", LTYPEC, obj.AJMP}, 289 {"LAHF", LTYPE0, x86.ALAHF}, 290 {"LARL", LTYPE3, x86.ALARL}, 291 {"LARW", LTYPE3, x86.ALARW}, 292 {"LEAL", LTYPE3, x86.ALEAL}, 293 {"LEAW", LTYPE3, x86.ALEAW}, 294 {"LEAVEL", LTYPE0, x86.ALEAVEL}, 295 {"LEAVEW", LTYPE0, x86.ALEAVEW}, 296 {"LOCK", LTYPE0, x86.ALOCK}, 297 {"LODSB", LTYPE0, x86.ALODSB}, 298 {"LODSL", LTYPE0, x86.ALODSL}, 299 {"LODSW", LTYPE0, x86.ALODSW}, 300 {"LONG", LTYPE2, x86.ALONG}, 301 {"LOOP", LTYPER, x86.ALOOP}, 302 {"LOOPEQ", LTYPER, x86.ALOOPEQ}, 303 {"LOOPNE", LTYPER, x86.ALOOPNE}, 304 {"LSLL", LTYPE3, x86.ALSLL}, 305 {"LSLW", LTYPE3, x86.ALSLW}, 306 {"MOVB", LTYPE3, x86.AMOVB}, 307 {"MOVL", LTYPEM, x86.AMOVL}, 308 {"MOVW", LTYPEM, x86.AMOVW}, 309 {"MOVQ", LTYPEM, x86.AMOVQ}, 310 {"MOVBLSX", LTYPE3, x86.AMOVBLSX}, 311 {"MOVBLZX", LTYPE3, x86.AMOVBLZX}, 312 {"MOVBWSX", LTYPE3, x86.AMOVBWSX}, 313 {"MOVBWZX", LTYPE3, x86.AMOVBWZX}, 314 {"MOVWLSX", LTYPE3, x86.AMOVWLSX}, 315 {"MOVWLZX", LTYPE3, x86.AMOVWLZX}, 316 {"MOVSB", LTYPE0, x86.AMOVSB}, 317 {"MOVSL", LTYPE0, x86.AMOVSL}, 318 {"MOVSW", LTYPE0, x86.AMOVSW}, 319 {"MULB", LTYPE2, x86.AMULB}, 320 {"MULL", LTYPE2, x86.AMULL}, 321 {"MULW", LTYPE2, x86.AMULW}, 322 {"NEGB", LTYPE1, x86.ANEGB}, 323 {"NEGL", LTYPE1, x86.ANEGL}, 324 {"NEGW", LTYPE1, x86.ANEGW}, 325 {"NOP", LTYPEN, obj.ANOP}, 326 {"NOTB", LTYPE1, x86.ANOTB}, 327 {"NOTL", LTYPE1, x86.ANOTL}, 328 {"NOTW", LTYPE1, x86.ANOTW}, 329 {"ORB", LTYPE3, x86.AORB}, 330 {"ORL", LTYPE3, x86.AORL}, 331 {"ORW", LTYPE3, x86.AORW}, 332 {"OUTB", LTYPE0, x86.AOUTB}, 333 {"OUTL", LTYPE0, x86.AOUTL}, 334 {"OUTW", LTYPE0, x86.AOUTW}, 335 {"OUTSB", LTYPE0, x86.AOUTSB}, 336 {"OUTSL", LTYPE0, x86.AOUTSL}, 337 {"OUTSW", LTYPE0, x86.AOUTSW}, 338 {"PAUSE", LTYPEN, x86.APAUSE}, 339 {"PINSRD", LTYPEX, x86.APINSRD}, 340 {"POPAL", LTYPE0, x86.APOPAL}, 341 {"POPAW", LTYPE0, x86.APOPAW}, 342 {"POPFL", LTYPE0, x86.APOPFL}, 343 {"POPFW", LTYPE0, x86.APOPFW}, 344 {"POPL", LTYPE1, x86.APOPL}, 345 {"POPW", LTYPE1, x86.APOPW}, 346 {"PUSHAL", LTYPE0, x86.APUSHAL}, 347 {"PUSHAW", LTYPE0, x86.APUSHAW}, 348 {"PUSHFL", LTYPE0, x86.APUSHFL}, 349 {"PUSHFW", LTYPE0, x86.APUSHFW}, 350 {"PUSHL", LTYPE2, x86.APUSHL}, 351 {"PUSHW", LTYPE2, x86.APUSHW}, 352 {"RCLB", LTYPE3, x86.ARCLB}, 353 {"RCLL", LTYPE3, x86.ARCLL}, 354 {"RCLW", LTYPE3, x86.ARCLW}, 355 {"RCRB", LTYPE3, x86.ARCRB}, 356 {"RCRL", LTYPE3, x86.ARCRL}, 357 {"RCRW", LTYPE3, x86.ARCRW}, 358 {"RDTSC", LTYPE0, x86.ARDTSC}, 359 {"REP", LTYPE0, x86.AREP}, 360 {"REPN", LTYPE0, x86.AREPN}, 361 {"RET", LTYPE0, obj.ARET}, 362 {"ROLB", LTYPE3, x86.AROLB}, 363 {"ROLL", LTYPE3, x86.AROLL}, 364 {"ROLW", LTYPE3, x86.AROLW}, 365 {"RORB", LTYPE3, x86.ARORB}, 366 {"RORL", LTYPE3, x86.ARORL}, 367 {"RORW", LTYPE3, x86.ARORW}, 368 {"SAHF", LTYPE0, x86.ASAHF}, 369 {"SALB", LTYPE3, x86.ASALB}, 370 {"SALL", LTYPE3, x86.ASALL}, 371 {"SALW", LTYPE3, x86.ASALW}, 372 {"SARB", LTYPE3, x86.ASARB}, 373 {"SARL", LTYPE3, x86.ASARL}, 374 {"SARW", LTYPE3, x86.ASARW}, 375 {"SBBB", LTYPE3, x86.ASBBB}, 376 {"SBBL", LTYPE3, x86.ASBBL}, 377 {"SBBW", LTYPE3, x86.ASBBW}, 378 {"SCASB", LTYPE0, x86.ASCASB}, 379 {"SCASL", LTYPE0, x86.ASCASL}, 380 {"SCASW", LTYPE0, x86.ASCASW}, 381 {"SETCC", LTYPE1, x86.ASETCC}, /* see JCC etc above for condition codes */ 382 {"SETCS", LTYPE1, x86.ASETCS}, 383 {"SETEQ", LTYPE1, x86.ASETEQ}, 384 {"SETGE", LTYPE1, x86.ASETGE}, 385 {"SETGT", LTYPE1, x86.ASETGT}, 386 {"SETHI", LTYPE1, x86.ASETHI}, 387 {"SETLE", LTYPE1, x86.ASETLE}, 388 {"SETLS", LTYPE1, x86.ASETLS}, 389 {"SETLT", LTYPE1, x86.ASETLT}, 390 {"SETMI", LTYPE1, x86.ASETMI}, 391 {"SETNE", LTYPE1, x86.ASETNE}, 392 {"SETOC", LTYPE1, x86.ASETOC}, 393 {"SETOS", LTYPE1, x86.ASETOS}, 394 {"SETPC", LTYPE1, x86.ASETPC}, 395 {"SETPL", LTYPE1, x86.ASETPL}, 396 {"SETPS", LTYPE1, x86.ASETPS}, 397 {"CDQ", LTYPE0, x86.ACDQ}, 398 {"CWD", LTYPE0, x86.ACWD}, 399 {"SHLB", LTYPE3, x86.ASHLB}, 400 {"SHLL", LTYPES, x86.ASHLL}, 401 {"SHLW", LTYPES, x86.ASHLW}, 402 {"SHRB", LTYPE3, x86.ASHRB}, 403 {"SHRL", LTYPES, x86.ASHRL}, 404 {"SHRW", LTYPES, x86.ASHRW}, 405 {"STC", LTYPE0, x86.ASTC}, 406 {"STD", LTYPE0, x86.ASTD}, 407 {"STI", LTYPE0, x86.ASTI}, 408 {"STOSB", LTYPE0, x86.ASTOSB}, 409 {"STOSL", LTYPE0, x86.ASTOSL}, 410 {"STOSW", LTYPE0, x86.ASTOSW}, 411 {"SUBB", LTYPE3, x86.ASUBB}, 412 {"SUBL", LTYPE3, x86.ASUBL}, 413 {"SUBW", LTYPE3, x86.ASUBW}, 414 {"SYSCALL", LTYPE0, x86.ASYSCALL}, 415 {"TESTB", LTYPE3, x86.ATESTB}, 416 {"TESTL", LTYPE3, x86.ATESTL}, 417 {"TESTW", LTYPE3, x86.ATESTW}, 418 {"TEXT", LTYPET, obj.ATEXT}, 419 {"VERR", LTYPE2, x86.AVERR}, 420 {"VERW", LTYPE2, x86.AVERW}, 421 {"WAIT", LTYPE0, x86.AWAIT}, 422 {"WORD", LTYPE2, x86.AWORD}, 423 {"XADDB", LTYPE3, x86.AXADDB}, 424 {"XADDL", LTYPE3, x86.AXADDL}, 425 {"XADDW", LTYPE3, x86.AXADDW}, 426 {"XCHGB", LTYPE3, x86.AXCHGB}, 427 {"XCHGL", LTYPE3, x86.AXCHGL}, 428 {"XCHGW", LTYPE3, x86.AXCHGW}, 429 {"XLAT", LTYPE2, x86.AXLAT}, 430 {"XORB", LTYPE3, x86.AXORB}, 431 {"XORL", LTYPE3, x86.AXORL}, 432 {"XORW", LTYPE3, x86.AXORW}, 433 {"CMOVLCC", LTYPE3, x86.ACMOVLCC}, 434 {"CMOVLCS", LTYPE3, x86.ACMOVLCS}, 435 {"CMOVLEQ", LTYPE3, x86.ACMOVLEQ}, 436 {"CMOVLGE", LTYPE3, x86.ACMOVLGE}, 437 {"CMOVLGT", LTYPE3, x86.ACMOVLGT}, 438 {"CMOVLHI", LTYPE3, x86.ACMOVLHI}, 439 {"CMOVLLE", LTYPE3, x86.ACMOVLLE}, 440 {"CMOVLLS", LTYPE3, x86.ACMOVLLS}, 441 {"CMOVLLT", LTYPE3, x86.ACMOVLLT}, 442 {"CMOVLMI", LTYPE3, x86.ACMOVLMI}, 443 {"CMOVLNE", LTYPE3, x86.ACMOVLNE}, 444 {"CMOVLOC", LTYPE3, x86.ACMOVLOC}, 445 {"CMOVLOS", LTYPE3, x86.ACMOVLOS}, 446 {"CMOVLPC", LTYPE3, x86.ACMOVLPC}, 447 {"CMOVLPL", LTYPE3, x86.ACMOVLPL}, 448 {"CMOVLPS", LTYPE3, x86.ACMOVLPS}, 449 {"CMOVWCC", LTYPE3, x86.ACMOVWCC}, 450 {"CMOVWCS", LTYPE3, x86.ACMOVWCS}, 451 {"CMOVWEQ", LTYPE3, x86.ACMOVWEQ}, 452 {"CMOVWGE", LTYPE3, x86.ACMOVWGE}, 453 {"CMOVWGT", LTYPE3, x86.ACMOVWGT}, 454 {"CMOVWHI", LTYPE3, x86.ACMOVWHI}, 455 {"CMOVWLE", LTYPE3, x86.ACMOVWLE}, 456 {"CMOVWLS", LTYPE3, x86.ACMOVWLS}, 457 {"CMOVWLT", LTYPE3, x86.ACMOVWLT}, 458 {"CMOVWMI", LTYPE3, x86.ACMOVWMI}, 459 {"CMOVWNE", LTYPE3, x86.ACMOVWNE}, 460 {"CMOVWOC", LTYPE3, x86.ACMOVWOC}, 461 {"CMOVWOS", LTYPE3, x86.ACMOVWOS}, 462 {"CMOVWPC", LTYPE3, x86.ACMOVWPC}, 463 {"CMOVWPL", LTYPE3, x86.ACMOVWPL}, 464 {"CMOVWPS", LTYPE3, x86.ACMOVWPS}, 465 {"FMOVB", LTYPE3, x86.AFMOVB}, 466 {"FMOVBP", LTYPE3, x86.AFMOVBP}, 467 {"FMOVD", LTYPE3, x86.AFMOVD}, 468 {"FMOVDP", LTYPE3, x86.AFMOVDP}, 469 {"FMOVF", LTYPE3, x86.AFMOVF}, 470 {"FMOVFP", LTYPE3, x86.AFMOVFP}, 471 {"FMOVL", LTYPE3, x86.AFMOVL}, 472 {"FMOVLP", LTYPE3, x86.AFMOVLP}, 473 {"FMOVV", LTYPE3, x86.AFMOVV}, 474 {"FMOVVP", LTYPE3, x86.AFMOVVP}, 475 {"FMOVW", LTYPE3, x86.AFMOVW}, 476 {"FMOVWP", LTYPE3, x86.AFMOVWP}, 477 {"FMOVX", LTYPE3, x86.AFMOVX}, 478 {"FMOVXP", LTYPE3, x86.AFMOVXP}, 479 {"FCMOVCC", LTYPE3, x86.AFCMOVCC}, 480 {"FCMOVCS", LTYPE3, x86.AFCMOVCS}, 481 {"FCMOVEQ", LTYPE3, x86.AFCMOVEQ}, 482 {"FCMOVHI", LTYPE3, x86.AFCMOVHI}, 483 {"FCMOVLS", LTYPE3, x86.AFCMOVLS}, 484 {"FCMOVNE", LTYPE3, x86.AFCMOVNE}, 485 {"FCMOVNU", LTYPE3, x86.AFCMOVNU}, 486 {"FCMOVUN", LTYPE3, x86.AFCMOVUN}, 487 {"FCOMB", LTYPE3, x86.AFCOMB}, 488 {"FCOMBP", LTYPE3, x86.AFCOMBP}, 489 {"FCOMD", LTYPE3, x86.AFCOMD}, 490 {"FCOMDP", LTYPE3, x86.AFCOMDP}, 491 {"FCOMDPP", LTYPE3, x86.AFCOMDPP}, 492 {"FCOMF", LTYPE3, x86.AFCOMF}, 493 {"FCOMFP", LTYPE3, x86.AFCOMFP}, 494 {"FCOMI", LTYPE3, x86.AFCOMI}, 495 {"FCOMIP", LTYPE3, x86.AFCOMIP}, 496 {"FCOML", LTYPE3, x86.AFCOML}, 497 {"FCOMLP", LTYPE3, x86.AFCOMLP}, 498 {"FCOMW", LTYPE3, x86.AFCOMW}, 499 {"FCOMWP", LTYPE3, x86.AFCOMWP}, 500 {"FUCOM", LTYPE3, x86.AFUCOM}, 501 {"FUCOMI", LTYPE3, x86.AFUCOMI}, 502 {"FUCOMIP", LTYPE3, x86.AFUCOMIP}, 503 {"FUCOMP", LTYPE3, x86.AFUCOMP}, 504 {"FUCOMPP", LTYPE3, x86.AFUCOMPP}, 505 {"FADDW", LTYPE3, x86.AFADDW}, 506 {"FADDL", LTYPE3, x86.AFADDL}, 507 {"FADDF", LTYPE3, x86.AFADDF}, 508 {"FADDD", LTYPE3, x86.AFADDD}, 509 {"FADDDP", LTYPE3, x86.AFADDDP}, 510 {"FSUBDP", LTYPE3, x86.AFSUBDP}, 511 {"FSUBW", LTYPE3, x86.AFSUBW}, 512 {"FSUBL", LTYPE3, x86.AFSUBL}, 513 {"FSUBF", LTYPE3, x86.AFSUBF}, 514 {"FSUBD", LTYPE3, x86.AFSUBD}, 515 {"FSUBRDP", LTYPE3, x86.AFSUBRDP}, 516 {"FSUBRW", LTYPE3, x86.AFSUBRW}, 517 {"FSUBRL", LTYPE3, x86.AFSUBRL}, 518 {"FSUBRF", LTYPE3, x86.AFSUBRF}, 519 {"FSUBRD", LTYPE3, x86.AFSUBRD}, 520 {"FMULDP", LTYPE3, x86.AFMULDP}, 521 {"FMULW", LTYPE3, x86.AFMULW}, 522 {"FMULL", LTYPE3, x86.AFMULL}, 523 {"FMULF", LTYPE3, x86.AFMULF}, 524 {"FMULD", LTYPE3, x86.AFMULD}, 525 {"FDIVDP", LTYPE3, x86.AFDIVDP}, 526 {"FDIVW", LTYPE3, x86.AFDIVW}, 527 {"FDIVL", LTYPE3, x86.AFDIVL}, 528 {"FDIVF", LTYPE3, x86.AFDIVF}, 529 {"FDIVD", LTYPE3, x86.AFDIVD}, 530 {"FDIVRDP", LTYPE3, x86.AFDIVRDP}, 531 {"FDIVRW", LTYPE3, x86.AFDIVRW}, 532 {"FDIVRL", LTYPE3, x86.AFDIVRL}, 533 {"FDIVRF", LTYPE3, x86.AFDIVRF}, 534 {"FDIVRD", LTYPE3, x86.AFDIVRD}, 535 {"FXCHD", LTYPE3, x86.AFXCHD}, 536 {"FFREE", LTYPE1, x86.AFFREE}, 537 {"FLDCW", LTYPE2, x86.AFLDCW}, 538 {"FLDENV", LTYPE1, x86.AFLDENV}, 539 {"FRSTOR", LTYPE2, x86.AFRSTOR}, 540 {"FSAVE", LTYPE1, x86.AFSAVE}, 541 {"FSTCW", LTYPE1, x86.AFSTCW}, 542 {"FSTENV", LTYPE1, x86.AFSTENV}, 543 {"FSTSW", LTYPE1, x86.AFSTSW}, 544 {"F2XM1", LTYPE0, x86.AF2XM1}, 545 {"FABS", LTYPE0, x86.AFABS}, 546 {"FCHS", LTYPE0, x86.AFCHS}, 547 {"FCLEX", LTYPE0, x86.AFCLEX}, 548 {"FCOS", LTYPE0, x86.AFCOS}, 549 {"FDECSTP", LTYPE0, x86.AFDECSTP}, 550 {"FINCSTP", LTYPE0, x86.AFINCSTP}, 551 {"FINIT", LTYPE0, x86.AFINIT}, 552 {"FLD1", LTYPE0, x86.AFLD1}, 553 {"FLDL2E", LTYPE0, x86.AFLDL2E}, 554 {"FLDL2T", LTYPE0, x86.AFLDL2T}, 555 {"FLDLG2", LTYPE0, x86.AFLDLG2}, 556 {"FLDLN2", LTYPE0, x86.AFLDLN2}, 557 {"FLDPI", LTYPE0, x86.AFLDPI}, 558 {"FLDZ", LTYPE0, x86.AFLDZ}, 559 {"FNOP", LTYPE0, x86.AFNOP}, 560 {"FPATAN", LTYPE0, x86.AFPATAN}, 561 {"FPREM", LTYPE0, x86.AFPREM}, 562 {"FPREM1", LTYPE0, x86.AFPREM1}, 563 {"FPTAN", LTYPE0, x86.AFPTAN}, 564 {"FRNDINT", LTYPE0, x86.AFRNDINT}, 565 {"FSCALE", LTYPE0, x86.AFSCALE}, 566 {"FSIN", LTYPE0, x86.AFSIN}, 567 {"FSINCOS", LTYPE0, x86.AFSINCOS}, 568 {"FSQRT", LTYPE0, x86.AFSQRT}, 569 {"FTST", LTYPE0, x86.AFTST}, 570 {"FXAM", LTYPE0, x86.AFXAM}, 571 {"FXTRACT", LTYPE0, x86.AFXTRACT}, 572 {"FYL2X", LTYPE0, x86.AFYL2X}, 573 {"FYL2XP1", LTYPE0, x86.AFYL2XP1}, 574 {"LFENCE", LTYPE0, x86.ALFENCE}, 575 {"MFENCE", LTYPE0, x86.AMFENCE}, 576 {"SFENCE", LTYPE0, x86.ASFENCE}, 577 {"EMMS", LTYPE0, x86.AEMMS}, 578 {"PREFETCHT0", LTYPE2, x86.APREFETCHT0}, 579 {"PREFETCHT1", LTYPE2, x86.APREFETCHT1}, 580 {"PREFETCHT2", LTYPE2, x86.APREFETCHT2}, 581 {"PREFETCHNTA", LTYPE2, x86.APREFETCHNTA}, 582 {"UNDEF", LTYPE0, obj.AUNDEF}, 583 {"ADDPD", LTYPE3, x86.AADDPD}, 584 {"ADDPS", LTYPE3, x86.AADDPS}, 585 {"ADDSD", LTYPE3, x86.AADDSD}, 586 {"ADDSS", LTYPE3, x86.AADDSS}, 587 {"AESENC", LTYPE3, x86.AAESENC}, 588 {"ANDNPD", LTYPE3, x86.AANDNPD}, 589 {"ANDNPS", LTYPE3, x86.AANDNPS}, 590 {"ANDPD", LTYPE3, x86.AANDPD}, 591 {"ANDPS", LTYPE3, x86.AANDPS}, 592 {"CMPPD", LTYPEXC, x86.ACMPPD}, 593 {"CMPPS", LTYPEXC, x86.ACMPPS}, 594 {"CMPSD", LTYPEXC, x86.ACMPSD}, 595 {"CMPSS", LTYPEXC, x86.ACMPSS}, 596 {"COMISD", LTYPE3, x86.ACOMISD}, 597 {"COMISS", LTYPE3, x86.ACOMISS}, 598 {"CVTPL2PD", LTYPE3, x86.ACVTPL2PD}, 599 {"CVTPL2PS", LTYPE3, x86.ACVTPL2PS}, 600 {"CVTPD2PL", LTYPE3, x86.ACVTPD2PL}, 601 {"CVTPD2PS", LTYPE3, x86.ACVTPD2PS}, 602 {"CVTPS2PL", LTYPE3, x86.ACVTPS2PL}, 603 {"CVTPS2PD", LTYPE3, x86.ACVTPS2PD}, 604 {"CVTSD2SL", LTYPE3, x86.ACVTSD2SL}, 605 {"CVTSD2SS", LTYPE3, x86.ACVTSD2SS}, 606 {"CVTSL2SD", LTYPE3, x86.ACVTSL2SD}, 607 {"CVTSL2SS", LTYPE3, x86.ACVTSL2SS}, 608 {"CVTSS2SD", LTYPE3, x86.ACVTSS2SD}, 609 {"CVTSS2SL", LTYPE3, x86.ACVTSS2SL}, 610 {"CVTTPD2PL", LTYPE3, x86.ACVTTPD2PL}, 611 {"CVTTPS2PL", LTYPE3, x86.ACVTTPS2PL}, 612 {"CVTTSD2SL", LTYPE3, x86.ACVTTSD2SL}, 613 {"CVTTSS2SL", LTYPE3, x86.ACVTTSS2SL}, 614 {"DIVPD", LTYPE3, x86.ADIVPD}, 615 {"DIVPS", LTYPE3, x86.ADIVPS}, 616 {"DIVSD", LTYPE3, x86.ADIVSD}, 617 {"DIVSS", LTYPE3, x86.ADIVSS}, 618 {"MASKMOVOU", LTYPE3, x86.AMASKMOVOU}, 619 {"MASKMOVDQU", LTYPE3, x86.AMASKMOVOU}, /* syn */ 620 {"MAXPD", LTYPE3, x86.AMAXPD}, 621 {"MAXPS", LTYPE3, x86.AMAXPS}, 622 {"MAXSD", LTYPE3, x86.AMAXSD}, 623 {"MAXSS", LTYPE3, x86.AMAXSS}, 624 {"MINPD", LTYPE3, x86.AMINPD}, 625 {"MINPS", LTYPE3, x86.AMINPS}, 626 {"MINSD", LTYPE3, x86.AMINSD}, 627 {"MINSS", LTYPE3, x86.AMINSS}, 628 {"MOVAPD", LTYPE3, x86.AMOVAPD}, 629 {"MOVAPS", LTYPE3, x86.AMOVAPS}, 630 {"MOVO", LTYPE3, x86.AMOVO}, 631 {"MOVOA", LTYPE3, x86.AMOVO}, /* syn */ 632 {"MOVOU", LTYPE3, x86.AMOVOU}, 633 {"MOVHLPS", LTYPE3, x86.AMOVHLPS}, 634 {"MOVHPD", LTYPE3, x86.AMOVHPD}, 635 {"MOVHPS", LTYPE3, x86.AMOVHPS}, 636 {"MOVLHPS", LTYPE3, x86.AMOVLHPS}, 637 {"MOVLPD", LTYPE3, x86.AMOVLPD}, 638 {"MOVLPS", LTYPE3, x86.AMOVLPS}, 639 {"MOVMSKPD", LTYPE3, x86.AMOVMSKPD}, 640 {"MOVMSKPS", LTYPE3, x86.AMOVMSKPS}, 641 {"MOVNTO", LTYPE3, x86.AMOVNTO}, 642 {"MOVNTDQ", LTYPE3, x86.AMOVNTO}, /* syn */ 643 {"MOVNTPD", LTYPE3, x86.AMOVNTPD}, 644 {"MOVNTPS", LTYPE3, x86.AMOVNTPS}, 645 {"MOVSD", LTYPE3, x86.AMOVSD}, 646 {"MOVSS", LTYPE3, x86.AMOVSS}, 647 {"MOVUPD", LTYPE3, x86.AMOVUPD}, 648 {"MOVUPS", LTYPE3, x86.AMOVUPS}, 649 {"MULPD", LTYPE3, x86.AMULPD}, 650 {"MULPS", LTYPE3, x86.AMULPS}, 651 {"MULSD", LTYPE3, x86.AMULSD}, 652 {"MULSS", LTYPE3, x86.AMULSS}, 653 {"ORPD", LTYPE3, x86.AORPD}, 654 {"ORPS", LTYPE3, x86.AORPS}, 655 {"PADDQ", LTYPE3, x86.APADDQ}, 656 {"PAND", LTYPE3, x86.APAND}, 657 {"PCMPEQB", LTYPE3, x86.APCMPEQB}, 658 {"PMAXSW", LTYPE3, x86.APMAXSW}, 659 {"PMAXUB", LTYPE3, x86.APMAXUB}, 660 {"PMINSW", LTYPE3, x86.APMINSW}, 661 {"PMINUB", LTYPE3, x86.APMINUB}, 662 {"PMOVMSKB", LTYPE3, x86.APMOVMSKB}, 663 {"PSADBW", LTYPE3, x86.APSADBW}, 664 {"PSHUFB", LTYPE3, x86.APSHUFB}, 665 {"PSHUFHW", LTYPEX, x86.APSHUFHW}, 666 {"PSHUFL", LTYPEX, x86.APSHUFL}, 667 {"PSHUFLW", LTYPEX, x86.APSHUFLW}, 668 {"PSUBB", LTYPE3, x86.APSUBB}, 669 {"PSUBL", LTYPE3, x86.APSUBL}, 670 {"PSUBQ", LTYPE3, x86.APSUBQ}, 671 {"PSUBSB", LTYPE3, x86.APSUBSB}, 672 {"PSUBSW", LTYPE3, x86.APSUBSW}, 673 {"PSUBUSB", LTYPE3, x86.APSUBUSB}, 674 {"PSUBUSW", LTYPE3, x86.APSUBUSW}, 675 {"PSUBW", LTYPE3, x86.APSUBW}, 676 {"PUNPCKHQDQ", LTYPE3, x86.APUNPCKHQDQ}, 677 {"PUNPCKLQDQ", LTYPE3, x86.APUNPCKLQDQ}, 678 {"PXOR", LTYPE3, x86.APXOR}, 679 {"RCPPS", LTYPE3, x86.ARCPPS}, 680 {"RCPSS", LTYPE3, x86.ARCPSS}, 681 {"RSQRTPS", LTYPE3, x86.ARSQRTPS}, 682 {"RSQRTSS", LTYPE3, x86.ARSQRTSS}, 683 {"SQRTPD", LTYPE3, x86.ASQRTPD}, 684 {"SQRTPS", LTYPE3, x86.ASQRTPS}, 685 {"SQRTSD", LTYPE3, x86.ASQRTSD}, 686 {"SQRTSS", LTYPE3, x86.ASQRTSS}, 687 {"SUBPD", LTYPE3, x86.ASUBPD}, 688 {"SUBPS", LTYPE3, x86.ASUBPS}, 689 {"SUBSD", LTYPE3, x86.ASUBSD}, 690 {"SUBSS", LTYPE3, x86.ASUBSS}, 691 {"UCOMISD", LTYPE3, x86.AUCOMISD}, 692 {"UCOMISS", LTYPE3, x86.AUCOMISS}, 693 {"UNPCKHPD", LTYPE3, x86.AUNPCKHPD}, 694 {"UNPCKHPS", LTYPE3, x86.AUNPCKHPS}, 695 {"UNPCKLPD", LTYPE3, x86.AUNPCKLPD}, 696 {"UNPCKLPS", LTYPE3, x86.AUNPCKLPS}, 697 {"XORPD", LTYPE3, x86.AXORPD}, 698 {"XORPS", LTYPE3, x86.AXORPS}, 699 {"USEFIELD", LTYPEN, obj.AUSEFIELD}, 700 {"PCDATA", LTYPEPC, obj.APCDATA}, 701 {"FUNCDATA", LTYPEF, obj.AFUNCDATA}, 702 } 703 704 func cinit() { 705 nullgen.Type = x86.REG_NONE 706 nullgen.Index = x86.REG_NONE 707 } 708 709 func checkscale(scale int16) { 710 switch scale { 711 case 1, 712 2, 713 4, 714 8: 715 return 716 } 717 718 yyerror("scale must be 1248: %d", scale) 719 } 720 721 func syminit(s *asm.Sym) { 722 s.Type = LNAME 723 s.Value = 0 724 } 725 726 func cclean() { 727 var g2 Addr2 728 729 g2.from = nullgen 730 g2.to = nullgen 731 outcode(obj.AEND, &g2) 732 } 733 734 var lastpc *obj.Prog 735 736 type Addr2 struct { 737 from obj.Addr 738 to obj.Addr 739 } 740 741 func outcode(a int, g2 *Addr2) { 742 var p *obj.Prog 743 var pl *obj.Plist 744 745 if asm.Pass == 1 { 746 goto out 747 } 748 749 p = new(obj.Prog) 750 *p = obj.Prog{} 751 p.Ctxt = asm.Ctxt 752 p.As = int16(a) 753 p.Lineno = stmtline 754 p.From = g2.from 755 p.To = g2.to 756 p.Pc = int64(asm.PC) 757 758 if lastpc == nil { 759 pl = obj.Linknewplist(asm.Ctxt) 760 pl.Firstpc = p 761 } else { 762 763 lastpc.Link = p 764 } 765 lastpc = p 766 767 out: 768 if a != obj.AGLOBL && a != obj.ADATA { 769 asm.PC++ 770 } 771 }