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