1 #include "l.h" 2 3 uchar ynone[] = 4 { 5 Ynone, Ynone, Zlit, 1, 6 0 7 }; 8 uchar ytext[] = 9 { 10 Ymb, Yi32, Zpseudo,1, 11 0 12 }; 13 uchar ynop[] = 14 { 15 Ynone, Ynone, Zpseudo,1, 16 Ynone, Yml, Zpseudo,1, 17 Ynone, Yrf, Zpseudo,1, 18 Ynone, Yxyr, Zpseudo,1, 19 Yml, Ynone, Zpseudo,1, 20 Yrf, Ynone, Zpseudo,1, 21 Yxyr, Ynone, Zpseudo,1, 22 0 23 }; 24 uchar yxorb[] = 25 { 26 Yi32, Yal, Zib_, 1, 27 Yi32, Ymb, Zibo_m, 2, 28 Yrb, Ymb, Zr_m, 1, 29 Ymb, Yrb, Zm_r, 1, 30 0 31 }; 32 uchar yxorl[] = 33 { 34 Yi8, Yml, Zibo_m, 2, 35 Yi32, Yax, Zil_, 1, 36 Yi32, Yml, Zilo_m, 2, 37 Yrl, Yml, Zr_m, 1, 38 Yml, Yrl, Zm_r, 1, 39 0 40 }; 41 uchar yaddl[] = 42 { 43 Yi8, Yml, Zibo_m, 2, 44 Yi32, Yax, Zil_, 1, 45 Yi32, Yml, Zilo_m, 2, 46 Yrl, Yml, Zr_m, 1, 47 Yml, Yrl, Zm_r, 1, 48 0 49 }; 50 uchar yincb[] = 51 { 52 Ynone, Ymb, Zo_m, 2, 53 0 54 }; 55 uchar yincw[] = 56 { 57 Ynone, Yml, Zo_m, 2, 58 0 59 }; 60 uchar yincl[] = 61 { 62 /* 32-bit one-byte version is rex prefix (48) in 64-bit mode */ 63 Ynone, Yml, Zo_m, 2, 64 0 65 }; 66 uchar ycmpb[] = 67 { 68 Yal, Yi32, Z_ib, 1, 69 Ymb, Yi32, Zm_ibo, 2, 70 Ymb, Yrb, Zm_r, 1, 71 Yrb, Ymb, Zr_m, 1, 72 0 73 }; 74 uchar ycmpl[] = 75 { 76 Yml, Yi8, Zm_ibo, 2, 77 Yax, Yi32, Z_il, 1, 78 Yml, Yi32, Zm_ilo, 2, 79 Yml, Yrl, Zm_r, 1, 80 Yrl, Yml, Zr_m, 1, 81 0 82 }; 83 uchar yshb[] = 84 { 85 Yi1, Ymb, Zo_m, 2, 86 Yi32, Ymb, Zibo_m, 2, 87 Ycx, Ymb, Zo_m, 2, 88 0 89 }; 90 uchar yshl[] = 91 { 92 Yi1, Yml, Zo_m, 2, 93 Yi32, Yml, Zibo_m, 2, 94 Ycl, Yml, Zo_m, 2, 95 Ycx, Yml, Zo_m, 2, 96 0 97 }; 98 uchar ytestb[] = 99 { 100 Yi32, Yal, Zib_, 1, 101 Yi32, Ymb, Zibo_m, 2, 102 Yrb, Ymb, Zr_m, 1, 103 Ymb, Yrb, Zm_r, 1, 104 0 105 }; 106 uchar ytestl[] = 107 { 108 Yi32, Yax, Zil_, 1, 109 Yi32, Yml, Zilo_m, 2, 110 Yrl, Yml, Zr_m, 1, 111 Yml, Yrl, Zm_r, 1, 112 0 113 }; 114 uchar ymovb[] = 115 { 116 Yrb, Ymb, Zr_m, 1, 117 Ymb, Yrb, Zm_r, 1, 118 Yi32, Yrb, Zib_rp, 1, 119 Yi32, Ymb, Zibo_m, 2, 120 0 121 }; 122 uchar ymbs[] = 123 { 124 Ymb, Ynone, Zm_o, 2, 125 0 126 }; 127 uchar ybtl[] = 128 { 129 Yi8, Yml, Zibo_m, 2, 130 Yrl, Yml, Zr_m, 1, 131 0 132 }; 133 uchar ymovw[] = 134 { 135 Yrl, Yml, Zr_m, 1, 136 Yml, Yrl, Zm_r, 1, 137 Yi0, Yrl, Zclr, 1, 138 Yi32, Yrl, Zil_rp, 1, 139 Yi32, Yml, Zilo_m, 2, 140 Yiauto, Yrl, Zaut_r, 2, 141 0 142 }; 143 uchar ymovl[] = 144 { 145 Yrl, Yml, Zr_m, 1, 146 Yml, Yrl, Zm_r, 1, 147 Yi0, Yrl, Zclr, 1, 148 Yi32, Yrl, Zil_rp, 1, 149 Yi32, Yml, Zilo_m, 2, 150 Yml, Ymr, Zm_r_xm, 1, // MMX MOVD 151 Ymr, Yml, Zr_m_xm, 1, // MMX MOVD 152 Yml, Yxr, Zm_r_xm, 2, // XMM MOVD (32 bit) 153 Yxr, Yml, Zr_m_xm, 2, // XMM MOVD (32 bit) 154 Yiauto, Yrl, Zaut_r, 2, 155 0 156 }; 157 uchar yret[] = 158 { 159 Ynone, Ynone, Zo_iw, 1, 160 Yi32, Ynone, Zo_iw, 1, 161 0 162 }; 163 uchar ymovq[] = 164 { 165 Yrl, Yml, Zr_m, 1, // 0x89 166 Yml, Yrl, Zm_r, 1, // 0x8b 167 Yi0, Yrl, Zclr, 1, // 0x31 168 Ys32, Yrl, Zilo_m, 2, // 32 bit signed 0xc7,(0) 169 Yi64, Yrl, Ziq_rp, 1, // 0xb8 -- 32/64 bit immediate 170 Yi32, Yml, Zilo_m, 2, // 0xc7,(0) 171 Ym, Ymr, Zm_r_xm_nr, 1, // MMX MOVQ (shorter encoding) 172 Ymr, Ym, Zr_m_xm_nr, 1, // MMX MOVQ 173 Ymm, Ymr, Zm_r_xm, 1, // MMX MOVD 174 Ymr, Ymm, Zr_m_xm, 1, // MMX MOVD 175 Yxr, Ymr, Zm_r_xm_nr, 2, // MOVDQ2Q 176 Yxr, Ym, Zr_m_xm_nr, 2, // MOVQ xmm store 177 Yml, Yxr, Zm_r_xm, 2, // MOVD xmm load 178 Yxr, Yml, Zr_m_xm, 2, // MOVD xmm store 179 Yiauto, Yrl, Zaut_r, 2, // built-in LEAQ 180 0 181 }; 182 uchar ymovqq[] = 183 { 184 Yxm, Yyr, Zm_r_xm, 2, // MOVQQx ymm load 185 Yyr, Ym, Zr_m_xm_nr, 2, // MOVQQx ymm store 186 0 187 }; 188 uchar ym_rl[] = 189 { 190 Ym, Yrl, Zm_r, 1, 191 0 192 }; 193 uchar yrl_m[] = 194 { 195 Yrl, Ym, Zr_m, 1, 196 0 197 }; 198 uchar ymb_rl[] = 199 { 200 Ymb, Yrl, Zmb_r, 1, 201 0 202 }; 203 uchar yml_rl[] = 204 { 205 Yml, Yrl, Zm_r, 1, 206 0 207 }; 208 uchar ycrc[] = 209 { 210 Yml, Yrl, Zm_r_xm, 3, 211 0 212 }; 213 uchar ycrcb[] = 214 { 215 Ymb, Yrb, Zm_r_xm, 3, 216 0 217 }; 218 uchar yrl_ml[] = 219 { 220 Yrl, Yml, Zr_m, 1, 221 0 222 }; 223 uchar yml_mb[] = 224 { 225 Yrb, Ymb, Zr_m, 1, 226 Ymb, Yrb, Zm_r, 1, 227 0 228 }; 229 uchar yrb_mb[] = 230 { 231 Yrb, Ymb, Zr_m, 1, 232 0 233 }; 234 uchar yml_ml[] = 235 { 236 Yrl, Yml, Zr_m, 1, 237 Yml, Yrl, Zm_r, 1, 238 0 239 }; 240 uchar ydivl[] = 241 { 242 Yml, Ynone, Zm_o, 2, 243 0 244 }; 245 uchar ydivb[] = 246 { 247 Ymb, Ynone, Zm_o, 2, 248 0 249 }; 250 uchar yimul[] = 251 { 252 Yml, Ynone, Zm_o, 2, 253 Yi8, Yrl, Zib_rr, 1, 254 Yi32, Yrl, Zil_rr, 1, 255 Yml, Yrl, Zm_r, 2, 256 0 257 }; 258 uchar ybyte[] = 259 { 260 Yi64, Ynone, Zbyte, 1, 261 0 262 }; 263 uchar yin[] = 264 { 265 Yi32, Ynone, Zib_, 1, 266 Ynone, Ynone, Zlit, 1, 267 0 268 }; 269 uchar yint[] = 270 { 271 Yi32, Ynone, Zib_, 1, 272 0 273 }; 274 uchar ypushl[] = 275 { 276 Yrl, Ynone, Zrp_, 1, 277 Ym, Ynone, Zm_o, 2, 278 Yi8, Ynone, Zib_, 1, 279 Yi32, Ynone, Zil_, 1, 280 0 281 }; 282 uchar ypopl[] = 283 { 284 Ynone, Yrl, Z_rp, 1, 285 Ynone, Ym, Zo_m, 2, 286 0 287 }; 288 uchar ybswap[] = 289 { 290 Ynone, Yrl, Z_rp, 2, 291 0, 292 }; 293 uchar yscond[] = 294 { 295 Ynone, Ymb, Zo_m, 2, 296 0 297 }; 298 uchar yjcond[] = 299 { 300 Ynone, Ybr, Zbr, 1, 301 0 302 }; 303 uchar yloop[] = 304 { 305 Ynone, Ybr, Zloop, 1, 306 0 307 }; 308 uchar ycall[] = 309 { 310 Ynone, Yml, Zo_m64, 2, 311 Ynone, Ybr, Zcall, 1, 312 0 313 }; 314 uchar yjmp[] = 315 { 316 Ynone, Yml, Zo_m64, 2, 317 Ynone, Ybr, Zjmp, 1, 318 0 319 }; 320 321 uchar yfmvd[] = 322 { 323 Ym, Yf0, Zm_o, 2, 324 Yf0, Ym, Zo_m, 2, 325 Yrf, Yf0, Zm_o, 2, 326 Yf0, Yrf, Zo_m, 2, 327 0 328 }; 329 uchar yfmvdp[] = 330 { 331 Yf0, Ym, Zo_m, 2, 332 Yf0, Yrf, Zo_m, 2, 333 0 334 }; 335 uchar yfmvf[] = 336 { 337 Ym, Yf0, Zm_o, 2, 338 Yf0, Ym, Zo_m, 2, 339 0 340 }; 341 uchar yfmvx[] = 342 { 343 Ym, Yf0, Zm_o, 2, 344 0 345 }; 346 uchar yfmvp[] = 347 { 348 Yf0, Ym, Zo_m, 2, 349 0 350 }; 351 uchar yfadd[] = 352 { 353 Ym, Yf0, Zm_o, 2, 354 Yrf, Yf0, Zm_o, 2, 355 Yf0, Yrf, Zo_m, 2, 356 0 357 }; 358 uchar yfaddp[] = 359 { 360 Yf0, Yrf, Zo_m, 2, 361 0 362 }; 363 uchar yfxch[] = 364 { 365 Yf0, Yrf, Zo_m, 2, 366 Yrf, Yf0, Zm_o, 2, 367 0 368 }; 369 uchar ycompp[] = 370 { 371 Yf0, Yrf, Zo_m, 2, /* botch is really f0,f1 */ 372 0 373 }; 374 uchar ystsw[] = 375 { 376 Ynone, Ym, Zo_m, 2, 377 Ynone, Yax, Zlit, 1, 378 0 379 }; 380 uchar ystcw[] = 381 { 382 Ynone, Ym, Zo_m, 2, 383 Ym, Ynone, Zm_o, 2, 384 0 385 }; 386 uchar ysvrs[] = 387 { 388 Ynone, Ym, Zo_m, 2, 389 Ym, Ynone, Zm_o, 2, 390 0 391 }; 392 uchar ymm[] = 393 { 394 Ymm, Ymr, Zm_r_xm, 1, 395 Yxm, Yxyr, Zm_r_xm, 2, 396 0 397 }; 398 uchar yxm[] = 399 { 400 Yxm, Yxr, Zm_r_xm, 1, 401 0 402 }; 403 uchar yxcvm1[] = 404 { 405 Yxm, Yxr, Zm_r_xm, 2, 406 Yxm, Ymr, Zm_r_xm, 2, 407 0 408 }; 409 uchar yxcvm2[] = 410 { 411 Yxm, Yxr, Zm_r_xm, 2, 412 Ymm, Yxr, Zm_r_xm, 2, 413 0 414 }; 415 uchar yxmq[] = 416 { 417 Yxm, Yxr, Zm_r_xm, 2, 418 0 419 }; 420 uchar yxr[] = 421 { 422 Yxr, Yxr, Zm_r_xm, 1, 423 0 424 }; 425 uchar yxr_ml[] = 426 { 427 Yxr, Yml, Zr_m_xm, 1, 428 0 429 }; 430 uchar ymr[] = 431 { 432 Ymr, Ymr, Zm_r, 1, 433 0 434 }; 435 uchar ymr_ml[] = 436 { 437 Ymr, Yml, Zr_m_xm, 1, 438 0 439 }; 440 uchar yxcmp[] = 441 { 442 Yxm, Yxr, Zm_r_xm, 1, 443 0 444 }; 445 uchar yxcmpi[] = 446 { 447 Yxm, Yxr, Zm_r_i_xm, 2, 448 0 449 }; 450 uchar yxmov[] = 451 { 452 Yxm, Yxr, Zm_r_xm, 1, 453 Yxr, Yxm, Zr_m_xm, 1, 454 0 455 }; 456 uchar yxcvfl[] = 457 { 458 Yxm, Yrl, Zm_r_xm, 1, 459 0 460 }; 461 uchar yxcvlf[] = 462 { 463 Yml, Yxr, Zm_r_xm, 1, 464 0 465 }; 466 uchar yxcvfq[] = 467 { 468 Yxm, Yrl, Zm_r_xm, 2, 469 0 470 }; 471 uchar yxcvqf[] = 472 { 473 Yml, Yxr, Zm_r_xm, 2, 474 0 475 }; 476 uchar yps[] = 477 { 478 Ymm, Ymr, Zm_r_xm, 1, 479 Yi8, Ymr, Zibo_m_xm, 2, 480 Yxm, Yxr, Zm_r_xm, 2, 481 Yi8, Yxr, Zibo_m_xm, 3, 482 0 483 }; 484 uchar yxrrl[] = 485 { 486 Yxr, Yrl, Zm_r, 1, 487 0 488 }; 489 uchar ymfp[] = 490 { 491 Ymm, Ymr, Zm_r_3d, 1, 492 0, 493 }; 494 uchar ymrxr[] = 495 { 496 Yxm, Yxyr, Zm_r_xm, 2, 497 0 498 }; 499 uchar ymrxrmv[] = 500 { 501 Ymr, Yxr, Zm_r, 1, 502 Yxm, Yxyr, Zm_r_xm, 1, 503 0 504 }; 505 uchar ymshuf[] = 506 { 507 Ymm, Ymr, Zibm_r, 1, 508 0 509 }; 510 uchar yxshuf[] = 511 { 512 Yxm, Yxyr, Zibm_r, 1, 513 0 514 }; 515 uchar yxshuf2[] = 516 { 517 Yxm, Yxyr, Zm_r_i_xm, 2, 518 0 519 }; 520 uchar yextrw[] = 521 { 522 Yxr, Yrl, Zibm_r, 1, 523 0 524 }; 525 uchar ypsdq[] = 526 { 527 Yi8, Yxyr, Zibo_m, 2, 528 0 529 }; 530 uchar ymskb[] = 531 { 532 Yxyr, Yrl, Zm_r_xm, 2, 533 Ymr, Yrl, Zm_r_xm, 1, 534 0 535 }; 536 uchar yaes[] = { 537 Yi8, Yxyr, Zr_m_i_xm, 3, 538 0 539 }; 540 541 Optab optab[] = 542 /* as, ytab, andproto, opcode */ 543 { 544 { AXXX }, 545 { AAAA, ynone, P32, 0x37 }, 546 { AAAD, ynone, P32, 0xd5,0x0a }, 547 { AAAM, ynone, P32, 0xd4,0x0a }, 548 { AAAS, ynone, P32, 0x3f }, 549 { AADCB, yxorb, Pb, 0x14,0x80,(02),0x10,0x10 }, 550 { AADCL, yxorl, Px, 0x83,(02),0x15,0x81,(02),0x11,0x13 }, 551 { AADCQ, yxorl, Pw, 0x83,(02),0x15,0x81,(02),0x11,0x13 }, 552 { AADCW, yxorl, Pe, 0x83,(02),0x15,0x81,(02),0x11,0x13 }, 553 { AADDB, yxorb, Pb, 0x04,0x80,(00),0x00,0x02 }, 554 { AADDL, yaddl, Px, 0x83,(00),0x05,0x81,(00),0x01,0x03 }, 555 { AADDPD, yxm, Pq, 0x58 }, 556 { AADDPS, yxm, Pm, 0x58 }, 557 { AADDQ, yaddl, Pw, 0x83,(00),0x05,0x81,(00),0x01,0x03 }, 558 { AADDSD, yxm, Pf2, 0x58 }, 559 { AADDSS, yxm, Pf3, 0x58 }, 560 { AADDW, yaddl, Pe, 0x83,(00),0x05,0x81,(00),0x01,0x03 }, 561 { AADJSP }, 562 { AANDB, yxorb, Pb, 0x24,0x80,(04),0x20,0x22 }, 563 { AANDL, yxorl, Px, 0x83,(04),0x25,0x81,(04),0x21,0x23 }, 564 { AANDNPD, yxm, Pq, 0x55 }, 565 { AANDNPS, yxm, Pm, 0x55 }, 566 { AANDPD, yxm, Pq, 0x54 }, 567 { AANDPS, yxm, Pq, 0x54 }, 568 { AANDQ, yxorl, Pw, 0x83,(04),0x25,0x81,(04),0x21,0x23 }, 569 { AANDW, yxorl, Pe, 0x83,(04),0x25,0x81,(04),0x21,0x23 }, 570 { AARPL, yrl_ml, P32, 0x63 }, 571 { ABOUNDL, yrl_m, P32, 0x62 }, 572 { ABOUNDW, yrl_m, Pe, 0x62 }, 573 { ABSFL, yml_rl, Pm, 0xbc }, 574 { ABSFQ, yml_rl, Pw, 0x0f,0xbc }, 575 { ABSFW, yml_rl, Pq, 0xbc }, 576 { ABSRL, yml_rl, Pm, 0xbd }, 577 { ABSRQ, yml_rl, Pw, 0x0f,0xbd }, 578 { ABSRW, yml_rl, Pq, 0xbd }, 579 { ABSWAPL, ybswap, Px, 0x0f,0xc8 }, 580 { ABSWAPQ, ybswap, Pw, 0x0f,0xc8 }, 581 { ABTCL, ybtl, Pm, 0xba,(07),0xbb }, 582 { ABTCQ, ybtl, Pw, 0x0f,0xba,(07),0x0f,0xbb }, 583 { ABTCW, ybtl, Pq, 0xba,(07),0xbb }, 584 { ABTL, ybtl, Pm, 0xba,(04),0xa3 }, 585 { ABTQ, ybtl, Pw, 0x0f,0xba,(04),0x0f,0xa3}, 586 { ABTRL, ybtl, Pm, 0xba,(06),0xb3 }, 587 { ABTRQ, ybtl, Pw, 0x0f,0xba,(06),0x0f,0xb3 }, 588 { ABTRW, ybtl, Pq, 0xba,(06),0xb3 }, 589 { ABTSL, ybtl, Pm, 0xba,(05),0xab }, 590 { ABTSQ, ybtl, Pw, 0x0f,0xba,(05),0x0f,0xab }, 591 { ABTSW, ybtl, Pq, 0xba,(05),0xab }, 592 { ABTW, ybtl, Pq, 0xba,(04),0xa3 }, 593 { ABYTE, ybyte, Px, 1 }, 594 { ACALL, ycall, Px, 0xff,(02),0xe8 }, 595 { ACDQ, ynone, Px, 0x99 }, 596 { ACLC, ynone, Px, 0xf8 }, 597 { ACLD, ynone, Px, 0xfc }, 598 { ACLI, ynone, Px, 0xfa }, 599 { ACLTS, ynone, Pm, 0x06 }, 600 { ACMC, ynone, Px, 0xf5 }, 601 { ACMOVLCC, yml_rl, Pm, 0x43 }, 602 { ACMOVLCS, yml_rl, Pm, 0x42 }, 603 { ACMOVLEQ, yml_rl, Pm, 0x44 }, 604 { ACMOVLGE, yml_rl, Pm, 0x4d }, 605 { ACMOVLGT, yml_rl, Pm, 0x4f }, 606 { ACMOVLHI, yml_rl, Pm, 0x47 }, 607 { ACMOVLLE, yml_rl, Pm, 0x4e }, 608 { ACMOVLLS, yml_rl, Pm, 0x46 }, 609 { ACMOVLLT, yml_rl, Pm, 0x4c }, 610 { ACMOVLMI, yml_rl, Pm, 0x48 }, 611 { ACMOVLNE, yml_rl, Pm, 0x45 }, 612 { ACMOVLOC, yml_rl, Pm, 0x41 }, 613 { ACMOVLOS, yml_rl, Pm, 0x40 }, 614 { ACMOVLPC, yml_rl, Pm, 0x4b }, 615 { ACMOVLPL, yml_rl, Pm, 0x49 }, 616 { ACMOVLPS, yml_rl, Pm, 0x4a }, 617 { ACMOVQCC, yml_rl, Pw, 0x0f,0x43 }, 618 { ACMOVQCS, yml_rl, Pw, 0x0f,0x42 }, 619 { ACMOVQEQ, yml_rl, Pw, 0x0f,0x44 }, 620 { ACMOVQGE, yml_rl, Pw, 0x0f,0x4d }, 621 { ACMOVQGT, yml_rl, Pw, 0x0f,0x4f }, 622 { ACMOVQHI, yml_rl, Pw, 0x0f,0x47 }, 623 { ACMOVQLE, yml_rl, Pw, 0x0f,0x4e }, 624 { ACMOVQLS, yml_rl, Pw, 0x0f,0x46 }, 625 { ACMOVQLT, yml_rl, Pw, 0x0f,0x4c }, 626 { ACMOVQMI, yml_rl, Pw, 0x0f,0x48 }, 627 { ACMOVQNE, yml_rl, Pw, 0x0f,0x45 }, 628 { ACMOVQOC, yml_rl, Pw, 0x0f,0x41 }, 629 { ACMOVQOS, yml_rl, Pw, 0x0f,0x40 }, 630 { ACMOVQPC, yml_rl, Pw, 0x0f,0x4b }, 631 { ACMOVQPL, yml_rl, Pw, 0x0f,0x49 }, 632 { ACMOVQPS, yml_rl, Pw, 0x0f,0x4a }, 633 { ACMOVWCC, yml_rl, Pq, 0x43 }, 634 { ACMOVWCS, yml_rl, Pq, 0x42 }, 635 { ACMOVWEQ, yml_rl, Pq, 0x44 }, 636 { ACMOVWGE, yml_rl, Pq, 0x4d }, 637 { ACMOVWGT, yml_rl, Pq, 0x4f }, 638 { ACMOVWHI, yml_rl, Pq, 0x47 }, 639 { ACMOVWLE, yml_rl, Pq, 0x4e }, 640 { ACMOVWLS, yml_rl, Pq, 0x46 }, 641 { ACMOVWLT, yml_rl, Pq, 0x4c }, 642 { ACMOVWMI, yml_rl, Pq, 0x48 }, 643 { ACMOVWNE, yml_rl, Pq, 0x45 }, 644 { ACMOVWOC, yml_rl, Pq, 0x41 }, 645 { ACMOVWOS, yml_rl, Pq, 0x40 }, 646 { ACMOVWPC, yml_rl, Pq, 0x4b }, 647 { ACMOVWPL, yml_rl, Pq, 0x49 }, 648 { ACMOVWPS, yml_rl, Pq, 0x4a }, 649 { ACMPB, ycmpb, Pb, 0x3c,0x80,(07),0x38,0x3a }, 650 { ACMPL, ycmpl, Px, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, 651 { ACMPPD, yxcmpi, Px, Pe,0xc2 }, 652 { ACMPPS, yxcmpi, Pm, 0xc2,0 }, 653 { ACMPQ, ycmpl, Pw, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, 654 { ACMPSB, ynone, Pb, 0xa6 }, 655 { ACMPSD, yxcmpi, Px, Pf2,0xc2 }, 656 { ACMPSL, ynone, Px, 0xa7 }, 657 { ACMPSQ, ynone, Pw, 0xa7 }, 658 { ACMPSS, yxcmpi, Px, Pf3,0xc2 }, 659 { ACMPSW, ynone, Pe, 0xa7 }, 660 { ACMPW, ycmpl, Pe, 0x83,(07),0x3d,0x81,(07),0x39,0x3b }, 661 { ACOMISD, yxcmp, Pe, 0x2f }, 662 { ACOMISS, yxcmp, Pm, 0x2f }, 663 { ACPUID, ynone, Pm, 0xa2 }, 664 { ACVTPL2PD, yxcvm2, Px, Pf3,0xe6,Pe,0x2a }, 665 { ACVTPL2PS, yxcvm2, Pm, 0x5b,0,0x2a,0, }, 666 { ACVTPD2PL, yxcvm1, Px, Pf2,0xe6,Pe,0x2d }, 667 { ACVTPD2PS, yxm, Pe, 0x5a }, 668 { ACVTPS2PL, yxcvm1, Px, Pe,0x5b,Pm,0x2d }, 669 { ACVTPS2PD, yxm, Pm, 0x5a }, 670 { API2FW, ymfp, Px, 0x0c }, 671 { ACVTSD2SL, yxcvfl, Pf2, 0x2d }, 672 { ACVTSD2SQ, yxcvfq, Pw, Pf2,0x2d }, 673 { ACVTSD2SS, yxm, Pf2, 0x5a }, 674 { ACVTSL2SD, yxcvlf, Pf2, 0x2a }, 675 { ACVTSQ2SD, yxcvqf, Pw, Pf2,0x2a }, 676 { ACVTSL2SS, yxcvlf, Pf3, 0x2a }, 677 { ACVTSQ2SS, yxcvqf, Pw, Pf3,0x2a }, 678 { ACVTSS2SD, yxm, Pf3, 0x5a }, 679 { ACVTSS2SL, yxcvfl, Pf3, 0x2d }, 680 { ACVTSS2SQ, yxcvfq, Pw, Pf3,0x2d }, 681 { ACVTTPD2PL, yxcvm1, Px, Pe,0xe6,Pe,0x2c }, 682 { ACVTTPS2PL, yxcvm1, Px, Pf3,0x5b,Pm,0x2c }, 683 { ACVTTSD2SL, yxcvfl, Pf2, 0x2c }, 684 { ACVTTSD2SQ, yxcvfq, Pw, Pf2,0x2c }, 685 { ACVTTSS2SL, yxcvfl, Pf3, 0x2c }, 686 { ACVTTSS2SQ, yxcvfq, Pw, Pf3,0x2c }, 687 { ACWD, ynone, Pe, 0x99 }, 688 { ACQO, ynone, Pw, 0x99 }, 689 { ADAA, ynone, P32, 0x27 }, 690 { ADAS, ynone, P32, 0x2f }, 691 { ADATA }, 692 { ADECB, yincb, Pb, 0xfe,(01) }, 693 { ADECL, yincl, Px, 0xff,(01) }, 694 { ADECQ, yincl, Pw, 0xff,(01) }, 695 { ADECW, yincw, Pe, 0xff,(01) }, 696 { ADIVB, ydivb, Pb, 0xf6,(06) }, 697 { ADIVL, ydivl, Px, 0xf7,(06) }, 698 { ADIVPD, yxm, Pe, 0x5e }, 699 { ADIVPS, yxm, Pm, 0x5e }, 700 { ADIVQ, ydivl, Pw, 0xf7,(06) }, 701 { ADIVSD, yxm, Pf2, 0x5e }, 702 { ADIVSS, yxm, Pf3, 0x5e }, 703 { ADIVW, ydivl, Pe, 0xf7,(06) }, 704 { AEMMS, ynone, Pm, 0x77 }, 705 { AENTER }, /* botch */ 706 { AFXRSTOR, ysvrs, Pm, 0xae,(01),0xae,(01) }, 707 { AFXSAVE, ysvrs, Pm, 0xae,(00),0xae,(00) }, 708 { AFXRSTOR64, ysvrs, Pw, 0x0f,0xae,(01),0x0f,0xae,(01) }, 709 { AFXSAVE64, ysvrs, Pw, 0x0f,0xae,(00),0x0f,0xae,(00) }, 710 { AGLOBL }, 711 { AGOK }, 712 { AHISTORY }, 713 { AHLT, ynone, Px, 0xf4 }, 714 { AIDIVB, ydivb, Pb, 0xf6,(07) }, 715 { AIDIVL, ydivl, Px, 0xf7,(07) }, 716 { AIDIVQ, ydivl, Pw, 0xf7,(07) }, 717 { AIDIVW, ydivl, Pe, 0xf7,(07) }, 718 { AIMULB, ydivb, Pb, 0xf6,(05) }, 719 { AIMULL, yimul, Px, 0xf7,(05),0x6b,0x69,Pm,0xaf }, 720 { AIMULQ, yimul, Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf }, 721 { AIMULW, yimul, Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf }, 722 { AINB, yin, Pb, 0xe4,0xec }, 723 { AINCB, yincb, Pb, 0xfe,(00) }, 724 { AINCL, yincl, Px, 0xff,(00) }, 725 { AINCQ, yincl, Pw, 0xff,(00) }, 726 { AINCW, yincw, Pe, 0xff,(00) }, 727 { AINL, yin, Px, 0xe5,0xed }, 728 { AINSB, ynone, Pb, 0x6c }, 729 { AINSL, ynone, Px, 0x6d }, 730 { AINSW, ynone, Pe, 0x6d }, 731 { AINT, yint, Px, 0xcd }, 732 { AINTO, ynone, P32, 0xce }, 733 { AINW, yin, Pe, 0xe5,0xed }, 734 { AIRETL, ynone, Px, 0xcf }, 735 { AIRETQ, ynone, Pw, 0xcf }, 736 { AIRETW, ynone, Pe, 0xcf }, 737 { AJCC, yjcond, Px, 0x73,0x83,(00) }, 738 { AJCS, yjcond, Px, 0x72,0x82 }, 739 { AJCXZ, yloop, Px, 0xe3 }, 740 { AJEQ, yjcond, Px, 0x74,0x84 }, 741 { AJGE, yjcond, Px, 0x7d,0x8d }, 742 { AJGT, yjcond, Px, 0x7f,0x8f }, 743 { AJHI, yjcond, Px, 0x77,0x87 }, 744 { AJLE, yjcond, Px, 0x7e,0x8e }, 745 { AJLS, yjcond, Px, 0x76,0x86 }, 746 { AJLT, yjcond, Px, 0x7c,0x8c }, 747 { AJMI, yjcond, Px, 0x78,0x88 }, 748 { AJMP, yjmp, Px, 0xff,(04),0xeb,0xe9 }, 749 { AJNE, yjcond, Px, 0x75,0x85 }, 750 { AJOC, yjcond, Px, 0x71,0x81,(00) }, 751 { AJOS, yjcond, Px, 0x70,0x80,(00) }, 752 { AJPC, yjcond, Px, 0x7b,0x8b }, 753 { AJPL, yjcond, Px, 0x79,0x89 }, 754 { AJPS, yjcond, Px, 0x7a,0x8a }, 755 { ALAHF, ynone, Px, 0x9f }, 756 { ALARL, yml_rl, Pm, 0x02 }, 757 { ALARW, yml_rl, Pq, 0x02 }, 758 { ALDMXCSR, ysvrs, Pm, 0xae,(02),0xae,(02) }, 759 { ALEAL, ym_rl, Px, 0x8d }, 760 { ALEAQ, ym_rl, Pw, 0x8d }, 761 { ALEAVEL, ynone, P32, 0xc9 }, 762 { ALEAVEQ, ynone, Py, 0xc9 }, 763 { ALEAVEW, ynone, Pe, 0xc9 }, 764 { ALEAW, ym_rl, Pe, 0x8d }, 765 { ALOCK, ynone, Px, 0xf0 }, 766 { ALODSB, ynone, Pb, 0xac }, 767 { ALODSL, ynone, Px, 0xad }, 768 { ALODSQ, ynone, Pw, 0xad }, 769 { ALODSW, ynone, Pe, 0xad }, 770 { ALONG, ybyte, Px, 4 }, 771 { ALOOP, yloop, Px, 0xe2 }, 772 { ALOOPEQ, yloop, Px, 0xe1 }, 773 { ALOOPNE, yloop, Px, 0xe0 }, 774 { ALSLL, yml_rl, Pm, 0x03 }, 775 { ALSLW, yml_rl, Pq, 0x03 }, 776 { AMASKMOVDQU, yxr, Pe, 0xf7 }, 777 { AMASKMOVQ, ymr, Pm, 0xf7 }, 778 { AMAXPD, yxm, Pe, 0x5f }, 779 { AMAXPS, yxm, Pm, 0x5f }, 780 { AMAXSD, yxm, Pf2, 0x5f }, 781 { AMAXSS, yxm, Pf3, 0x5f }, 782 { AMINPD, yxm, Pe, 0x5d }, 783 { AMINPS, yxm, Pm, 0x5d }, 784 { AMINSD, yxm, Pf2, 0x5d }, 785 { AMINSS, yxm, Pf3, 0x5d }, 786 { AMOVAPD, yxmov, Pe|P2, 0x28,0x29 }, 787 { AMOVAPS, yxmov, Pm|P2, 0x28,0x29 }, 788 { AMOVB, ymovb, Pb, 0x88,0x8a,0xb0,0xc6,(00) }, 789 { AMOVBLSX, ymb_rl, Pm, 0xbe }, 790 { AMOVBLZX, ymb_rl, Pm, 0xb6 }, 791 { AMOVBQSX, ymb_rl, Pw, 0x0f,0xbe }, 792 { AMOVBQZX, ymb_rl, Pw, 0x0f,0xb6 }, 793 { AMOVBWSX, ymb_rl, Pq, 0xbe }, 794 { AMOVBWZX, ymb_rl, Pq, 0xb6 }, 795 { AMOVO, yxmov, Pe, 0x6f,0x7f }, 796 { AMOVDQA, yxmov, Pe|P2, 0x6f,0x7f }, 797 { AMOVDQU, yxmov, Pf3|P2, 0x6f,0x7f }, 798 { AMOVHLPS, yxr, Pm, 0x12 }, 799 { AMOVHPD, yxmov, Pe|P2, 0x16,0x17 }, 800 { AMOVHPS, yxmov, Pm|P2, 0x16,0x17 }, 801 { AMOVL, ymovl, Px, 0x89,0x8b,0x31,0xb8,0xc7,(00),0x6e,0x7e,Pe,0x6e,Pe,0x7e }, 802 { AMOVLHPS, yxr, Pm, 0x16 }, 803 { AMOVLPD, yxmov, Pe|P2, 0x12,0x13 }, 804 { AMOVLPS, yxmov, Pm|P2, 0x12,0x13 }, 805 { AMOVLQSX, yml_rl, Pw, 0x63 }, 806 { AMOVLQZX, yml_rl, Px, 0x8b }, 807 { AMOVMSKPD, yxrrl, Pq, 0x50 }, 808 { AMOVMSKPS, yxrrl, Pm, 0x50 }, 809 { AMOVNTDQ, yxr_ml, Pe, 0xe7 }, 810 { AMOVNTPD, yxr_ml, Pe, 0x2b }, 811 { AMOVNTPS, yxr_ml, Pm, 0x2b }, 812 { AMOVNTQ, ymr_ml, Pm, 0xe7 }, 813 { AMOVQ, ymovq, Pw|P2, 0x89,0x8b,0x31,0xc7,(00),0xb8,0xc7,(00),0x6f,0x7f,0x6e,0x7e,Pf2,0xd6,Pe,0xd6,Pe,0x6e,Pe,0x7e }, 814 { AMOVQL, yrl_ml, Px, 0x89 }, 815 { AMOVQQA, ymovqq, P2, Pe,0x6f,Pe,0x7f }, 816 { AMOVQQU, ymovqq, P2, Pf3,0x6f,Pf3,0x7f }, 817 { AMOVQOZX, ymrxrmv, Pf3, 0xd6,0x7e }, 818 { AMOVSB, ynone, Pb, 0xa4 }, 819 { AMOVSD, yxmov, Pf2|P2, 0x10,0x11 }, 820 { AMOVSL, ynone, Px, 0xa5 }, 821 { AMOVSQ, ynone, Pw, 0xa5 }, 822 { AMOVSS, yxmov, Pf3|P2, 0x10,0x11 }, 823 { AMOVSW, ynone, Pe, 0xa5 }, 824 { AMOVUPD, yxmov, Pe|P2, 0x10,0x11 }, 825 { AMOVUPS, yxmov, Pm|P2, 0x10,0x11 }, 826 { AMOVW, ymovw, Pe, 0x89,0x8b,0x31,0xb8,0xc7,(00) }, 827 { AMOVWLSX, yml_rl, Pm, 0xbf }, 828 { AMOVWLZX, yml_rl, Pm, 0xb7 }, 829 { AMOVWQSX, yml_rl, Pw, 0x0f,0xbf }, 830 { AMOVWQZX, yml_rl, Pw, 0x0f,0xb7 }, 831 { AMULB, ydivb, Pb, 0xf6,(04) }, 832 { AMULL, ydivl, Px, 0xf7,(04) }, 833 { AMULPD, yxm, Pe, 0x59 }, 834 { AMULPS, yxm, Ym, 0x59 }, 835 { AMULQ, ydivl, Pw, 0xf7,(04) }, 836 { AMULSD, yxm, Pf2, 0x59 }, 837 { AMULSS, yxm, Pf3, 0x59 }, 838 { AMULW, ydivl, Pe, 0xf7,(04) }, 839 { ANAME }, 840 { ANEGB, yscond, Pb, 0xf6,(03) }, 841 { ANEGL, yscond, Px, 0xf7,(03) }, 842 { ANEGQ, yscond, Pw, 0xf7,(03) }, 843 { ANEGW, yscond, Pe, 0xf7,(03) }, 844 { ANOP, ynop, Px, 0,0 }, 845 { ANOTB, yscond, Pb, 0xf6,(02) }, 846 { ANOTL, yscond, Px, 0xf7,(02) }, 847 { ANOTQ, yscond, Pw, 0xf7,(02) }, 848 { ANOTW, yscond, Pe, 0xf7,(02) }, 849 { AORB, yxorb, Pb, 0x0c,0x80,(01),0x08,0x0a }, 850 { AORL, yxorl, Px, 0x83,(01),0x0d,0x81,(01),0x09,0x0b }, 851 { AORPD, yxm, Pq, 0x56 }, 852 { AORPS, yxm, Pm, 0x56 }, 853 { AORQ, yxorl, Pw, 0x83,(01),0x0d,0x81,(01),0x09,0x0b }, 854 { AORW, yxorl, Pe, 0x83,(01),0x0d,0x81,(01),0x09,0x0b }, 855 { AOUTB, yin, Pb, 0xe6,0xee }, 856 { AOUTL, yin, Px, 0xe7,0xef }, 857 { AOUTSB, ynone, Pb, 0x6e }, 858 { AOUTSL, ynone, Px, 0x6f }, 859 { AOUTSW, ynone, Pe, 0x6f }, 860 { AOUTW, yin, Pe, 0xe7,0xef }, 861 { APABSB, ymrxr, Pe, Pm38,0x1c }, 862 { APABSL, ymrxr, Pe, Pm38,0x1e }, 863 { APABSW, ymrxr, Pe, Pm38,0x1d }, 864 { APACKSSLW, ymm, Py, 0x6b,Pe,0x6b }, 865 { APACKSSWB, ymm, Py, 0x63,Pe,0x63 }, 866 { APACKUSDW, ymrxr, Pe, Pm38,0x2b }, 867 { APACKUSWB, ymm, Py, 0x67,Pe,0x67 }, 868 { APADDB, ymm, Py, 0xfc,Pe,0xfc }, 869 { APADDL, ymm, Py, 0xfe,Pe,0xfe }, 870 { APADDQ, yxm, Pe, 0xd4 }, 871 { APADDSB, ymm, Py, 0xec,Pe,0xec }, 872 { APADDSW, ymm, Py, 0xed,Pe,0xed }, 873 { APADDUSB, ymm, Py, 0xdc,Pe,0xdc }, 874 { APADDUSW, ymm, Py, 0xdd,Pe,0xdd }, 875 { APADDW, ymm, Py, 0xfd,Pe,0xfd }, 876 { APAND, ymm, Py, 0xdb,Pe,0xdb }, 877 { APANDN, ymm, Py, 0xdf,Pe,0xdf }, 878 { APAVGB, ymm, Py, 0xe0,Pe,0xe0 }, 879 { APAVGW, ymm, Py, 0xe3,Pe,0xe3 }, 880 { APCMPEQB, ymm, Py, 0x74,Pe,0x74 }, 881 { APCMPEQL, ymm, Py, 0x76,Pe,0x76 }, 882 { APCMPEQQ, ymrxr, Pe, Pm38,0x29 }, 883 { APCMPGTQ, ymrxr, Pe, Pm38,0x37 }, 884 { APCMPEQW, ymm, Py, 0x75,Pe,0x75 }, 885 { APCMPGTB, ymm, Py, 0x64,Pe,0x64 }, 886 { APCMPGTL, ymm, Py, 0x66,Pe,0x66 }, 887 { APCMPGTW, ymm, Py, 0x65,Pe,0x65 }, 888 { APEXTRW, yextrw, Pq, 0xc5 }, 889 { APF2IL, ymfp, Px, 0x1d }, 890 { APF2IW, ymfp, Px, 0x1c }, 891 { API2FL, ymfp, Px, 0x0d }, 892 { APFACC, ymfp, Px, 0xae }, 893 { APFADD, ymfp, Px, 0x9e }, 894 { APFCMPEQ, ymfp, Px, 0xb0 }, 895 { APFCMPGE, ymfp, Px, 0x90 }, 896 { APFCMPGT, ymfp, Px, 0xa0 }, 897 { APFMAX, ymfp, Px, 0xa4 }, 898 { APFMIN, ymfp, Px, 0x94 }, 899 { APFMUL, ymfp, Px, 0xb4 }, 900 { APFNACC, ymfp, Px, 0x8a }, 901 { APFPNACC, ymfp, Px, 0x8e }, 902 { APFRCP, ymfp, Px, 0x96 }, 903 { APFRCPIT1, ymfp, Px, 0xa6 }, 904 { APFRCPI2T, ymfp, Px, 0xb6 }, 905 { APFRSQIT1, ymfp, Px, 0xa7 }, 906 { APFRSQRT, ymfp, Px, 0x97 }, 907 { APFSUB, ymfp, Px, 0x9a }, 908 { APFSUBR, ymfp, Px, 0xaa }, 909 { APHADDL, ymrxr, Pe, Pm38,0x02 }, 910 { APHADDSW, ymrxr, Pe, Pm38,0x03 }, 911 { APHADDW, ymrxr, Pe, Pm38,0x01 }, 912 { APHMINPOSUW, ymrxr, Pe, Pm38,0x41 }, 913 { APHSUBL, ymrxr, Pe, Pm38,0x06 }, 914 { APHSUBSW, ymrxr, Pe, Pm38,0x07 }, 915 { APHSUBW, ymrxr, Pe, Pm38,0x05 }, 916 { APINSRW, yextrw, Pq, 0xc4 }, 917 { APMADDUBSW, ymrxr, Pe, Pm38,0x04 }, 918 { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 }, 919 { APMAXSB, ymrxr, Pe, Pm38,0x3c }, 920 { APMAXSL, ymrxr, Pe, Pm38,0x3d }, 921 { APMAXSW, yxm, Pe, 0xee }, 922 { APMAXUB, yxm, Pe, 0xde }, 923 { APMAXUL, ymrxr, Pe, Pm38,0x3f }, 924 { APMAXUW, ymrxr, Pe, Pm38,0x3e }, 925 { APMINSB, ymrxr, Pe, Pm38,0x38 }, 926 { APMINSL, ymrxr, Pe, Pm38,0x39 }, 927 { APMINUL, ymrxr, Pe, Pm38,0x3b }, 928 { APMINUW, ymrxr, Pe, Pm38,0x3a }, 929 { APMINSW, yxm, Pe, 0xea }, 930 { APMINUB, yxm, Pe, 0xda }, 931 { APMOVMSKB, ymskb, Px|P2, Pe,0xd7,0xd7 }, 932 { APMOVSXBL, ymrxr, Pe, Pm38,0x21 }, 933 { APMOVSXBQ, ymrxr, Pe, Pm38,0x22 }, 934 { APMOVSXBW, ymrxr, Pe, Pm38,0x20 }, 935 { APMOVSXLQ, ymrxr, Pe, Pm38,0x25 }, 936 { APMOVSXWL, ymrxr, Pe, Pm38,0x23 }, 937 { APMOVSXWQ, ymrxr, Pe, Pm38,0x24 }, 938 { APMOVZXBL, ymrxr, Pe, Pm38,0x31 }, 939 { APMOVZXBQ, ymrxr, Pe, Pm38,0x32 }, 940 { APMOVZXBW, ymrxr, Pe, Pm38,0x30 }, 941 { APMOVZXLQ, ymrxr, Pe, Pm38,0x35 }, 942 { APMOVZXWL, ymrxr, Pe, Pm38,0x33 }, 943 { APMOVZXWQ, ymrxr, Pe, Pm38,0x34 }, 944 { APMULLL, ymrxr, Pe, Pm38,0x40 }, 945 { APMULLQ, ymrxr, Pe, Pm38,0x28 }, 946 { APMULHRSW, ymrxr, Pe, Pm38,0x0b }, 947 { APMULHRW, ymfp, Px, 0xb7 }, 948 { APMULHUW, ymm, Py, 0xe4,Pe,0xe4 }, 949 { APMULHW, ymm, Py, 0xe5,Pe,0xe5 }, 950 { APMULLW, ymm, Py, 0xd5,Pe,0xd5 }, 951 { APMULULQ, ymm, Py, 0xf4,Pe,0xf4 }, 952 { APOPAL, ynone, P32, 0x61 }, 953 { APOPAW, ynone, Pe, 0x61 }, 954 { APOPFL, ynone, P32, 0x9d }, 955 { APOPFQ, ynone, Py, 0x9d }, 956 { APOPFW, ynone, Pe, 0x9d }, 957 { APOPL, ypopl, P32, 0x58,0x8f,(00) }, 958 { APOPQ, ypopl, Py, 0x58,0x8f,(00) }, 959 { APOPW, ypopl, Pe, 0x58,0x8f,(00) }, 960 { APOR, ymm, Py, 0xeb,Pe,0xeb }, 961 { APSADBW, yxm, Pq, 0xf6 }, 962 { APSHUFB, ymrxr, Pe, Pm38,0x00 }, 963 { APSHUFHW, yxshuf, Pf3, 0x70 }, 964 { APSHUFL, yxshuf, Pq, 0x70 }, 965 { APSHUFLW, yxshuf, Pf2, 0x70 }, 966 { APSHUFW, ymshuf, Pm, 0x70 }, 967 { APSIGNB, ymrxr, Pe, Pm38,0x08 }, 968 { APSIGNL, ymrxr, Pe, Pm38,0x0a }, 969 { APSIGNW, ymrxr, Pe, Pm38,0x09 }, 970 { APSLLDQ, ypsdq, Pq, 0x73,(07) }, 971 { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) }, 972 { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x7e,(06) }, 973 { APSLLW, yps, Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) }, 974 { APSRAL, yps, Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) }, 975 { APSRAW, yps, Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) }, 976 { APSRLDQ, ypsdq, Pq, 0x73,(03) }, 977 { APSRLL, yps, Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) }, 978 { APSRLQ, yps, Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) }, 979 { APSRLW, yps, Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) }, 980 { APSUBB, yxm, Pe, 0xf8 }, 981 { APSUBL, yxm, Pe, 0xfa }, 982 { APSUBQ, yxm, Pe, 0xfb }, 983 { APSUBSB, yxm, Pe, 0xe8 }, 984 { APSUBSW, yxm, Pe, 0xe9 }, 985 { APSUBUSB, yxm, Pe, 0xd8 }, 986 { APSUBUSW, yxm, Pe, 0xd9 }, 987 { APSUBW, yxm, Pe, 0xf9 }, 988 { APSWAPL, ymfp, Px, 0xbb }, 989 { APTEST, ymrxr, Pe, Pm38,0x17 }, 990 { APUNPCKHBW, ymm, Py, 0x68,Pe,0x68 }, 991 { APUNPCKHLQ, ymm, Py, 0x6a,Pe,0x6a }, 992 { APUNPCKHQDQ, yxm, Pe, 0x6d }, 993 { APUNPCKHWL, ymm, Py, 0x69,Pe,0x69 }, 994 { APUNPCKLBW, ymm, Py, 0x60,Pe,0x60 }, 995 { APUNPCKLLQ, ymm, Py, 0x62,Pe,0x62 }, 996 { APUNPCKLQDQ, yxm, Pe, 0x6c }, 997 { APUNPCKLWL, ymm, Py, 0x61,Pe,0x61 }, 998 { APUSHAL, ynone, P32, 0x60 }, 999 { APUSHAW, ynone, Pe, 0x60 }, 1000 { APUSHFL, ynone, P32, 0x9c }, 1001 { APUSHFQ, ynone, Py, 0x9c }, 1002 { APUSHFW, ynone, Pe, 0x9c }, 1003 { APUSHL, ypushl, P32, 0x50,0xff,(06),0x6a,0x68 }, 1004 { APUSHQ, ypushl, Py, 0x50,0xff,(06),0x6a,0x68 }, 1005 { APUSHW, ypushl, Pe, 0x50,0xff,(06),0x6a,0x68 }, 1006 { APXOR, ymm, Py, 0xef,Pe,0xef }, 1007 { AQUAD, ybyte, Px, 8 }, 1008 { ARCLB, yshb, Pb, 0xd0,(02),0xc0,(02),0xd2,(02) }, 1009 { ARCLL, yshl, Px, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) }, 1010 { ARCLQ, yshl, Pw, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) }, 1011 { ARCLW, yshl, Pe, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) }, 1012 { ARCPPS, yxm, Pm|P2, 0x53 }, 1013 { ARCPSS, yxm, Pf3|P2, 0x53 }, 1014 { ARCRB, yshb, Pb, 0xd0,(03),0xc0,(03),0xd2,(03) }, 1015 { ARCRL, yshl, Px, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) }, 1016 { ARCRQ, yshl, Pw, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) }, 1017 { ARCRW, yshl, Pe, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) }, 1018 { AREP, ynone, Px, 0xf3 }, 1019 { AREPN, ynone, Px, 0xf2 }, 1020 { ARET, ynone, Px, 0xc3 }, 1021 { ARETFW, yret, Pe, 0xcb,0xca }, 1022 { ARETFL, yret, Px, 0xcb,0xca }, 1023 { ARETFQ, yret, Pw, 0xcb,0xca }, 1024 { AROLB, yshb, Pb, 0xd0,(00),0xc0,(00),0xd2,(00) }, 1025 { AROLL, yshl, Px, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) }, 1026 { AROLQ, yshl, Pw, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) }, 1027 { AROLW, yshl, Pe, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) }, 1028 { ARORB, yshb, Pb, 0xd0,(01),0xc0,(01),0xd2,(01) }, 1029 { ARORL, yshl, Px, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) }, 1030 { ARORQ, yshl, Pw, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) }, 1031 { ARORW, yshl, Pe, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) }, 1032 { ARSQRTPS, yxm, Pm|P2, 0x52 }, 1033 { ARSQRTSS, yxm, Pf3|P2, 0x52 }, 1034 { ASAHF, ynone, Px, 0x86,0xe0,0x50,0x9d }, /* XCHGB AH,AL; PUSH AX; POPFL */ 1035 { ASALB, yshb, Pb, 0xd0,(04),0xc0,(04),0xd2,(04) }, 1036 { ASALL, yshl, Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1037 { ASALQ, yshl, Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1038 { ASALW, yshl, Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1039 { ASARB, yshb, Pb, 0xd0,(07),0xc0,(07),0xd2,(07) }, 1040 { ASARL, yshl, Px, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) }, 1041 { ASARQ, yshl, Pw, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) }, 1042 { ASARW, yshl, Pe, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) }, 1043 { ASBBB, yxorb, Pb, 0x1c,0x80,(03),0x18,0x1a }, 1044 { ASBBL, yxorl, Px, 0x83,(03),0x1d,0x81,(03),0x19,0x1b }, 1045 { ASBBQ, yxorl, Pw, 0x83,(03),0x1d,0x81,(03),0x19,0x1b }, 1046 { ASBBW, yxorl, Pe, 0x83,(03),0x1d,0x81,(03),0x19,0x1b }, 1047 { ASCASB, ynone, Pb, 0xae }, 1048 { ASCASL, ynone, Px, 0xaf }, 1049 { ASCASQ, ynone, Pw, 0xaf }, 1050 { ASCASW, ynone, Pe, 0xaf }, 1051 { ASETCC, yscond, Pm, 0x93,(00) }, 1052 { ASETCS, yscond, Pm, 0x92,(00) }, 1053 { ASETEQ, yscond, Pm, 0x94,(00) }, 1054 { ASETGE, yscond, Pm, 0x9d,(00) }, 1055 { ASETGT, yscond, Pm, 0x9f,(00) }, 1056 { ASETHI, yscond, Pm, 0x97,(00) }, 1057 { ASETLE, yscond, Pm, 0x9e,(00) }, 1058 { ASETLS, yscond, Pm, 0x96,(00) }, 1059 { ASETLT, yscond, Pm, 0x9c,(00) }, 1060 { ASETMI, yscond, Pm, 0x98,(00) }, 1061 { ASETNE, yscond, Pm, 0x95,(00) }, 1062 { ASETOC, yscond, Pm, 0x91,(00) }, 1063 { ASETOS, yscond, Pm, 0x90,(00) }, 1064 { ASETPC, yscond, Pm, 0x96,(00) }, 1065 { ASETPL, yscond, Pm, 0x99,(00) }, 1066 { ASETPS, yscond, Pm, 0x9a,(00) }, 1067 { ASHLB, yshb, Pb, 0xd0,(04),0xc0,(04),0xd2,(04) }, 1068 { ASHLL, yshl, Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1069 { ASHLQ, yshl, Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1070 { ASHLW, yshl, Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) }, 1071 { ASHRB, yshb, Pb, 0xd0,(05),0xc0,(05),0xd2,(05) }, 1072 { ASHRL, yshl, Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, 1073 { ASHRQ, yshl, Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, 1074 { ASHRW, yshl, Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, 1075 { ASHUFPD, yxshuf, Pq, 0xc6 }, 1076 { ASHUFPS, yxshuf, Pm, 0xc6 }, 1077 { ASQRTPD, yxm, Pe|P2, 0x51 }, 1078 { ASQRTPS, yxm, Pm|P2, 0x51 }, 1079 { ASQRTSD, yxm, Pf2|P2, 0x51 }, 1080 { ASQRTSS, yxm, Pf3|P2, 0x51 }, 1081 { ASTC, ynone, Px, 0xf9 }, 1082 { ASTD, ynone, Px, 0xfd }, 1083 { ASTI, ynone, Px, 0xfb }, 1084 { ASTMXCSR, ysvrs, Pm, 0xae,(03),0xae,(03) }, 1085 { ASTOSB, ynone, Pb, 0xaa }, 1086 { ASTOSL, ynone, Px, 0xab }, 1087 { ASTOSQ, ynone, Pw, 0xab }, 1088 { ASTOSW, ynone, Pe, 0xab }, 1089 { ASUBB, yxorb, Pb, 0x2c,0x80,(05),0x28,0x2a }, 1090 { ASUBL, yaddl, Px, 0x83,(05),0x2d,0x81,(05),0x29,0x2b }, 1091 { ASUBPD, yxm, Pe, 0x5c }, 1092 { ASUBPS, yxm, Pm, 0x5c }, 1093 { ASUBQ, yaddl, Pw, 0x83,(05),0x2d,0x81,(05),0x29,0x2b }, 1094 { ASUBSD, yxm, Pf2, 0x5c }, 1095 { ASUBSS, yxm, Pf3, 0x5c }, 1096 { ASUBW, yaddl, Pe, 0x83,(05),0x2d,0x81,(05),0x29,0x2b }, 1097 { ASWAPGS, ynone, Pm, 0x01,0xf8 }, 1098 { ASYSCALL, ynone, Px, 0x0f,0x05 }, /* fast syscall */ 1099 { ATESTB, ytestb, Pb, 0xa8,0xf6,(00),0x84,0x84 }, 1100 { ATESTL, ytestl, Px, 0xa9,0xf7,(00),0x85,0x85 }, 1101 { ATESTQ, ytestl, Pw, 0xa9,0xf7,(00),0x85,0x85 }, 1102 { ATESTW, ytestl, Pe, 0xa9,0xf7,(00),0x85,0x85 }, 1103 { ATEXT, ytext, Px }, 1104 { AUCOMISD, yxcmp, Pe, 0x2e }, 1105 { AUCOMISS, yxcmp, Pm, 0x2e }, 1106 { AUNPCKHPD, yxm, Pe, 0x15 }, 1107 { AUNPCKHPS, yxm, Pm, 0x15 }, 1108 { AUNPCKLPD, yxm, Pe, 0x14 }, 1109 { AUNPCKLPS, yxm, Pm, 0x14 }, 1110 { AVERR, ydivl, Pm, 0x00,(04) }, 1111 { AVERW, ydivl, Pm, 0x00,(05) }, 1112 { AWAIT, ynone, Px, 0x9b }, 1113 { AWORD, ybyte, Px, 2 }, 1114 { AXCHGB, yml_mb, Pb, 0x86,0x86 }, 1115 { AXCHGL, yml_ml, Px, 0x87,0x87 }, 1116 { AXCHGQ, yml_ml, Pw, 0x87,0x87 }, 1117 { AXCHGW, yml_ml, Pe, 0x87,0x87 }, 1118 { AXLAT, ynone, Px, 0xd7 }, 1119 { AXORB, yxorb, Pb, 0x34,0x80,(06),0x30,0x32 }, 1120 { AXORL, yxorl, Px, 0x83,(06),0x35,0x81,(06),0x31,0x33 }, 1121 { AXORPD, yxm, Pe, 0x57 }, 1122 { AXORPS, yxm, Pm, 0x57 }, 1123 { AXORQ, yxorl, Pw, 0x83,(06),0x35,0x81,(06),0x31,0x33 }, 1124 { AXORW, yxorl, Pe, 0x83,(06),0x35,0x81,(06),0x31,0x33 }, 1125 1126 { AFMOVB, yfmvx, Px, 0xdf,(04) }, 1127 { AFMOVBP, yfmvp, Px, 0xdf,(06) }, 1128 { AFMOVD, yfmvd, Px, 0xdd,(00),0xdd,(02),0xd9,(00),0xdd,(02) }, 1129 { AFMOVDP, yfmvdp, Px, 0xdd,(03),0xdd,(03) }, 1130 { AFMOVF, yfmvf, Px, 0xd9,(00),0xd9,(02) }, 1131 { AFMOVFP, yfmvp, Px, 0xd9,(03) }, 1132 { AFMOVL, yfmvf, Px, 0xdb,(00),0xdb,(02) }, 1133 { AFMOVLP, yfmvp, Px, 0xdb,(03) }, 1134 { AFMOVV, yfmvx, Px, 0xdf,(05) }, 1135 { AFMOVVP, yfmvp, Px, 0xdf,(07) }, 1136 { AFMOVW, yfmvf, Px, 0xdf,(00),0xdf,(02) }, 1137 { AFMOVWP, yfmvp, Px, 0xdf,(03) }, 1138 { AFMOVX, yfmvx, Px, 0xdb,(05) }, 1139 { AFMOVXP, yfmvp, Px, 0xdb,(07) }, 1140 1141 { AFCOMB }, 1142 { AFCOMBP }, 1143 { AFCOMD, yfadd, Px, 0xdc,(02),0xd8,(02),0xdc,(02) }, /* botch */ 1144 { AFCOMDP, yfadd, Px, 0xdc,(03),0xd8,(03),0xdc,(03) }, /* botch */ 1145 { AFCOMDPP, ycompp, Px, 0xde,(03) }, 1146 { AFCOMF, yfmvx, Px, 0xd8,(02) }, 1147 { AFCOMFP, yfmvx, Px, 0xd8,(03) }, 1148 { AFCOML, yfmvx, Px, 0xda,(02) }, 1149 { AFCOMLP, yfmvx, Px, 0xda,(03) }, 1150 { AFCOMW, yfmvx, Px, 0xde,(02) }, 1151 { AFCOMWP, yfmvx, Px, 0xde,(03) }, 1152 1153 { AFUCOM, ycompp, Px, 0xdd,(04) }, 1154 { AFUCOMP, ycompp, Px, 0xdd,(05) }, 1155 { AFUCOMPP, ycompp, Px, 0xda,(13) }, 1156 1157 { AFADDDP, yfaddp, Px, 0xde,(00) }, 1158 { AFADDW, yfmvx, Px, 0xde,(00) }, 1159 { AFADDL, yfmvx, Px, 0xda,(00) }, 1160 { AFADDF, yfmvx, Px, 0xd8,(00) }, 1161 { AFADDD, yfadd, Px, 0xdc,(00),0xd8,(00),0xdc,(00) }, 1162 1163 { AFMULDP, yfaddp, Px, 0xde,(01) }, 1164 { AFMULW, yfmvx, Px, 0xde,(01) }, 1165 { AFMULL, yfmvx, Px, 0xda,(01) }, 1166 { AFMULF, yfmvx, Px, 0xd8,(01) }, 1167 { AFMULD, yfadd, Px, 0xdc,(01),0xd8,(01),0xdc,(01) }, 1168 1169 { AFSUBDP, yfaddp, Px, 0xde,(05) }, 1170 { AFSUBW, yfmvx, Px, 0xde,(04) }, 1171 { AFSUBL, yfmvx, Px, 0xda,(04) }, 1172 { AFSUBF, yfmvx, Px, 0xd8,(04) }, 1173 { AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(05) }, 1174 1175 { AFSUBRDP, yfaddp, Px, 0xde,(04) }, 1176 { AFSUBRW, yfmvx, Px, 0xde,(05) }, 1177 { AFSUBRL, yfmvx, Px, 0xda,(05) }, 1178 { AFSUBRF, yfmvx, Px, 0xd8,(05) }, 1179 { AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(04) }, 1180 1181 { AFDIVDP, yfaddp, Px, 0xde,(07) }, 1182 { AFDIVW, yfmvx, Px, 0xde,(06) }, 1183 { AFDIVL, yfmvx, Px, 0xda,(06) }, 1184 { AFDIVF, yfmvx, Px, 0xd8,(06) }, 1185 { AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(07) }, 1186 1187 { AFDIVRDP, yfaddp, Px, 0xde,(06) }, 1188 { AFDIVRW, yfmvx, Px, 0xde,(07) }, 1189 { AFDIVRL, yfmvx, Px, 0xda,(07) }, 1190 { AFDIVRF, yfmvx, Px, 0xd8,(07) }, 1191 { AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(06) }, 1192 1193 { AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) }, 1194 { AFFREE }, 1195 { AFLDCW, ystcw, Px, 0xd9,(05),0xd9,(05) }, 1196 { AFLDENV, ystcw, Px, 0xd9,(04),0xd9,(04) }, 1197 { AFRSTOR, ysvrs, Px, 0xdd,(04),0xdd,(04) }, 1198 { AFSAVE, ysvrs, Px, 0xdd,(06),0xdd,(06) }, 1199 { AFSTCW, ystcw, Px, 0xd9,(07),0xd9,(07) }, 1200 { AFSTENV, ystcw, Px, 0xd9,(06),0xd9,(06) }, 1201 { AFSTSW, ystsw, Px, 0xdd,(07),0xdf,0xe0 }, 1202 { AF2XM1, ynone, Px, 0xd9, 0xf0 }, 1203 { AFABS, ynone, Px, 0xd9, 0xe1 }, 1204 { AFCHS, ynone, Px, 0xd9, 0xe0 }, 1205 { AFCLEX, ynone, Px, 0xdb, 0xe2 }, 1206 { AFCOS, ynone, Px, 0xd9, 0xff }, 1207 { AFDECSTP, ynone, Px, 0xd9, 0xf6 }, 1208 { AFINCSTP, ynone, Px, 0xd9, 0xf7 }, 1209 { AFINIT, ynone, Px, 0xdb, 0xe3 }, 1210 { AFLD1, ynone, Px, 0xd9, 0xe8 }, 1211 { AFLDL2E, ynone, Px, 0xd9, 0xea }, 1212 { AFLDL2T, ynone, Px, 0xd9, 0xe9 }, 1213 { AFLDLG2, ynone, Px, 0xd9, 0xec }, 1214 { AFLDLN2, ynone, Px, 0xd9, 0xed }, 1215 { AFLDPI, ynone, Px, 0xd9, 0xeb }, 1216 { AFLDZ, ynone, Px, 0xd9, 0xee }, 1217 { AFNOP, ynone, Px, 0xd9, 0xd0 }, 1218 { AFPATAN, ynone, Px, 0xd9, 0xf3 }, 1219 { AFPREM, ynone, Px, 0xd9, 0xf8 }, 1220 { AFPREM1, ynone, Px, 0xd9, 0xf5 }, 1221 { AFPTAN, ynone, Px, 0xd9, 0xf2 }, 1222 { AFRNDINT, ynone, Px, 0xd9, 0xfc }, 1223 { AFSCALE, ynone, Px, 0xd9, 0xfd }, 1224 { AFSIN, ynone, Px, 0xd9, 0xfe }, 1225 { AFSINCOS, ynone, Px, 0xd9, 0xfb }, 1226 { AFSQRT, ynone, Px, 0xd9, 0xfa }, 1227 { AFTST, ynone, Px, 0xd9, 0xe4 }, 1228 { AFXAM, ynone, Px, 0xd9, 0xe5 }, 1229 { AFXTRACT, ynone, Px, 0xd9, 0xf4 }, 1230 { AFYL2X, ynone, Px, 0xd9, 0xf1 }, 1231 { AFYL2XP1, ynone, Px, 0xd9, 0xf9 }, 1232 1233 { ACMPXCHGB, yrb_mb, Pb, 0x0f,0xb0 }, 1234 { ACMPXCHGL, yrl_ml, Px, 0x0f,0xb1 }, 1235 { ACMPXCHGW, yrl_ml, Pe, 0x0f,0xb1 }, 1236 { ACMPXCHGQ, yrl_ml, Pw, 0x0f,0xb1 }, 1237 { ACMPXCHG16B, yscond, Pw, 0x0f,0xc7,(01) }, 1238 { ACMPXCHG8B, yscond, Pm, 0xc7,(01) }, 1239 { AINVD, ynone, Pm, 0x08 }, 1240 { AINVLPG, ymbs, Pm, 0x01,(07) }, 1241 { ALFENCE, ynone, Pm, 0xae,0xe8 }, 1242 { AMFENCE, ynone, Pm, 0xae,0xf0 }, 1243 { AMOVNTIL, yrl_ml, Pm, 0xc3 }, 1244 { AMOVNTIQ, yrl_ml, Pw, 0x0f,0xc3 }, 1245 { ARDMSR, ynone, Pm, 0x32 }, 1246 { ARDPMC, ynone, Pm, 0x33 }, 1247 { ARDTSC, ynone, Pm, 0x31 }, 1248 { ARSM, ynone, Pm, 0xaa }, 1249 { ASFENCE, ynone, Pm, 0xae,0xf8 }, 1250 { ASYSRET, ynone, Pm, 0x07 }, 1251 { AWBINVD, ynone, Pm, 0x09 }, 1252 { AWRMSR, ynone, Pm, 0x30 }, 1253 1254 { AXADDB, yrb_mb, Pb, 0x0f,0xc0 }, 1255 { AXADDL, yrl_ml, Px, 0x0f,0xc1 }, 1256 { AXADDQ, yrl_ml, Pw, 0x0f,0xc1 }, 1257 { AXADDW, yrl_ml, Pe, 0x0f,0xc1 }, 1258 1259 { APALIGNR, yxshuf2, Pe, Pm3a,0x0f }, 1260 1261 { AXSAVE, ysvrs, Pm, 0xae,(04),0xae,(04) }, 1262 { AXSAVEOPT, ysvrs, Pm, 0xae,(06),0xae,(06) }, 1263 { AXRSTOR, ysvrs, Pm, 0xae,(05),0xae,(05) }, 1264 1265 { ACRC32L, ycrc, Px, Pf2,0x38,0xf1 }, 1266 { ACRC32W, ycrc, Pe, Pf2,0x38,0xf1 }, 1267 { ACRC32B, ycrcb, Pb, Pf2,0x38,0xf0 }, 1268 { ACRC32Q, ycrc, Pw, Pf2,0x38,0xf1 }, 1269 { APAUSE, ynone, Px, 0xf3,0x90 }, 1270 1271 { AAESIMC, yxm, Pe, Pm38, 0xdb }, 1272 { AAESENC, yxm, Pe, Pm38, 0xdc }, 1273 { AAESENCLAST, yxm, Pe, Pm38, 0xdd }, 1274 { AAESDEC, yxm, Pe, Pm38, 0xde }, 1275 { AAESDECLAST, yxm, Pe, Pm38, 0xdf }, 1276 { AAESKEYGENASSIST, yaes, Pe, Pm3a, 0xdf }, 1277 { APCLMULQDQ, yaes, Pe, Pm3a, 0x44 }, 1278 1279 { ABLENDPS, yaes, Pe, Pm3a, 0xdc }, 1280 { ABLENDPD, yaes, Pe, Pm3a, 0x0d }, 1281 1282 { AEND }, 1283 0 1284 }; 1285 1286 Optab* opindex[ALAST+1]; 1287