github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/cmd/6a/lex.c (about) 1 // Inferno utils/6a/lex.c 2 // http://code.google.com/p/inferno-os/source/browse/utils/6a/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 #define EXTERN 32 #include <u.h> 33 #include <libc.h> 34 #include "a.h" 35 #include "y.tab.h" 36 37 enum 38 { 39 Plan9 = 1<<0, 40 Unix = 1<<1, 41 Windows = 1<<2, 42 }; 43 44 int 45 systemtype(int sys) 46 { 47 #ifdef _WIN32 48 return sys&Windows; 49 #else 50 return sys&Plan9; 51 #endif 52 } 53 54 int 55 pathchar(void) 56 { 57 return '/'; 58 } 59 60 int 61 Lconv(Fmt *fp) 62 { 63 return linklinefmt(ctxt, fp); 64 } 65 66 void 67 dodef(char *p) 68 { 69 if(nDlist%8 == 0) 70 Dlist = allocn(Dlist, nDlist*sizeof(char *), 71 8*sizeof(char *)); 72 Dlist[nDlist++] = p; 73 } 74 75 LinkArch* thelinkarch = &linkamd64; 76 77 void 78 usage(void) 79 { 80 print("usage: %ca [options] file.c...\n", thechar); 81 flagprint(1); 82 errorexit(); 83 } 84 85 void 86 main(int argc, char *argv[]) 87 { 88 char *p; 89 90 thechar = '6'; 91 thestring = "amd64"; 92 93 // Allow GOARCH=thestring or GOARCH=thestringsuffix, 94 // but not other values. 95 p = getgoarch(); 96 if(strncmp(p, thestring, strlen(thestring)) != 0) 97 sysfatal("cannot use %cc with GOARCH=%s", thechar, p); 98 if(strcmp(p, "amd64p32") == 0) 99 thelinkarch = &linkamd64p32; 100 101 ctxt = linknew(thelinkarch); 102 ctxt->diag = yyerror; 103 ctxt->bso = &bstdout; 104 Binit(&bstdout, 1, OWRITE); 105 listinit6(); 106 fmtinstall('L', Lconv); 107 108 ensuresymb(NSYMB); 109 memset(debug, 0, sizeof(debug)); 110 cinit(); 111 outfile = 0; 112 setinclude("."); 113 114 flagfn1("D", "name[=value]: add #define", dodef); 115 flagfn1("I", "dir: add dir to include path", setinclude); 116 flagcount("S", "print assembly and machine code", &debug['S']); 117 flagcount("m", "debug preprocessor macros", &debug['m']); 118 flagstr("o", "file: set output file", &outfile); 119 flagstr("trimpath", "prefix: remove prefix from recorded source file paths", &ctxt->trimpath); 120 121 flagparse(&argc, &argv, usage); 122 ctxt->debugasm = debug['S']; 123 124 if(argc < 1) 125 usage(); 126 if(argc > 1){ 127 print("can't assemble multiple files\n"); 128 errorexit(); 129 } 130 131 if(assemble(argv[0])) 132 errorexit(); 133 Bflush(&bstdout); 134 exits(0); 135 } 136 137 int 138 assemble(char *file) 139 { 140 char *ofile, *p; 141 int i, of; 142 143 ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar) 144 strcpy(ofile, file); 145 p = utfrrune(ofile, pathchar()); 146 if(p) { 147 include[0] = ofile; 148 *p++ = 0; 149 } else 150 p = ofile; 151 if(outfile == 0) { 152 outfile = p; 153 if(outfile){ 154 p = utfrrune(outfile, '.'); 155 if(p) 156 if(p[1] == 's' && p[2] == 0) 157 p[0] = 0; 158 p = utfrune(outfile, 0); 159 p[0] = '.'; 160 p[1] = thechar; 161 p[2] = 0; 162 } else 163 outfile = "/dev/null"; 164 } 165 166 of = create(outfile, OWRITE, 0664); 167 if(of < 0) { 168 yyerror("%ca: cannot create %s", thechar, outfile); 169 errorexit(); 170 } 171 Binit(&obuf, of, OWRITE); 172 Bprint(&obuf, "go object %s %s %s\n", getgoos(), getgoarch(), getgoversion()); 173 Bprint(&obuf, "!\n"); 174 175 for(pass = 1; pass <= 2; pass++) { 176 pinit(file); 177 for(i=0; i<nDlist; i++) 178 dodefine(Dlist[i]); 179 yyparse(); 180 cclean(); 181 if(nerrors) 182 return nerrors; 183 } 184 185 writeobj(ctxt, &obuf); 186 Bflush(&obuf); 187 return 0; 188 } 189 190 struct 191 { 192 char *name; 193 /* 194 * type is the lexical type to return. It dictates what kind of 195 * operands 6a allows to follow it (in a.y) as the possible operand 196 * types are handled by a grammar. How do you know which LTYPE? 197 * Either read a.y or think of an instruction that has the same 198 * possible operands and look up what it takes. 199 */ 200 ushort type; 201 ushort value; 202 } itab[] = 203 { 204 "SP", LSP, D_AUTO, 205 "SB", LSB, D_EXTERN, 206 "FP", LFP, D_PARAM, 207 "PC", LPC, D_BRANCH, 208 209 "AL", LBREG, D_AL, 210 "CL", LBREG, D_CL, 211 "DL", LBREG, D_DL, 212 "BL", LBREG, D_BL, 213 /* "SPB", LBREG, D_SPB, */ 214 "SIB", LBREG, D_SIB, 215 "DIB", LBREG, D_DIB, 216 "BPB", LBREG, D_BPB, 217 "R8B", LBREG, D_R8B, 218 "R9B", LBREG, D_R9B, 219 "R10B", LBREG, D_R10B, 220 "R11B", LBREG, D_R11B, 221 "R12B", LBREG, D_R12B, 222 "R13B", LBREG, D_R13B, 223 "R14B", LBREG, D_R14B, 224 "R15B", LBREG, D_R15B, 225 226 "AH", LBREG, D_AH, 227 "CH", LBREG, D_CH, 228 "DH", LBREG, D_DH, 229 "BH", LBREG, D_BH, 230 231 "AX", LLREG, D_AX, 232 "CX", LLREG, D_CX, 233 "DX", LLREG, D_DX, 234 "BX", LLREG, D_BX, 235 /* "SP", LLREG, D_SP, */ 236 "BP", LLREG, D_BP, 237 "SI", LLREG, D_SI, 238 "DI", LLREG, D_DI, 239 "R8", LLREG, D_R8, 240 "R9", LLREG, D_R9, 241 "R10", LLREG, D_R10, 242 "R11", LLREG, D_R11, 243 "R12", LLREG, D_R12, 244 "R13", LLREG, D_R13, 245 "R14", LLREG, D_R14, 246 "R15", LLREG, D_R15, 247 248 "RARG", LLREG, REGARG, 249 250 "F0", LFREG, D_F0+0, 251 "F1", LFREG, D_F0+1, 252 "F2", LFREG, D_F0+2, 253 "F3", LFREG, D_F0+3, 254 "F4", LFREG, D_F0+4, 255 "F5", LFREG, D_F0+5, 256 "F6", LFREG, D_F0+6, 257 "F7", LFREG, D_F0+7, 258 259 "M0", LMREG, D_M0+0, 260 "M1", LMREG, D_M0+1, 261 "M2", LMREG, D_M0+2, 262 "M3", LMREG, D_M0+3, 263 "M4", LMREG, D_M0+4, 264 "M5", LMREG, D_M0+5, 265 "M6", LMREG, D_M0+6, 266 "M7", LMREG, D_M0+7, 267 268 "X0", LXREG, D_X0+0, 269 "X1", LXREG, D_X0+1, 270 "X2", LXREG, D_X0+2, 271 "X3", LXREG, D_X0+3, 272 "X4", LXREG, D_X0+4, 273 "X5", LXREG, D_X0+5, 274 "X6", LXREG, D_X0+6, 275 "X7", LXREG, D_X0+7, 276 "X8", LXREG, D_X0+8, 277 "X9", LXREG, D_X0+9, 278 "X10", LXREG, D_X0+10, 279 "X11", LXREG, D_X0+11, 280 "X12", LXREG, D_X0+12, 281 "X13", LXREG, D_X0+13, 282 "X14", LXREG, D_X0+14, 283 "X15", LXREG, D_X0+15, 284 285 "CS", LSREG, D_CS, 286 "SS", LSREG, D_SS, 287 "DS", LSREG, D_DS, 288 "ES", LSREG, D_ES, 289 "FS", LSREG, D_FS, 290 "GS", LSREG, D_GS, 291 292 "GDTR", LBREG, D_GDTR, 293 "IDTR", LBREG, D_IDTR, 294 "LDTR", LBREG, D_LDTR, 295 "MSW", LBREG, D_MSW, 296 "TASK", LBREG, D_TASK, 297 298 "CR0", LBREG, D_CR+0, 299 "CR1", LBREG, D_CR+1, 300 "CR2", LBREG, D_CR+2, 301 "CR3", LBREG, D_CR+3, 302 "CR4", LBREG, D_CR+4, 303 "CR5", LBREG, D_CR+5, 304 "CR6", LBREG, D_CR+6, 305 "CR7", LBREG, D_CR+7, 306 "CR8", LBREG, D_CR+8, 307 "CR9", LBREG, D_CR+9, 308 "CR10", LBREG, D_CR+10, 309 "CR11", LBREG, D_CR+11, 310 "CR12", LBREG, D_CR+12, 311 "CR13", LBREG, D_CR+13, 312 "CR14", LBREG, D_CR+14, 313 "CR15", LBREG, D_CR+15, 314 315 "DR0", LBREG, D_DR+0, 316 "DR1", LBREG, D_DR+1, 317 "DR2", LBREG, D_DR+2, 318 "DR3", LBREG, D_DR+3, 319 "DR4", LBREG, D_DR+4, 320 "DR5", LBREG, D_DR+5, 321 "DR6", LBREG, D_DR+6, 322 "DR7", LBREG, D_DR+7, 323 324 "TR0", LBREG, D_TR+0, 325 "TR1", LBREG, D_TR+1, 326 "TR2", LBREG, D_TR+2, 327 "TR3", LBREG, D_TR+3, 328 "TR4", LBREG, D_TR+4, 329 "TR5", LBREG, D_TR+5, 330 "TR6", LBREG, D_TR+6, 331 "TR7", LBREG, D_TR+7, 332 "TLS", LSREG, D_TLS, 333 334 "AAA", LTYPE0, AAAA, 335 "AAD", LTYPE0, AAAD, 336 "AAM", LTYPE0, AAAM, 337 "AAS", LTYPE0, AAAS, 338 "ADCB", LTYPE3, AADCB, 339 "ADCL", LTYPE3, AADCL, 340 "ADCQ", LTYPE3, AADCQ, 341 "ADCW", LTYPE3, AADCW, 342 "ADDB", LTYPE3, AADDB, 343 "ADDL", LTYPE3, AADDL, 344 "ADDQ", LTYPE3, AADDQ, 345 "ADDW", LTYPE3, AADDW, 346 "ADJSP", LTYPE2, AADJSP, 347 "ANDB", LTYPE3, AANDB, 348 "ANDL", LTYPE3, AANDL, 349 "ANDQ", LTYPE3, AANDQ, 350 "ANDW", LTYPE3, AANDW, 351 "ARPL", LTYPE3, AARPL, 352 "BOUNDL", LTYPE3, ABOUNDL, 353 "BOUNDW", LTYPE3, ABOUNDW, 354 "BSFL", LTYPE3, ABSFL, 355 "BSFQ", LTYPE3, ABSFQ, 356 "BSFW", LTYPE3, ABSFW, 357 "BSRL", LTYPE3, ABSRL, 358 "BSRQ", LTYPE3, ABSRQ, 359 "BSRW", LTYPE3, ABSRW, 360 "BSWAPL", LTYPE1, ABSWAPL, 361 "BSWAPQ", LTYPE1, ABSWAPQ, 362 "BTCL", LTYPE3, ABTCL, 363 "BTCQ", LTYPE3, ABTCQ, 364 "BTCW", LTYPE3, ABTCW, 365 "BTL", LTYPE3, ABTL, 366 "BTQ", LTYPE3, ABTQ, 367 "BTRL", LTYPE3, ABTRL, 368 "BTRQ", LTYPE3, ABTRQ, 369 "BTRW", LTYPE3, ABTRW, 370 "BTSL", LTYPE3, ABTSL, 371 "BTSQ", LTYPE3, ABTSQ, 372 "BTSW", LTYPE3, ABTSW, 373 "BTW", LTYPE3, ABTW, 374 "BYTE", LTYPE2, ABYTE, 375 "CALL", LTYPEC, ACALL, 376 "CLC", LTYPE0, ACLC, 377 "CLD", LTYPE0, ACLD, 378 "CLI", LTYPE0, ACLI, 379 "CLTS", LTYPE0, ACLTS, 380 "CMC", LTYPE0, ACMC, 381 "CMPB", LTYPE4, ACMPB, 382 "CMPL", LTYPE4, ACMPL, 383 "CMPQ", LTYPE4, ACMPQ, 384 "CMPW", LTYPE4, ACMPW, 385 "CMPSB", LTYPE0, ACMPSB, 386 "CMPSL", LTYPE0, ACMPSL, 387 "CMPSQ", LTYPE0, ACMPSQ, 388 "CMPSW", LTYPE0, ACMPSW, 389 "CMPXCHG8B", LTYPE1, ACMPXCHG8B, 390 "CMPXCHGB", LTYPE3, ACMPXCHGB, /* LTYPE3? */ 391 "CMPXCHGL", LTYPE3, ACMPXCHGL, 392 "CMPXCHGQ", LTYPE3, ACMPXCHGQ, 393 "CMPXCHGW", LTYPE3, ACMPXCHGW, 394 "CPUID", LTYPE0, ACPUID, 395 "DAA", LTYPE0, ADAA, 396 "DAS", LTYPE0, ADAS, 397 "DATA", LTYPED, ADATA, 398 "DECB", LTYPE1, ADECB, 399 "DECL", LTYPE1, ADECL, 400 "DECQ", LTYPE1, ADECQ, 401 "DECW", LTYPE1, ADECW, 402 "DIVB", LTYPE2, ADIVB, 403 "DIVL", LTYPE2, ADIVL, 404 "DIVQ", LTYPE2, ADIVQ, 405 "DIVW", LTYPE2, ADIVW, 406 "EMMS", LTYPE0, AEMMS, 407 "END", LTYPE0, AEND, 408 "ENTER", LTYPE2, AENTER, 409 "GLOBL", LTYPEG, AGLOBL, 410 "HLT", LTYPE0, AHLT, 411 "IDIVB", LTYPE2, AIDIVB, 412 "IDIVL", LTYPE2, AIDIVL, 413 "IDIVQ", LTYPE2, AIDIVQ, 414 "IDIVW", LTYPE2, AIDIVW, 415 "IMULB", LTYPEI, AIMULB, 416 "IMULL", LTYPEI, AIMULL, 417 "IMULQ", LTYPEI, AIMULQ, 418 "IMUL3Q", LTYPEX, AIMUL3Q, 419 "IMULW", LTYPEI, AIMULW, 420 "INB", LTYPE0, AINB, 421 "INL", LTYPE0, AINL, 422 "INW", LTYPE0, AINW, 423 "INCB", LTYPE1, AINCB, 424 "INCL", LTYPE1, AINCL, 425 "INCQ", LTYPE1, AINCQ, 426 "INCW", LTYPE1, AINCW, 427 "INSB", LTYPE0, AINSB, 428 "INSL", LTYPE0, AINSL, 429 "INSW", LTYPE0, AINSW, 430 "INT", LTYPE2, AINT, 431 "INTO", LTYPE0, AINTO, 432 "INVD", LTYPE0, AINVD, 433 "INVLPG", LTYPE2, AINVLPG, 434 "IRETL", LTYPE0, AIRETL, 435 "IRETQ", LTYPE0, AIRETQ, 436 "IRETW", LTYPE0, AIRETW, 437 438 "JOS", LTYPER, AJOS, 439 "JO", LTYPER, AJOS, /* alternate */ 440 "JOC", LTYPER, AJOC, 441 "JNO", LTYPER, AJOC, /* alternate */ 442 "JCS", LTYPER, AJCS, 443 "JB", LTYPER, AJCS, /* alternate */ 444 "JC", LTYPER, AJCS, /* alternate */ 445 "JNAE", LTYPER, AJCS, /* alternate */ 446 "JLO", LTYPER, AJCS, /* alternate */ 447 "JCC", LTYPER, AJCC, 448 "JAE", LTYPER, AJCC, /* alternate */ 449 "JNB", LTYPER, AJCC, /* alternate */ 450 "JNC", LTYPER, AJCC, /* alternate */ 451 "JHS", LTYPER, AJCC, /* alternate */ 452 "JEQ", LTYPER, AJEQ, 453 "JE", LTYPER, AJEQ, /* alternate */ 454 "JZ", LTYPER, AJEQ, /* alternate */ 455 "JNE", LTYPER, AJNE, 456 "JNZ", LTYPER, AJNE, /* alternate */ 457 "JLS", LTYPER, AJLS, 458 "JBE", LTYPER, AJLS, /* alternate */ 459 "JNA", LTYPER, AJLS, /* alternate */ 460 "JHI", LTYPER, AJHI, 461 "JA", LTYPER, AJHI, /* alternate */ 462 "JNBE", LTYPER, AJHI, /* alternate */ 463 "JMI", LTYPER, AJMI, 464 "JS", LTYPER, AJMI, /* alternate */ 465 "JPL", LTYPER, AJPL, 466 "JNS", LTYPER, AJPL, /* alternate */ 467 "JPS", LTYPER, AJPS, 468 "JP", LTYPER, AJPS, /* alternate */ 469 "JPE", LTYPER, AJPS, /* alternate */ 470 "JPC", LTYPER, AJPC, 471 "JNP", LTYPER, AJPC, /* alternate */ 472 "JPO", LTYPER, AJPC, /* alternate */ 473 "JLT", LTYPER, AJLT, 474 "JL", LTYPER, AJLT, /* alternate */ 475 "JNGE", LTYPER, AJLT, /* alternate */ 476 "JGE", LTYPER, AJGE, 477 "JNL", LTYPER, AJGE, /* alternate */ 478 "JLE", LTYPER, AJLE, 479 "JNG", LTYPER, AJLE, /* alternate */ 480 "JGT", LTYPER, AJGT, 481 "JG", LTYPER, AJGT, /* alternate */ 482 "JNLE", LTYPER, AJGT, /* alternate */ 483 "JCXZL", LTYPER, AJCXZL, 484 "JCXZQ", LTYPER, AJCXZQ, 485 "JMP", LTYPEC, AJMP, 486 "LAHF", LTYPE0, ALAHF, 487 "LARL", LTYPE3, ALARL, 488 "LARW", LTYPE3, ALARW, 489 "LEAL", LTYPE3, ALEAL, 490 "LEAQ", LTYPE3, ALEAQ, 491 "LEAW", LTYPE3, ALEAW, 492 "LEAVEL", LTYPE0, ALEAVEL, 493 "LEAVEQ", LTYPE0, ALEAVEQ, 494 "LEAVEW", LTYPE0, ALEAVEW, 495 "LFENCE", LTYPE0, ALFENCE, 496 "LOCK", LTYPE0, ALOCK, 497 "LODSB", LTYPE0, ALODSB, 498 "LODSL", LTYPE0, ALODSL, 499 "LODSQ", LTYPE0, ALODSQ, 500 "LODSW", LTYPE0, ALODSW, 501 "LONG", LTYPE2, ALONG, 502 "LOOP", LTYPER, ALOOP, 503 "LOOPEQ", LTYPER, ALOOPEQ, 504 "LOOPNE", LTYPER, ALOOPNE, 505 "LSLL", LTYPE3, ALSLL, 506 "LSLW", LTYPE3, ALSLW, 507 "MFENCE", LTYPE0, AMFENCE, 508 "MODE", LTYPE2, AMODE, 509 "MOVB", LTYPE3, AMOVB, 510 "MOVL", LTYPEM, AMOVL, 511 "MOVQ", LTYPEM, AMOVQ, 512 "MOVW", LTYPEM, AMOVW, 513 "MOVBLSX", LTYPE3, AMOVBLSX, 514 "MOVBLZX", LTYPE3, AMOVBLZX, 515 "MOVBQSX", LTYPE3, AMOVBQSX, 516 "MOVBQZX", LTYPE3, AMOVBQZX, 517 "MOVBWSX", LTYPE3, AMOVBWSX, 518 "MOVBWZX", LTYPE3, AMOVBWZX, 519 "MOVLQSX", LTYPE3, AMOVLQSX, 520 "MOVLQZX", LTYPE3, AMOVLQZX, 521 "MOVNTIL", LTYPE3, AMOVNTIL, 522 "MOVNTIQ", LTYPE3, AMOVNTIQ, 523 "MOVQL", LTYPE3, AMOVQL, 524 "MOVWLSX", LTYPE3, AMOVWLSX, 525 "MOVWLZX", LTYPE3, AMOVWLZX, 526 "MOVWQSX", LTYPE3, AMOVWQSX, 527 "MOVWQZX", LTYPE3, AMOVWQZX, 528 "MOVSB", LTYPE0, AMOVSB, 529 "MOVSL", LTYPE0, AMOVSL, 530 "MOVSQ", LTYPE0, AMOVSQ, 531 "MOVSW", LTYPE0, AMOVSW, 532 "MULB", LTYPE2, AMULB, 533 "MULL", LTYPE2, AMULL, 534 "MULQ", LTYPE2, AMULQ, 535 "MULW", LTYPE2, AMULW, 536 "NEGB", LTYPE1, ANEGB, 537 "NEGL", LTYPE1, ANEGL, 538 "NEGQ", LTYPE1, ANEGQ, 539 "NEGW", LTYPE1, ANEGW, 540 "NOP", LTYPEN, ANOP, 541 "NOTB", LTYPE1, ANOTB, 542 "NOTL", LTYPE1, ANOTL, 543 "NOTQ", LTYPE1, ANOTQ, 544 "NOTW", LTYPE1, ANOTW, 545 "ORB", LTYPE3, AORB, 546 "ORL", LTYPE3, AORL, 547 "ORQ", LTYPE3, AORQ, 548 "ORW", LTYPE3, AORW, 549 "OUTB", LTYPE0, AOUTB, 550 "OUTL", LTYPE0, AOUTL, 551 "OUTW", LTYPE0, AOUTW, 552 "OUTSB", LTYPE0, AOUTSB, 553 "OUTSL", LTYPE0, AOUTSL, 554 "OUTSW", LTYPE0, AOUTSW, 555 "PAUSE", LTYPEN, APAUSE, 556 "POPAL", LTYPE0, APOPAL, 557 "POPAW", LTYPE0, APOPAW, 558 "POPFL", LTYPE0, APOPFL, 559 "POPFQ", LTYPE0, APOPFQ, 560 "POPFW", LTYPE0, APOPFW, 561 "POPL", LTYPE1, APOPL, 562 "POPQ", LTYPE1, APOPQ, 563 "POPW", LTYPE1, APOPW, 564 "PUSHAL", LTYPE0, APUSHAL, 565 "PUSHAW", LTYPE0, APUSHAW, 566 "PUSHFL", LTYPE0, APUSHFL, 567 "PUSHFQ", LTYPE0, APUSHFQ, 568 "PUSHFW", LTYPE0, APUSHFW, 569 "PUSHL", LTYPE2, APUSHL, 570 "PUSHQ", LTYPE2, APUSHQ, 571 "PUSHW", LTYPE2, APUSHW, 572 "RCLB", LTYPE3, ARCLB, 573 "RCLL", LTYPE3, ARCLL, 574 "RCLQ", LTYPE3, ARCLQ, 575 "RCLW", LTYPE3, ARCLW, 576 "RCRB", LTYPE3, ARCRB, 577 "RCRL", LTYPE3, ARCRL, 578 "RCRQ", LTYPE3, ARCRQ, 579 "RCRW", LTYPE3, ARCRW, 580 "RDMSR", LTYPE0, ARDMSR, 581 "RDPMC", LTYPE0, ARDPMC, 582 "RDTSC", LTYPE0, ARDTSC, 583 "REP", LTYPE0, AREP, 584 "REPN", LTYPE0, AREPN, 585 "RET", LTYPE0, ARET, 586 "RETFL", LTYPERT,ARETFL, 587 "RETFW", LTYPERT,ARETFW, 588 "RETFQ", LTYPERT,ARETFQ, 589 "ROLB", LTYPE3, AROLB, 590 "ROLL", LTYPE3, AROLL, 591 "ROLQ", LTYPE3, AROLQ, 592 "ROLW", LTYPE3, AROLW, 593 "RORB", LTYPE3, ARORB, 594 "RORL", LTYPE3, ARORL, 595 "RORQ", LTYPE3, ARORQ, 596 "RORW", LTYPE3, ARORW, 597 "RSM", LTYPE0, ARSM, 598 "SAHF", LTYPE0, ASAHF, 599 "SALB", LTYPE3, ASALB, 600 "SALL", LTYPE3, ASALL, 601 "SALQ", LTYPE3, ASALQ, 602 "SALW", LTYPE3, ASALW, 603 "SARB", LTYPE3, ASARB, 604 "SARL", LTYPE3, ASARL, 605 "SARQ", LTYPE3, ASARQ, 606 "SARW", LTYPE3, ASARW, 607 "SBBB", LTYPE3, ASBBB, 608 "SBBL", LTYPE3, ASBBL, 609 "SBBQ", LTYPE3, ASBBQ, 610 "SBBW", LTYPE3, ASBBW, 611 "SCASB", LTYPE0, ASCASB, 612 "SCASL", LTYPE0, ASCASL, 613 "SCASQ", LTYPE0, ASCASQ, 614 "SCASW", LTYPE0, ASCASW, 615 "SETCC", LTYPE1, ASETCC, 616 "SETCS", LTYPE1, ASETCS, 617 "SETEQ", LTYPE1, ASETEQ, 618 "SETGE", LTYPE1, ASETGE, 619 "SETGT", LTYPE1, ASETGT, 620 "SETHI", LTYPE1, ASETHI, 621 "SETLE", LTYPE1, ASETLE, 622 "SETLS", LTYPE1, ASETLS, 623 "SETLT", LTYPE1, ASETLT, 624 "SETMI", LTYPE1, ASETMI, 625 "SETNE", LTYPE1, ASETNE, 626 "SETOC", LTYPE1, ASETOC, 627 "SETOS", LTYPE1, ASETOS, 628 "SETPC", LTYPE1, ASETPC, 629 "SETPL", LTYPE1, ASETPL, 630 "SETPS", LTYPE1, ASETPS, 631 "SFENCE", LTYPE0, ASFENCE, 632 "CDQ", LTYPE0, ACDQ, 633 "CWD", LTYPE0, ACWD, 634 "CQO", LTYPE0, ACQO, 635 "SHLB", LTYPE3, ASHLB, 636 "SHLL", LTYPES, ASHLL, 637 "SHLQ", LTYPES, ASHLQ, 638 "SHLW", LTYPES, ASHLW, 639 "SHRB", LTYPE3, ASHRB, 640 "SHRL", LTYPES, ASHRL, 641 "SHRQ", LTYPES, ASHRQ, 642 "SHRW", LTYPES, ASHRW, 643 "STC", LTYPE0, ASTC, 644 "STD", LTYPE0, ASTD, 645 "STI", LTYPE0, ASTI, 646 "STOSB", LTYPE0, ASTOSB, 647 "STOSL", LTYPE0, ASTOSL, 648 "STOSQ", LTYPE0, ASTOSQ, 649 "STOSW", LTYPE0, ASTOSW, 650 "SUBB", LTYPE3, ASUBB, 651 "SUBL", LTYPE3, ASUBL, 652 "SUBQ", LTYPE3, ASUBQ, 653 "SUBW", LTYPE3, ASUBW, 654 "SYSCALL", LTYPE0, ASYSCALL, 655 "SYSRET", LTYPE0, ASYSRET, 656 "SWAPGS", LTYPE0, ASWAPGS, 657 "TESTB", LTYPE3, ATESTB, 658 "TESTL", LTYPE3, ATESTL, 659 "TESTQ", LTYPE3, ATESTQ, 660 "TESTW", LTYPE3, ATESTW, 661 "TEXT", LTYPET, ATEXT, 662 "VERR", LTYPE2, AVERR, 663 "VERW", LTYPE2, AVERW, 664 "QUAD", LTYPE2, AQUAD, 665 "WAIT", LTYPE0, AWAIT, 666 "WBINVD", LTYPE0, AWBINVD, 667 "WRMSR", LTYPE0, AWRMSR, 668 "WORD", LTYPE2, AWORD, 669 "XADDB", LTYPE3, AXADDB, 670 "XADDL", LTYPE3, AXADDL, 671 "XADDQ", LTYPE3, AXADDQ, 672 "XADDW", LTYPE3, AXADDW, 673 "XCHGB", LTYPE3, AXCHGB, 674 "XCHGL", LTYPE3, AXCHGL, 675 "XCHGQ", LTYPE3, AXCHGQ, 676 "XCHGW", LTYPE3, AXCHGW, 677 "XLAT", LTYPE2, AXLAT, 678 "XORB", LTYPE3, AXORB, 679 "XORL", LTYPE3, AXORL, 680 "XORQ", LTYPE3, AXORQ, 681 "XORW", LTYPE3, AXORW, 682 683 "CMOVLCC", LTYPE3, ACMOVLCC, 684 "CMOVLCS", LTYPE3, ACMOVLCS, 685 "CMOVLEQ", LTYPE3, ACMOVLEQ, 686 "CMOVLGE", LTYPE3, ACMOVLGE, 687 "CMOVLGT", LTYPE3, ACMOVLGT, 688 "CMOVLHI", LTYPE3, ACMOVLHI, 689 "CMOVLLE", LTYPE3, ACMOVLLE, 690 "CMOVLLS", LTYPE3, ACMOVLLS, 691 "CMOVLLT", LTYPE3, ACMOVLLT, 692 "CMOVLMI", LTYPE3, ACMOVLMI, 693 "CMOVLNE", LTYPE3, ACMOVLNE, 694 "CMOVLOC", LTYPE3, ACMOVLOC, 695 "CMOVLOS", LTYPE3, ACMOVLOS, 696 "CMOVLPC", LTYPE3, ACMOVLPC, 697 "CMOVLPL", LTYPE3, ACMOVLPL, 698 "CMOVLPS", LTYPE3, ACMOVLPS, 699 "CMOVQCC", LTYPE3, ACMOVQCC, 700 "CMOVQCS", LTYPE3, ACMOVQCS, 701 "CMOVQEQ", LTYPE3, ACMOVQEQ, 702 "CMOVQGE", LTYPE3, ACMOVQGE, 703 "CMOVQGT", LTYPE3, ACMOVQGT, 704 "CMOVQHI", LTYPE3, ACMOVQHI, 705 "CMOVQLE", LTYPE3, ACMOVQLE, 706 "CMOVQLS", LTYPE3, ACMOVQLS, 707 "CMOVQLT", LTYPE3, ACMOVQLT, 708 "CMOVQMI", LTYPE3, ACMOVQMI, 709 "CMOVQNE", LTYPE3, ACMOVQNE, 710 "CMOVQOC", LTYPE3, ACMOVQOC, 711 "CMOVQOS", LTYPE3, ACMOVQOS, 712 "CMOVQPC", LTYPE3, ACMOVQPC, 713 "CMOVQPL", LTYPE3, ACMOVQPL, 714 "CMOVQPS", LTYPE3, ACMOVQPS, 715 "CMOVWCC", LTYPE3, ACMOVWCC, 716 "CMOVWCS", LTYPE3, ACMOVWCS, 717 "CMOVWEQ", LTYPE3, ACMOVWEQ, 718 "CMOVWGE", LTYPE3, ACMOVWGE, 719 "CMOVWGT", LTYPE3, ACMOVWGT, 720 "CMOVWHI", LTYPE3, ACMOVWHI, 721 "CMOVWLE", LTYPE3, ACMOVWLE, 722 "CMOVWLS", LTYPE3, ACMOVWLS, 723 "CMOVWLT", LTYPE3, ACMOVWLT, 724 "CMOVWMI", LTYPE3, ACMOVWMI, 725 "CMOVWNE", LTYPE3, ACMOVWNE, 726 "CMOVWOC", LTYPE3, ACMOVWOC, 727 "CMOVWOS", LTYPE3, ACMOVWOS, 728 "CMOVWPC", LTYPE3, ACMOVWPC, 729 "CMOVWPL", LTYPE3, ACMOVWPL, 730 "CMOVWPS", LTYPE3, ACMOVWPS, 731 732 "FMOVB", LTYPE3, AFMOVB, 733 "FMOVBP", LTYPE3, AFMOVBP, 734 "FMOVD", LTYPE3, AFMOVD, 735 "FMOVDP", LTYPE3, AFMOVDP, 736 "FMOVF", LTYPE3, AFMOVF, 737 "FMOVFP", LTYPE3, AFMOVFP, 738 "FMOVL", LTYPE3, AFMOVL, 739 "FMOVLP", LTYPE3, AFMOVLP, 740 "FMOVV", LTYPE3, AFMOVV, 741 "FMOVVP", LTYPE3, AFMOVVP, 742 "FMOVW", LTYPE3, AFMOVW, 743 "FMOVWP", LTYPE3, AFMOVWP, 744 "FMOVX", LTYPE3, AFMOVX, 745 "FMOVXP", LTYPE3, AFMOVXP, 746 "FCOMB", LTYPE3, AFCOMB, 747 "FCOMBP", LTYPE3, AFCOMBP, 748 "FCOMD", LTYPE3, AFCOMD, 749 "FCOMDP", LTYPE3, AFCOMDP, 750 "FCOMDPP", LTYPE3, AFCOMDPP, 751 "FCOMF", LTYPE3, AFCOMF, 752 "FCOMFP", LTYPE3, AFCOMFP, 753 "FCOML", LTYPE3, AFCOML, 754 "FCOMLP", LTYPE3, AFCOMLP, 755 "FCOMW", LTYPE3, AFCOMW, 756 "FCOMWP", LTYPE3, AFCOMWP, 757 "FUCOM", LTYPE3, AFUCOM, 758 "FUCOMP", LTYPE3, AFUCOMP, 759 "FUCOMPP", LTYPE3, AFUCOMPP, 760 "FADDW", LTYPE3, AFADDW, 761 "FADDL", LTYPE3, AFADDL, 762 "FADDF", LTYPE3, AFADDF, 763 "FADDD", LTYPE3, AFADDD, 764 "FADDDP", LTYPE3, AFADDDP, 765 "FSUBDP", LTYPE3, AFSUBDP, 766 "FSUBW", LTYPE3, AFSUBW, 767 "FSUBL", LTYPE3, AFSUBL, 768 "FSUBF", LTYPE3, AFSUBF, 769 "FSUBD", LTYPE3, AFSUBD, 770 "FSUBRDP", LTYPE3, AFSUBRDP, 771 "FSUBRW", LTYPE3, AFSUBRW, 772 "FSUBRL", LTYPE3, AFSUBRL, 773 "FSUBRF", LTYPE3, AFSUBRF, 774 "FSUBRD", LTYPE3, AFSUBRD, 775 "FMULDP", LTYPE3, AFMULDP, 776 "FMULW", LTYPE3, AFMULW, 777 "FMULL", LTYPE3, AFMULL, 778 "FMULF", LTYPE3, AFMULF, 779 "FMULD", LTYPE3, AFMULD, 780 "FDIVDP", LTYPE3, AFDIVDP, 781 "FDIVW", LTYPE3, AFDIVW, 782 "FDIVL", LTYPE3, AFDIVL, 783 "FDIVF", LTYPE3, AFDIVF, 784 "FDIVD", LTYPE3, AFDIVD, 785 "FDIVRDP", LTYPE3, AFDIVRDP, 786 "FDIVRW", LTYPE3, AFDIVRW, 787 "FDIVRL", LTYPE3, AFDIVRL, 788 "FDIVRF", LTYPE3, AFDIVRF, 789 "FDIVRD", LTYPE3, AFDIVRD, 790 "FXCHD", LTYPE3, AFXCHD, 791 "FFREE", LTYPE1, AFFREE, 792 "FLDCW", LTYPE2, AFLDCW, 793 "FLDENV", LTYPE1, AFLDENV, 794 "FRSTOR", LTYPE2, AFRSTOR, 795 "FSAVE", LTYPE1, AFSAVE, 796 "FSTCW", LTYPE1, AFSTCW, 797 "FSTENV", LTYPE1, AFSTENV, 798 "FSTSW", LTYPE1, AFSTSW, 799 "F2XM1", LTYPE0, AF2XM1, 800 "FABS", LTYPE0, AFABS, 801 "FCHS", LTYPE0, AFCHS, 802 "FCLEX", LTYPE0, AFCLEX, 803 "FCOS", LTYPE0, AFCOS, 804 "FDECSTP", LTYPE0, AFDECSTP, 805 "FINCSTP", LTYPE0, AFINCSTP, 806 "FINIT", LTYPE0, AFINIT, 807 "FLD1", LTYPE0, AFLD1, 808 "FLDL2E", LTYPE0, AFLDL2E, 809 "FLDL2T", LTYPE0, AFLDL2T, 810 "FLDLG2", LTYPE0, AFLDLG2, 811 "FLDLN2", LTYPE0, AFLDLN2, 812 "FLDPI", LTYPE0, AFLDPI, 813 "FLDZ", LTYPE0, AFLDZ, 814 "FNOP", LTYPE0, AFNOP, 815 "FPATAN", LTYPE0, AFPATAN, 816 "FPREM", LTYPE0, AFPREM, 817 "FPREM1", LTYPE0, AFPREM1, 818 "FPTAN", LTYPE0, AFPTAN, 819 "FRNDINT", LTYPE0, AFRNDINT, 820 "FSCALE", LTYPE0, AFSCALE, 821 "FSIN", LTYPE0, AFSIN, 822 "FSINCOS", LTYPE0, AFSINCOS, 823 "FSQRT", LTYPE0, AFSQRT, 824 "FTST", LTYPE0, AFTST, 825 "FXAM", LTYPE0, AFXAM, 826 "FXTRACT", LTYPE0, AFXTRACT, 827 "FYL2X", LTYPE0, AFYL2X, 828 "FYL2XP1", LTYPE0, AFYL2XP1, 829 830 "ADDPD", LTYPE3, AADDPD, 831 "ADDPS", LTYPE3, AADDPS, 832 "ADDSD", LTYPE3, AADDSD, 833 "ADDSS", LTYPE3, AADDSS, 834 "ANDNPD", LTYPE3, AANDNPD, 835 "ANDNPS", LTYPE3, AANDNPS, 836 "ANDPD", LTYPE3, AANDPD, 837 "ANDPS", LTYPE3, AANDPS, 838 "CMPPD", LTYPEXC,ACMPPD, 839 "CMPPS", LTYPEXC,ACMPPS, 840 "CMPSD", LTYPEXC,ACMPSD, 841 "CMPSS", LTYPEXC,ACMPSS, 842 "COMISD", LTYPE3, ACOMISD, 843 "COMISS", LTYPE3, ACOMISS, 844 "CVTPL2PD", LTYPE3, ACVTPL2PD, 845 "CVTPL2PS", LTYPE3, ACVTPL2PS, 846 "CVTPD2PL", LTYPE3, ACVTPD2PL, 847 "CVTPD2PS", LTYPE3, ACVTPD2PS, 848 "CVTPS2PL", LTYPE3, ACVTPS2PL, 849 "PF2IW", LTYPE3, APF2IW, 850 "PF2IL", LTYPE3, APF2IL, 851 "PF2ID", LTYPE3, APF2IL, /* syn */ 852 "PI2FL", LTYPE3, API2FL, 853 "PI2FD", LTYPE3, API2FL, /* syn */ 854 "PI2FW", LTYPE3, API2FW, 855 "CVTPS2PD", LTYPE3, ACVTPS2PD, 856 "CVTSD2SL", LTYPE3, ACVTSD2SL, 857 "CVTSD2SQ", LTYPE3, ACVTSD2SQ, 858 "CVTSD2SS", LTYPE3, ACVTSD2SS, 859 "CVTSL2SD", LTYPE3, ACVTSL2SD, 860 "CVTSQ2SD", LTYPE3, ACVTSQ2SD, 861 "CVTSL2SS", LTYPE3, ACVTSL2SS, 862 "CVTSQ2SS", LTYPE3, ACVTSQ2SS, 863 "CVTSS2SD", LTYPE3, ACVTSS2SD, 864 "CVTSS2SL", LTYPE3, ACVTSS2SL, 865 "CVTSS2SQ", LTYPE3, ACVTSS2SQ, 866 "CVTTPD2PL", LTYPE3, ACVTTPD2PL, 867 "CVTTPS2PL", LTYPE3, ACVTTPS2PL, 868 "CVTTSD2SL", LTYPE3, ACVTTSD2SL, 869 "CVTTSD2SQ", LTYPE3, ACVTTSD2SQ, 870 "CVTTSS2SL", LTYPE3, ACVTTSS2SL, 871 "CVTTSS2SQ", LTYPE3, ACVTTSS2SQ, 872 "DIVPD", LTYPE3, ADIVPD, 873 "DIVPS", LTYPE3, ADIVPS, 874 "DIVSD", LTYPE3, ADIVSD, 875 "DIVSS", LTYPE3, ADIVSS, 876 "FXRSTOR", LTYPE2, AFXRSTOR, 877 "FXRSTOR64", LTYPE2, AFXRSTOR64, 878 "FXSAVE", LTYPE1, AFXSAVE, 879 "FXSAVE64", LTYPE1, AFXSAVE64, 880 "LDMXCSR", LTYPE2, ALDMXCSR, 881 "MASKMOVOU", LTYPE3, AMASKMOVOU, 882 "MASKMOVDQU", LTYPE3, AMASKMOVOU, /* syn */ 883 "MASKMOVQ", LTYPE3, AMASKMOVQ, 884 "MAXPD", LTYPE3, AMAXPD, 885 "MAXPS", LTYPE3, AMAXPS, 886 "MAXSD", LTYPE3, AMAXSD, 887 "MAXSS", LTYPE3, AMAXSS, 888 "MINPD", LTYPE3, AMINPD, 889 "MINPS", LTYPE3, AMINPS, 890 "MINSD", LTYPE3, AMINSD, 891 "MINSS", LTYPE3, AMINSS, 892 "MOVAPD", LTYPE3, AMOVAPD, 893 "MOVAPS", LTYPE3, AMOVAPS, 894 "MOVD", LTYPE3, AMOVQ, /* syn */ 895 "MOVDQ2Q", LTYPE3, AMOVQ, /* syn */ 896 "MOVO", LTYPE3, AMOVO, 897 "MOVOA", LTYPE3, AMOVO, /* syn */ 898 "MOVOU", LTYPE3, AMOVOU, 899 "MOVHLPS", LTYPE3, AMOVHLPS, 900 "MOVHPD", LTYPE3, AMOVHPD, 901 "MOVHPS", LTYPE3, AMOVHPS, 902 "MOVLHPS", LTYPE3, AMOVLHPS, 903 "MOVLPD", LTYPE3, AMOVLPD, 904 "MOVLPS", LTYPE3, AMOVLPS, 905 "MOVMSKPD", LTYPE3, AMOVMSKPD, 906 "MOVMSKPS", LTYPE3, AMOVMSKPS, 907 "MOVNTO", LTYPE3, AMOVNTO, 908 "MOVNTDQ", LTYPE3, AMOVNTO, /* syn */ 909 "MOVNTPD", LTYPE3, AMOVNTPD, 910 "MOVNTPS", LTYPE3, AMOVNTPS, 911 "MOVNTQ", LTYPE3, AMOVNTQ, 912 "MOVQOZX", LTYPE3, AMOVQOZX, 913 "MOVSD", LTYPE3, AMOVSD, 914 "MOVSS", LTYPE3, AMOVSS, 915 "MOVUPD", LTYPE3, AMOVUPD, 916 "MOVUPS", LTYPE3, AMOVUPS, 917 "MULPD", LTYPE3, AMULPD, 918 "MULPS", LTYPE3, AMULPS, 919 "MULSD", LTYPE3, AMULSD, 920 "MULSS", LTYPE3, AMULSS, 921 "ORPD", LTYPE3, AORPD, 922 "ORPS", LTYPE3, AORPS, 923 "PACKSSLW", LTYPE3, APACKSSLW, 924 "PACKSSWB", LTYPE3, APACKSSWB, 925 "PACKUSWB", LTYPE3, APACKUSWB, 926 "PADDB", LTYPE3, APADDB, 927 "PADDL", LTYPE3, APADDL, 928 "PADDQ", LTYPE3, APADDQ, 929 "PADDSB", LTYPE3, APADDSB, 930 "PADDSW", LTYPE3, APADDSW, 931 "PADDUSB", LTYPE3, APADDUSB, 932 "PADDUSW", LTYPE3, APADDUSW, 933 "PADDW", LTYPE3, APADDW, 934 "PAND", LTYPE3, APAND, 935 "PANDB", LTYPE3, APANDB, 936 "PANDL", LTYPE3, APANDL, 937 "PANDSB", LTYPE3, APANDSB, 938 "PANDSW", LTYPE3, APANDSW, 939 "PANDUSB", LTYPE3, APANDUSB, 940 "PANDUSW", LTYPE3, APANDUSW, 941 "PANDW", LTYPE3, APANDW, 942 "PANDN", LTYPE3, APANDN, 943 "PAVGB", LTYPE3, APAVGB, 944 "PAVGW", LTYPE3, APAVGW, 945 "PCMPEQB", LTYPE3, APCMPEQB, 946 "PCMPEQL", LTYPE3, APCMPEQL, 947 "PCMPEQW", LTYPE3, APCMPEQW, 948 "PCMPGTB", LTYPE3, APCMPGTB, 949 "PCMPGTL", LTYPE3, APCMPGTL, 950 "PCMPGTW", LTYPE3, APCMPGTW, 951 "PEXTRW", LTYPEX, APEXTRW, 952 "PINSRW", LTYPEX, APINSRW, 953 "PINSRD", LTYPEX, APINSRD, 954 "PINSRQ", LTYPEX, APINSRQ, 955 "PMADDWL", LTYPE3, APMADDWL, 956 "PMAXSW", LTYPE3, APMAXSW, 957 "PMAXUB", LTYPE3, APMAXUB, 958 "PMINSW", LTYPE3, APMINSW, 959 "PMINUB", LTYPE3, APMINUB, 960 "PMOVMSKB", LTYPE3, APMOVMSKB, 961 "PMULHRW", LTYPE3, APMULHRW, 962 "PMULHUW", LTYPE3, APMULHUW, 963 "PMULHW", LTYPE3, APMULHW, 964 "PMULLW", LTYPE3, APMULLW, 965 "PMULULQ", LTYPE3, APMULULQ, 966 "POR", LTYPE3, APOR, 967 "PSADBW", LTYPE3, APSADBW, 968 "PSHUFHW", LTYPEX, APSHUFHW, 969 "PSHUFL", LTYPEX, APSHUFL, 970 "PSHUFLW", LTYPEX, APSHUFLW, 971 "PSHUFW", LTYPEX, APSHUFW, 972 "PSHUFB", LTYPEM, APSHUFB, 973 "PSLLO", LTYPE3, APSLLO, 974 "PSLLDQ", LTYPE3, APSLLO, /* syn */ 975 "PSLLL", LTYPE3, APSLLL, 976 "PSLLQ", LTYPE3, APSLLQ, 977 "PSLLW", LTYPE3, APSLLW, 978 "PSRAL", LTYPE3, APSRAL, 979 "PSRAW", LTYPE3, APSRAW, 980 "PSRLO", LTYPE3, APSRLO, 981 "PSRLDQ", LTYPE3, APSRLO, /* syn */ 982 "PSRLL", LTYPE3, APSRLL, 983 "PSRLQ", LTYPE3, APSRLQ, 984 "PSRLW", LTYPE3, APSRLW, 985 "PSUBB", LTYPE3, APSUBB, 986 "PSUBL", LTYPE3, APSUBL, 987 "PSUBQ", LTYPE3, APSUBQ, 988 "PSUBSB", LTYPE3, APSUBSB, 989 "PSUBSW", LTYPE3, APSUBSW, 990 "PSUBUSB", LTYPE3, APSUBUSB, 991 "PSUBUSW", LTYPE3, APSUBUSW, 992 "PSUBW", LTYPE3, APSUBW, 993 "PUNPCKHBW", LTYPE3, APUNPCKHBW, 994 "PUNPCKHLQ", LTYPE3, APUNPCKHLQ, 995 "PUNPCKHQDQ", LTYPE3, APUNPCKHQDQ, 996 "PUNPCKHWL", LTYPE3, APUNPCKHWL, 997 "PUNPCKLBW", LTYPE3, APUNPCKLBW, 998 "PUNPCKLLQ", LTYPE3, APUNPCKLLQ, 999 "PUNPCKLQDQ", LTYPE3, APUNPCKLQDQ, 1000 "PUNPCKLWL", LTYPE3, APUNPCKLWL, 1001 "PXOR", LTYPE3, APXOR, 1002 "RCPPS", LTYPE3, ARCPPS, 1003 "RCPSS", LTYPE3, ARCPSS, 1004 "RSQRTPS", LTYPE3, ARSQRTPS, 1005 "RSQRTSS", LTYPE3, ARSQRTSS, 1006 "SHUFPD", LTYPEX, ASHUFPD, 1007 "SHUFPS", LTYPEX, ASHUFPS, 1008 "SQRTPD", LTYPE3, ASQRTPD, 1009 "SQRTPS", LTYPE3, ASQRTPS, 1010 "SQRTSD", LTYPE3, ASQRTSD, 1011 "SQRTSS", LTYPE3, ASQRTSS, 1012 "STMXCSR", LTYPE1, ASTMXCSR, 1013 "SUBPD", LTYPE3, ASUBPD, 1014 "SUBPS", LTYPE3, ASUBPS, 1015 "SUBSD", LTYPE3, ASUBSD, 1016 "SUBSS", LTYPE3, ASUBSS, 1017 "UCOMISD", LTYPE3, AUCOMISD, 1018 "UCOMISS", LTYPE3, AUCOMISS, 1019 "UNPCKHPD", LTYPE3, AUNPCKHPD, 1020 "UNPCKHPS", LTYPE3, AUNPCKHPS, 1021 "UNPCKLPD", LTYPE3, AUNPCKLPD, 1022 "UNPCKLPS", LTYPE3, AUNPCKLPS, 1023 "XORPD", LTYPE3, AXORPD, 1024 "XORPS", LTYPE3, AXORPS, 1025 "CRC32B", LTYPE4, ACRC32B, 1026 "CRC32Q", LTYPE4, ACRC32Q, 1027 "PREFETCHT0", LTYPE2, APREFETCHT0, 1028 "PREFETCHT1", LTYPE2, APREFETCHT1, 1029 "PREFETCHT2", LTYPE2, APREFETCHT2, 1030 "PREFETCHNTA", LTYPE2, APREFETCHNTA, 1031 "UNDEF", LTYPE0, AUNDEF, 1032 "AESENC", LTYPE3, AAESENC, 1033 "AESENCLAST", LTYPE3, AAESENCLAST, 1034 "AESDEC", LTYPE3, AAESDEC, 1035 "AESDECLAST", LTYPE3, AAESDECLAST, 1036 "AESIMC", LTYPE3, AAESIMC, 1037 "AESKEYGENASSIST", LTYPEX, AAESKEYGENASSIST, 1038 "PSHUFD", LTYPEX, APSHUFD, 1039 "USEFIELD", LTYPEN, AUSEFIELD, 1040 "PCLMULQDQ", LTYPEX, APCLMULQDQ, 1041 "PCDATA", LTYPEPC, APCDATA, 1042 "FUNCDATA", LTYPEF, AFUNCDATA, 1043 0 1044 }; 1045 1046 void 1047 cinit(void) 1048 { 1049 Sym *s; 1050 int i; 1051 1052 nullgen.type = D_NONE; 1053 nullgen.index = D_NONE; 1054 1055 nerrors = 0; 1056 iostack = I; 1057 iofree = I; 1058 peekc = IGN; 1059 nhunk = 0; 1060 for(i=0; i<NHASH; i++) 1061 hash[i] = S; 1062 for(i=0; itab[i].name; i++) { 1063 s = slookup(itab[i].name); 1064 if(s->type != LNAME) 1065 yyerror("double initialization %s", itab[i].name); 1066 s->type = itab[i].type; 1067 s->value = itab[i].value; 1068 } 1069 } 1070 1071 void 1072 checkscale(int scale) 1073 { 1074 1075 switch(scale) { 1076 case 1: 1077 case 2: 1078 case 4: 1079 case 8: 1080 return; 1081 } 1082 yyerror("scale must be 1248: %d", scale); 1083 } 1084 1085 void 1086 syminit(Sym *s) 1087 { 1088 1089 s->type = LNAME; 1090 s->value = 0; 1091 } 1092 1093 void 1094 cclean(void) 1095 { 1096 Addr2 g2; 1097 1098 g2.from = nullgen; 1099 g2.to = nullgen; 1100 outcode(AEND, &g2); 1101 } 1102 1103 static Prog *lastpc; 1104 1105 void 1106 outcode(int a, Addr2 *g2) 1107 { 1108 Prog *p; 1109 Plist *pl; 1110 1111 if(pass == 1) 1112 goto out; 1113 1114 p = malloc(sizeof *p); 1115 memset(p, 0, sizeof *p); 1116 p->as = a; 1117 p->lineno = stmtline; 1118 p->from = g2->from; 1119 p->to = g2->to; 1120 p->pc = pc; 1121 1122 if(lastpc == nil) { 1123 pl = linknewplist(ctxt); 1124 pl->firstpc = p; 1125 } else 1126 lastpc->link = p; 1127 lastpc = p; 1128 1129 out: 1130 if(a != AGLOBL && a != ADATA) 1131 pc++; 1132 } 1133 1134 #include "../cc/lexbody" 1135 #include "../cc/macbody"