github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/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 "PCLMULQDQ", LTYPEX, APCLMULQDQ, 1023 "PCDATA", LTYPEPC, APCDATA, 1024 "FUNCDATA", LTYPEF, AFUNCDATA, 1025 0 1026 }; 1027 1028 void 1029 cinit(void) 1030 { 1031 Sym *s; 1032 int i; 1033 1034 nullgen.sym = S; 1035 nullgen.offset = 0; 1036 if(FPCHIP) 1037 nullgen.dval = 0; 1038 for(i=0; i<sizeof(nullgen.sval); i++) 1039 nullgen.sval[i] = 0; 1040 nullgen.type = D_NONE; 1041 nullgen.index = D_NONE; 1042 nullgen.scale = 0; 1043 1044 nerrors = 0; 1045 iostack = I; 1046 iofree = I; 1047 peekc = IGN; 1048 nhunk = 0; 1049 for(i=0; i<NHASH; i++) 1050 hash[i] = S; 1051 for(i=0; itab[i].name; i++) { 1052 s = slookup(itab[i].name); 1053 if(s->type != LNAME) 1054 yyerror("double initialization %s", itab[i].name); 1055 s->type = itab[i].type; 1056 s->value = itab[i].value; 1057 } 1058 1059 pathname = allocn(pathname, 0, 100); 1060 if(getwd(pathname, 99) == 0) { 1061 pathname = allocn(pathname, 100, 900); 1062 if(getwd(pathname, 999) == 0) 1063 strcpy(pathname, "/???"); 1064 } 1065 } 1066 1067 void 1068 checkscale(int scale) 1069 { 1070 1071 switch(scale) { 1072 case 1: 1073 case 2: 1074 case 4: 1075 case 8: 1076 return; 1077 } 1078 yyerror("scale must be 1248: %d", scale); 1079 } 1080 1081 void 1082 syminit(Sym *s) 1083 { 1084 1085 s->type = LNAME; 1086 s->value = 0; 1087 } 1088 1089 void 1090 cclean(void) 1091 { 1092 Gen2 g2; 1093 1094 g2.from = nullgen; 1095 g2.to = nullgen; 1096 outcode(AEND, &g2); 1097 Bflush(&obuf); 1098 } 1099 1100 void 1101 zname(char *n, int t, int s) 1102 { 1103 1104 BPUTLE2(&obuf, ANAME); /* as(2) */ 1105 BPUTC(&obuf, t); /* type */ 1106 BPUTC(&obuf, s); /* sym */ 1107 while(*n) { 1108 BPUTC(&obuf, *n); 1109 n++; 1110 } 1111 BPUTC(&obuf, 0); 1112 } 1113 1114 void 1115 zaddr(Gen *a, int s) 1116 { 1117 int32 l; 1118 int i, t; 1119 char *n; 1120 Ieee e; 1121 1122 t = 0; 1123 if(a->index != D_NONE || a->scale != 0) 1124 t |= T_INDEX; 1125 if(a->offset != 0) { 1126 t |= T_OFFSET; 1127 l = a->offset; 1128 if((vlong)l != a->offset) 1129 t |= T_64; 1130 } 1131 if(s != 0) 1132 t |= T_SYM; 1133 1134 switch(a->type) { 1135 default: 1136 t |= T_TYPE; 1137 break; 1138 case D_FCONST: 1139 t |= T_FCONST; 1140 break; 1141 case D_SCONST: 1142 t |= T_SCONST; 1143 break; 1144 case D_NONE: 1145 break; 1146 } 1147 BPUTC(&obuf, t); 1148 1149 if(t & T_INDEX) { /* implies index, scale */ 1150 BPUTC(&obuf, a->index); 1151 BPUTC(&obuf, a->scale); 1152 } 1153 if(t & T_OFFSET) { /* implies offset */ 1154 l = a->offset; 1155 BPUTLE4(&obuf, l); 1156 if(t & T_64) { 1157 l = a->offset>>32; 1158 BPUTLE4(&obuf, l); 1159 } 1160 } 1161 if(t & T_SYM) /* implies sym */ 1162 BPUTC(&obuf, s); 1163 if(t & T_FCONST) { 1164 ieeedtod(&e, a->dval); 1165 l = e.l; 1166 BPUTLE4(&obuf, l); 1167 l = e.h; 1168 BPUTLE4(&obuf, l); 1169 return; 1170 } 1171 if(t & T_SCONST) { 1172 n = a->sval; 1173 for(i=0; i<NSNAME; i++) { 1174 BPUTC(&obuf, *n); 1175 n++; 1176 } 1177 return; 1178 } 1179 if(t & T_TYPE) 1180 BPUTC(&obuf, a->type); 1181 } 1182 1183 void 1184 outcode(int a, Gen2 *g2) 1185 { 1186 int sf, st, t; 1187 Sym *s; 1188 1189 if(pass == 1) 1190 goto out; 1191 1192 jackpot: 1193 sf = 0; 1194 s = g2->from.sym; 1195 while(s != S) { 1196 sf = s->sym; 1197 if(sf < 0 || sf >= NSYM) 1198 sf = 0; 1199 t = g2->from.type; 1200 if(t == D_ADDR) 1201 t = g2->from.index; 1202 if(h[sf].type == t) 1203 if(h[sf].sym == s) 1204 break; 1205 zname(s->name, t, sym); 1206 s->sym = sym; 1207 h[sym].sym = s; 1208 h[sym].type = t; 1209 sf = sym; 1210 sym++; 1211 if(sym >= NSYM) 1212 sym = 1; 1213 break; 1214 } 1215 st = 0; 1216 s = g2->to.sym; 1217 while(s != S) { 1218 st = s->sym; 1219 if(st < 0 || st >= NSYM) 1220 st = 0; 1221 t = g2->to.type; 1222 if(t == D_ADDR) 1223 t = g2->to.index; 1224 if(h[st].type == t) 1225 if(h[st].sym == s) 1226 break; 1227 zname(s->name, t, sym); 1228 s->sym = sym; 1229 h[sym].sym = s; 1230 h[sym].type = t; 1231 st = sym; 1232 sym++; 1233 if(sym >= NSYM) 1234 sym = 1; 1235 if(st == sf) 1236 goto jackpot; 1237 break; 1238 } 1239 BPUTLE2(&obuf, a); 1240 BPUTLE4(&obuf, stmtline); 1241 zaddr(&g2->from, sf); 1242 zaddr(&g2->to, st); 1243 1244 out: 1245 if(a != AGLOBL && a != ADATA) 1246 pc++; 1247 } 1248 1249 void 1250 outhist(void) 1251 { 1252 Gen g; 1253 Hist *h; 1254 char *p, *q, *op, c; 1255 int n; 1256 char *tofree; 1257 static int first = 1; 1258 static char *goroot, *goroot_final; 1259 1260 if(first) { 1261 // Decide whether we need to rewrite paths from $GOROOT to $GOROOT_FINAL. 1262 first = 0; 1263 goroot = getenv("GOROOT"); 1264 goroot_final = getenv("GOROOT_FINAL"); 1265 if(goroot == nil) 1266 goroot = ""; 1267 if(goroot_final == nil) 1268 goroot_final = goroot; 1269 if(strcmp(goroot, goroot_final) == 0) { 1270 goroot = nil; 1271 goroot_final = nil; 1272 } 1273 } 1274 1275 tofree = nil; 1276 1277 g = nullgen; 1278 c = pathchar(); 1279 for(h = hist; h != H; h = h->link) { 1280 p = h->name; 1281 if(p != nil && goroot != nil) { 1282 n = strlen(goroot); 1283 if(strncmp(p, goroot, strlen(goroot)) == 0 && p[n] == '/') { 1284 tofree = smprint("%s%s", goroot_final, p+n); 1285 p = tofree; 1286 } 1287 } 1288 op = 0; 1289 if(systemtype(Windows) && p && p[1] == ':'){ 1290 c = p[2]; 1291 } else if(p && p[0] != c && h->offset == 0 && pathname){ 1292 if(systemtype(Windows) && pathname[1] == ':') { 1293 op = p; 1294 p = pathname; 1295 c = p[2]; 1296 } else if(pathname[0] == c){ 1297 op = p; 1298 p = pathname; 1299 } 1300 } 1301 while(p) { 1302 q = strchr(p, c); 1303 if(q) { 1304 n = q-p; 1305 if(n == 0){ 1306 n = 1; /* leading "/" */ 1307 *p = '/'; /* don't emit "\" on windows */ 1308 } 1309 q++; 1310 } else { 1311 n = strlen(p); 1312 q = 0; 1313 } 1314 if(n) { 1315 BPUTLE2(&obuf, ANAME); 1316 BPUTC(&obuf, D_FILE); /* type */ 1317 BPUTC(&obuf, 1); /* sym */ 1318 BPUTC(&obuf, '<'); 1319 Bwrite(&obuf, p, n); 1320 BPUTC(&obuf, 0); 1321 } 1322 p = q; 1323 if(p == 0 && op) { 1324 p = op; 1325 op = 0; 1326 } 1327 } 1328 g.offset = h->offset; 1329 1330 BPUTLE2(&obuf, AHISTORY); 1331 BPUTLE4(&obuf, h->line); 1332 zaddr(&nullgen, 0); 1333 zaddr(&g, 0); 1334 1335 if(tofree) { 1336 free(tofree); 1337 tofree = nil; 1338 } 1339 } 1340 } 1341 1342 #include "../cc/lexbody" 1343 #include "../cc/macbody"