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