two_byte_opcodes.isa (6610:dbfe22c711d5) | two_byte_opcodes.isa (6611:2cd76560a1f1) |
---|---|
1// Copyright (c) 2008 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 87 unchanged lines hidden (view full) --- 96 0x2: Inst::LLDT(Ew); 97 0x3: Inst::LTR(Ew); 98 0x4: verr_Mw_or_Rv(); 99 0x5: verw_Mw_or_Rv(); 100 //0x6: jmpe_Ev(); // IA-64 101 default: Inst::UD2(); 102 } 103 //0x01: group7(); // Ugly, ugly, ugly... | 1// Copyright (c) 2008 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 87 unchanged lines hidden (view full) --- 96 0x2: Inst::LLDT(Ew); 97 0x3: Inst::LTR(Ew); 98 0x4: verr_Mw_or_Rv(); 99 0x5: verw_Mw_or_Rv(); 100 //0x6: jmpe_Ev(); // IA-64 101 default: Inst::UD2(); 102 } 103 //0x01: group7(); // Ugly, ugly, ugly... |
104 0x01: decode MODRM_MOD { 105 0x3: decode MODRM_REG { 106 0x0: decode MODRM_RM { | 104 0x01: decode MODRM_REG { 105 0x0: decode MODRM_MOD { 106 0x3: decode MODRM_RM { |
107 0x1: vmcall(); 108 0x2: vmlaunch(); 109 0x3: vmresume(); 110 0x4: vmxoff(); 111 default: Inst::UD2(); 112 } | 107 0x1: vmcall(); 108 0x2: vmlaunch(); 109 0x3: vmresume(); 110 0x4: vmxoff(); 111 default: Inst::UD2(); 112 } |
113 0x1: decode MODRM_RM { | 113 default: sgdt_Ms(); 114 } 115 0x1: decode MODRM_MOD { 116 0x3: decode MODRM_RM { |
114 0x0: monitor(); 115 0x1: mwait(); 116 default: Inst::UD2(); 117 } | 117 0x0: monitor(); 118 0x1: mwait(); 119 default: Inst::UD2(); 120 } |
121 default: sidt_Ms(); 122 } 123 0x2: decode MODRM_MOD { |
|
118 0x3: decode MODRM_RM { | 124 0x3: decode MODRM_RM { |
119 0x0: vmrun(); 120 0x1: vmmcall(); 121 0x2: vmload(); 122 0x3: vmsave(); 123 0x4: stgi(); 124 0x5: clgi(); 125 0x6: skinit(); 126 0x7: invlpga(); | 125 0x0: xgetbv(); 126 0x1: xsetbv(); |
127 } | 127 } |
128 0x4: Inst::SMSW(Rv); 129 0x6: Inst::LMSW(Rv); 130 0x7: decode MODRM_RM { 131 0x0: Inst::SWAPGS(); 132 0x1: rdtscp(); 133 default: Inst::UD2(); 134 } 135 default: Inst::UD2(); 136 } 137 default: decode MODRM_REG { 138 0x0: sgdt_Ms(); 139 0x1: sidt_Ms(); 140 0x2: decode MODE_SUBMODE { | 128 default: decode MODE_SUBMODE { |
141 0x0: Inst::LGDT(M); 142 default: decode OPSIZE { 143 // 16 bit operand sizes are special, but only 144 // in legacy and compatability modes. 145 0x2: Inst::LGDT_16(M); 146 default: Inst::LGDT(M); 147 } 148 } | 129 0x0: Inst::LGDT(M); 130 default: decode OPSIZE { 131 // 16 bit operand sizes are special, but only 132 // in legacy and compatability modes. 133 0x2: Inst::LGDT_16(M); 134 default: Inst::LGDT(M); 135 } 136 } |
149 0x3: decode MODE_SUBMODE { | 137 } 138 0x3: decode MODRM_MOD { 139 0x3: decode MODRM_RM { 140 0x0: vmrun(); 141 0x1: vmmcall(); 142 0x2: vmload(); 143 0x3: vmsave(); 144 0x4: stgi(); 145 0x5: clgi(); 146 0x6: skinit(); 147 0x7: invlpga(); 148 } 149 default: decode MODE_SUBMODE { |
150 0x0: Inst::LIDT(M); 151 default: decode OPSIZE { 152 // 16 bit operand sizes are special, but only 153 // in legacy and compatability modes. 154 0x2: Inst::LIDT_16(M); 155 default: Inst::LIDT(M); 156 } 157 } | 150 0x0: Inst::LIDT(M); 151 default: decode OPSIZE { 152 // 16 bit operand sizes are special, but only 153 // in legacy and compatability modes. 154 0x2: Inst::LIDT_16(M); 155 default: Inst::LIDT(M); 156 } 157 } |
158 0x4: Inst::SMSW(Mw); 159 0x6: Inst::LMSW(Mw); 160 0x7: Inst::INVLPG(M); 161 default: Inst::UD2(); | |
162 } | 158 } |
159 0x4: decode MODRM_MOD { 160 0x3: Inst::SMSW(Rv); 161 default: Inst::SMSW(Mw); 162 } 163 0x6: Inst::LMSW(Ew); 164 0x7: decode MODRM_MOD { 165 0x3: decode MODRM_RM { 166 0x0: Inst::SWAPGS(); 167 0x1: rdtscp(); 168 default: Inst::UD2(); 169 } 170 default: Inst::INVLPG(M); 171 } |
|
163 } 164 0x02: lar_Gv_Ew(); 165 0x03: lsl_Gv_Ew(); 166 // sandpile.org doesn't seem to know what this is...? We'll 167 // use it for pseudo instructions. We've got 16 bits of space 168 // to play with so there can be quite a few pseudo 169 // instructions. 170 //0x04: loadall_or_reset_or_hang(); --- 116 unchanged lines hidden (view full) --- 287 } 288 format Inst{ 289 0x02: decode LEGACY_DECODEVAL { 290 // no prefix 291 0x0: decode OPCODE_OP_BOTTOM3 { 292 0x0: MOVUPS(Vo,Wo); 293 0x1: MOVUPS(Wo,Vo); 294 0x2: decode MODRM_MOD { | 172 } 173 0x02: lar_Gv_Ew(); 174 0x03: lsl_Gv_Ew(); 175 // sandpile.org doesn't seem to know what this is...? We'll 176 // use it for pseudo instructions. We've got 16 bits of space 177 // to play with so there can be quite a few pseudo 178 // instructions. 179 //0x04: loadall_or_reset_or_hang(); --- 116 unchanged lines hidden (view full) --- 296 } 297 format Inst{ 298 0x02: decode LEGACY_DECODEVAL { 299 // no prefix 300 0x0: decode OPCODE_OP_BOTTOM3 { 301 0x0: MOVUPS(Vo,Wo); 302 0x1: MOVUPS(Wo,Vo); 303 0x2: decode MODRM_MOD { |
295 0x3: MOVHLPS(Vq,VRq); 296 default: MOVLPS(Vq,Mq); | 304 0x3: MOVHLPS(Vps,VRq); 305 default: MOVLPS(Vps,Mq); |
297 } | 306 } |
298 0x3: MOVLPS(Mq,Vq); | 307 0x3: MOVLPS(Mq,Vps); |
299 0x4: UNPCKLPS(Vps,Wq); | 308 0x4: UNPCKLPS(Vps,Wq); |
300 0x5: UNPCKHPS(Vpd,Wq); | 309 0x5: UNPCKHPS(Vps,Wq); |
301 0x6: decode MODRM_MOD { | 310 0x6: decode MODRM_MOD { |
302 0x3: MOVLHPS(Vq,VRq); 303 default: MOVHPS(Vq,Mq); | 311 0x3: MOVLHPS(Vps,VRq); 312 default: MOVHPS(Vps,Mq); |
304 } 305 0x7: MOVHPS(Mq,Vq); 306 } 307 // repe (0xF3) 308 0x4: decode OPCODE_OP_BOTTOM3 { 309 0x0: MOVSS(Vd,Wd); 310 0x1: MOVSS(Wd,Vd); 311 0x2: WarnUnimpl::movsldup_Vo_Wo(); --- 16 unchanged lines hidden (view full) --- 328 0x0: MOVSD(Vq,Wq); 329 0x1: MOVSD(Wq,Vq); 330 0x2: MOVDDUP(Vo,Wq); 331 default: UD2(); 332 } 333 default: UD2(); 334 } 335 0x03: decode OPCODE_OP_BOTTOM3 { | 313 } 314 0x7: MOVHPS(Mq,Vq); 315 } 316 // repe (0xF3) 317 0x4: decode OPCODE_OP_BOTTOM3 { 318 0x0: MOVSS(Vd,Wd); 319 0x1: MOVSS(Wd,Vd); 320 0x2: WarnUnimpl::movsldup_Vo_Wo(); --- 16 unchanged lines hidden (view full) --- 337 0x0: MOVSD(Vq,Wq); 338 0x1: MOVSD(Wq,Vq); 339 0x2: MOVDDUP(Vo,Wq); 340 default: UD2(); 341 } 342 default: UD2(); 343 } 344 0x03: decode OPCODE_OP_BOTTOM3 { |
336 //group17(); | 345 //group16(); |
337 0x0: decode MODRM_REG { 338 0x0: WarnUnimpl::prefetch_nta(); 339 0x1: PREFETCH_T0(Mb); 340 0x2: WarnUnimpl::prefetch_t1(); 341 0x3: WarnUnimpl::prefetch_t2(); 342 default: HINT_NOP(); 343 } 344 0x1: HINT_NOP(); --- 6 unchanged lines hidden (view full) --- 351 } 352 0x04: decode LEGACY_DECODEVAL { 353 // no prefix 354 0x0: decode OPCODE_OP_BOTTOM3 { 355 0x0: MOV(Rd,Cd); 356 0x1: MOV(Rd,Dd); 357 0x2: MOV(Cd,Rd); 358 0x3: MOV(Dd,Rd); | 346 0x0: decode MODRM_REG { 347 0x0: WarnUnimpl::prefetch_nta(); 348 0x1: PREFETCH_T0(Mb); 349 0x2: WarnUnimpl::prefetch_t1(); 350 0x3: WarnUnimpl::prefetch_t2(); 351 default: HINT_NOP(); 352 } 353 0x1: HINT_NOP(); --- 6 unchanged lines hidden (view full) --- 360 } 361 0x04: decode LEGACY_DECODEVAL { 362 // no prefix 363 0x0: decode OPCODE_OP_BOTTOM3 { 364 0x0: MOV(Rd,Cd); 365 0x1: MOV(Rd,Dd); 366 0x2: MOV(Cd,Rd); 367 0x3: MOV(Dd,Rd); |
359 0x4: WarnUnimpl::mov_Rd_Td(); 360 0x6: WarnUnimpl::mov_Td_Rd(); | |
361 default: UD2(); 362 } | 368 default: UD2(); 369 } |
363 // lock prefix (0xF0) 364 0x2: decode OPCODE_OP_BOTTOM3 { 365 0x0: WarnUnimpl::mov_Rd_CR8D(); 366 0x2: WarnUnimpl::mov_CR8D_Rd(); | 370 default: UD2(); 371 } 372 0x05: decode LEGACY_DECODEVAL { 373 // no prefix 374 0x0: decode OPCODE_OP_BOTTOM3 { 375 //These moves should really use size o (octword), but 376 //because they are split in two, they use q (quadword). 377 0x0: MOVAPS(Vq,Wq); 378 0x1: MOVAPS(Wq,Vq); 379 0x2: CVTPI2PS(Vq,Qq); 380 0x3: WarnUnimpl::movntps_Mo_Vo(); 381 0x4: CVTTPS2PI(Pq,Wq); 382 0x5: CVTPS2PI(Pq,Wq); 383 0x6: UCOMISS(Vd,Wd); 384 0x7: COMISS(Vd,Wd); |
367 } | 385 } |
386 // repe (0xF3) 387 0x4: decode OPCODE_OP_BOTTOM3 { 388 0x2: CVTSI2SS(Vd,Ed); 389 0x4: CVTTSS2SI(Gd,Wd); 390 0x5: CVTSS2SI(Gd,Wd); 391 default: UD2(); 392 } 393 // operand size (0x66) 394 0x1: decode OPCODE_OP_BOTTOM3 { 395 0x0: MOVAPD(Vo,Wo); 396 0x1: MOVAPD(Wo,Vo); 397 0x2: CVTPI2PD(Vo,Qq); 398 0x3: WarnUnimpl::movntpd_Mo_Vo(); 399 0x4: CVTTPD2PI(Pq,Wo); 400 0x5: CVTPD2PI(Pq,Wo); 401 0x6: UCOMISD(Vq,Wq); 402 0x7: COMISD(Vq,Wq); 403 } 404 // repne (0xF2) 405 0x8: decode OPCODE_OP_BOTTOM3 { 406 // The size of the V operand should be q, not dp 407 0x2: CVTSI2SD(Vdp,Edp); 408 // The size of the W operand should be q, not dp 409 0x4: CVTTSD2SI(Gdp,Wdp); 410 0x5: CVTSD2SI(Gd,Wq); 411 default: UD2(); 412 } |
|
368 default: UD2(); 369 } 370 } | 413 default: UD2(); 414 } 415 } |
371 0x05: decode LEGACY_DECODEVAL { 372 // no prefix 373 0x0: decode OPCODE_OP_BOTTOM3 { 374 //These moves should really use size o (octword), but 375 //because they are split in two, they use q (quadword). 376 0x0: Inst::MOVAPS(Vq,Wq); 377 0x1: Inst::MOVAPS(Wq,Vq); 378 0x2: Inst::CVTPI2PS(Vq,Qq); 379 0x3: movntps_Mo_Vo(); 380 0x4: Inst::CVTTPS2PI(Pq,Wq); 381 0x5: Inst::CVTPS2PI(Pq,Wq); 382 0x6: Inst::UCOMISS(Vd,Wd); 383 0x7: Inst::COMISS(Vd,Wd); 384 } 385 // repe (0xF3) 386 0x4: decode OPCODE_OP_BOTTOM3 { 387 0x2: Inst::CVTSI2SS(Vd,Ed); 388 0x4: Inst::CVTTSS2SI(Gd,Wd); 389 0x5: Inst::CVTSS2SI(Gd,Wd); 390 default: Inst::UD2(); 391 } 392 // operand size (0x66) 393 0x1: decode OPCODE_OP_BOTTOM3 { 394 0x0: Inst::MOVAPD(Vo,Wo); 395 0x1: Inst::MOVAPD(Wo,Vo); 396 0x2: Inst::CVTPI2PD(Vo,Qq); 397 0x3: movntpd_Mo_Vo(); 398 0x4: Inst::CVTTPD2PI(Pq,Wo); 399 0x5: Inst::CVTPD2PI(Pq,Wo); 400 0x6: Inst::UCOMISD(Vq,Wq); 401 0x7: Inst::COMISD(Vq,Wq); 402 } 403 // repne (0xF2) 404 0x8: decode OPCODE_OP_BOTTOM3 { 405 // The size of the V operand should be q, not dp 406 0x2: Inst::CVTSI2SD(Vdp,Edp); 407 // The size of the W operand should be q, not dp 408 0x4: Inst::CVTTSD2SI(Gdp,Wdp); 409 0x5: Inst::CVTSD2SI(Gd,Wq); 410 default: Inst::UD2(); 411 } 412 default: Inst::UD2(); 413 } | |
414 0x06: decode OPCODE_OP_BOTTOM3 { 415 0x0: Inst::WRMSR(); 416 0x1: Inst::RDTSC(); 417 0x2: Inst::RDMSR(); 418 0x3: rdpmc(); 419#if FULL_SYSTEM 420 0x4: sysenter(); 421#else 422 0x4: SyscallInst::sysenter('xc->syscall(Rax)', IsSyscall); 423#endif 424 0x5: sysexit(); 425 0x6: Inst::UD2(); 426 0x7: getsec(); 427 } 428 0x07: decode OPCODE_OP_BOTTOM3 { 429 0x0: three_byte_opcode(); | 416 0x06: decode OPCODE_OP_BOTTOM3 { 417 0x0: Inst::WRMSR(); 418 0x1: Inst::RDTSC(); 419 0x2: Inst::RDMSR(); 420 0x3: rdpmc(); 421#if FULL_SYSTEM 422 0x4: sysenter(); 423#else 424 0x4: SyscallInst::sysenter('xc->syscall(Rax)', IsSyscall); 425#endif 426 0x5: sysexit(); 427 0x6: Inst::UD2(); 428 0x7: getsec(); 429 } 430 0x07: decode OPCODE_OP_BOTTOM3 { 431 0x0: three_byte_opcode(); |
430 0x1: three_byte_opcode(); | |
431 0x2: three_byte_opcode(); | 432 0x2: three_byte_opcode(); |
432 0x3: three_byte_opcode(); 433 0x4: three_byte_opcode(); 434 0x5: three_byte_opcode(); 435 0x6: three_byte_opcode(); 436 0x7: three_byte_opcode(); | 433 default: UD2(); |
437 } 438 format Inst { 439 0x08: decode OPCODE_OP_BOTTOM3 { 440 0x0: CMOVO(Gv,Ev); 441 0x1: CMOVNO(Gv,Ev); 442 0x2: CMOVB(Gv,Ev); 443 0x3: CMOVNB(Gv,Ev); 444 0x4: CMOVZ(Gv,Ev); --- 32 unchanged lines hidden (view full) --- 477 } 478 // operand size (0x66) 479 0x1: decode OPCODE_OP_BOTTOM3 { 480 0x0: MOVMSKPD(Gd,VRo); 481 0x1: SQRTPD(Vo,Wo); 482 0x4: ANDPD(Vo,Wo); 483 0x5: ANDNPD(Vo,Wo); 484 0x6: ORPD(Vo,Wo); | 434 } 435 format Inst { 436 0x08: decode OPCODE_OP_BOTTOM3 { 437 0x0: CMOVO(Gv,Ev); 438 0x1: CMOVNO(Gv,Ev); 439 0x2: CMOVB(Gv,Ev); 440 0x3: CMOVNB(Gv,Ev); 441 0x4: CMOVZ(Gv,Ev); --- 32 unchanged lines hidden (view full) --- 474 } 475 // operand size (0x66) 476 0x1: decode OPCODE_OP_BOTTOM3 { 477 0x0: MOVMSKPD(Gd,VRo); 478 0x1: SQRTPD(Vo,Wo); 479 0x4: ANDPD(Vo,Wo); 480 0x5: ANDNPD(Vo,Wo); 481 0x6: ORPD(Vo,Wo); |
485 //This really should be type o, but it works on q sized 486 //chunks at a time. 487 0x7: XORPD(Vq,Wq); | 482 0x7: XORPD(Vo,Wo); |
488 default: UD2(); 489 } 490 // repne (0xF2) 491 0x8: decode OPCODE_OP_BOTTOM3 { 492 0x1: SQRTSD(Vq,Wq); 493 default: UD2(); 494 } 495 default: UD2(); --- 98 unchanged lines hidden (view full) --- 594 0x7: WarnUnimpl::movdqa_Vo_Wo(); 595 } 596 default: UD2(); 597 } 598 0x0E: decode LEGACY_DECODEVAL { 599 // no prefix 600 0x0: decode OPCODE_OP_BOTTOM3 { 601 0x0: PSHUFW(Pq,Qq,Ib); | 483 default: UD2(); 484 } 485 // repne (0xF2) 486 0x8: decode OPCODE_OP_BOTTOM3 { 487 0x1: SQRTSD(Vq,Wq); 488 default: UD2(); 489 } 490 default: UD2(); --- 98 unchanged lines hidden (view full) --- 589 0x7: WarnUnimpl::movdqa_Vo_Wo(); 590 } 591 default: UD2(); 592 } 593 0x0E: decode LEGACY_DECODEVAL { 594 // no prefix 595 0x0: decode OPCODE_OP_BOTTOM3 { 596 0x0: PSHUFW(Pq,Qq,Ib); |
602 //0x1: group13_pshimw(); | 597 //0x1: group12_pshimw(); |
603 0x1: decode MODRM_REG { | 598 0x1: decode MODRM_REG { |
604 0x2: decode LEGACY_OP { 605 0x0: PSRLW(PRq,Ib); 606 0x1: PSRLW(VRo,Ib); 607 } 608 0x4: decode LEGACY_OP { 609 0x0: PSRAW(PRq,Ib); 610 0x1: PSRAW(VRo,Ib); 611 } 612 0x6: decode LEGACY_OP { 613 0x0: PSLLW(PRq,Ib); 614 0x1: PSLLW(VRo,Ib); 615 } | 599 0x2: PSRLW(PRq,Ib); 600 0x4: PSRAW(PRq,Ib); 601 0x6: PSLLW(PRq,Ib); |
616 default: UD2(); 617 } | 602 default: UD2(); 603 } |
618 //0x2: group14_pshimd(); | 604 //0x2: group13_pshimd(); |
619 0x2: decode MODRM_REG { | 605 0x2: decode MODRM_REG { |
620 0x2: decode LEGACY_OP { 621 0x0: PSRLD(PRq,Ib); 622 0x1: PSRLD(VRo,Ib); 623 } 624 0x4: decode LEGACY_OP { 625 0x0: PSRAD(PRq,Ib); 626 0x1: PSRAD(VRo,Ib); 627 } 628 0x6: decode LEGACY_OP { 629 0x0: PSLLD(PRq,Ib); 630 0x1: PSLLD(VRo,Ib); 631 } | 606 0x2: PSRLD(PRq,Ib); 607 0x4: PSRAD(PRq,Ib); 608 0x6: PSLLD(PRq,Ib); |
632 default: UD2(); 633 } | 609 default: UD2(); 610 } |
634 //0x3: group15_pshimq(); | 611 //0x3: group14_pshimq(); |
635 0x3: decode MODRM_REG { | 612 0x3: decode MODRM_REG { |
636 0x2: decode LEGACY_OP { 637 0x0: PSRLQ(PRq,Ib); 638 0x1: PSRLQ(VRo,Ib); 639 } 640 0x3: decode LEGACY_OP { 641 0x0: UD2(); 642 0x1: WarnUnimpl::psrldq_VRo_Ib(); 643 } 644 0x6: decode LEGACY_OP { 645 0x0: PSLLQ(PRq,Ib); 646 0x1: PSLLQ(VRo,Ib); 647 } 648 0x7: decode LEGACY_OP { 649 0x0: UD2(); 650 0x1: WarnUnimpl::pslldq_VRo_Ib(); 651 } | 613 0x2: PSRLQ(PRq,Ib); 614 0x6: PSLLQ(PRq,Ib); |
652 default: Inst::UD2(); 653 } 654 0x4: Inst::PCMPEQB(Pq,Qq); 655 0x5: Inst::PCMPEQW(Pq,Qq); 656 0x6: Inst::PCMPEQD(Pq,Qq); 657 0x7: WarnUnimpl::emms(); 658 } 659 // repe (0xF3) 660 0x4: decode OPCODE_OP_BOTTOM3 { 661 0x0: PSHUFHW(Vo,Wo,Ib); 662 default: UD2(); 663 } 664 // operand size (0x66) 665 0x1: decode OPCODE_OP_BOTTOM3 { 666 0x0: PSHUFD(Vo,Wo,Ib); | 615 default: Inst::UD2(); 616 } 617 0x4: Inst::PCMPEQB(Pq,Qq); 618 0x5: Inst::PCMPEQW(Pq,Qq); 619 0x6: Inst::PCMPEQD(Pq,Qq); 620 0x7: WarnUnimpl::emms(); 621 } 622 // repe (0xF3) 623 0x4: decode OPCODE_OP_BOTTOM3 { 624 0x0: PSHUFHW(Vo,Wo,Ib); 625 default: UD2(); 626 } 627 // operand size (0x66) 628 0x1: decode OPCODE_OP_BOTTOM3 { 629 0x0: PSHUFD(Vo,Wo,Ib); |
667 //0x1: group13_pshimw(); | 630 //0x1: group12_pshimw(); |
668 0x1: decode MODRM_REG { | 631 0x1: decode MODRM_REG { |
669 0x2: decode LEGACY_OP { 670 0x0: PSRLW(PRq,Ib); 671 0x1: PSRLW(VRo,Ib); 672 } 673 0x4: decode LEGACY_OP { 674 0x0: PSRAW(PRq,Ib); 675 0x1: PSRAW(VRo,Ib); 676 } 677 0x6: decode LEGACY_OP { 678 0x0: PSLLW(PRq,Ib); 679 0x1: PSLLW(VRo,Ib); 680 } 681 default: Inst::UD2(); | 632 0x2: PSRLW(VRo,Ib); 633 0x4: PSRAW(VRo,Ib); 634 0x6: PSLLW(VRo,Ib); |
682 } | 635 } |
683 //0x2: group14_pshimd(); | 636 //0x2: group13_pshimd(); |
684 0x2: decode MODRM_REG { | 637 0x2: decode MODRM_REG { |
685 0x2: decode LEGACY_OP { 686 0x0: PSRLD(PRq,Ib); 687 0x1: PSRLD(VRo,Ib); 688 } 689 0x4: decode LEGACY_OP { 690 0x0: PSRAD(PRq,Ib); 691 0x1: PSRAD(VRo,Ib); 692 } 693 0x6: decode LEGACY_OP { 694 0x0: PSLLD(PRq,Ib); 695 0x1: PSLLD(VRo,Ib); 696 } | 638 0x2: PSRLD(VRo,Ib); 639 0x4: PSRAD(VRo,Ib); 640 0x6: PSLLD(VRo,Ib); |
697 default: UD2(); 698 } | 641 default: UD2(); 642 } |
699 //0x3: group15_pshimq(); | 643 //0x3: group14_pshimq(); |
700 0x3: decode MODRM_REG { | 644 0x3: decode MODRM_REG { |
701 0x2: decode LEGACY_OP { 702 0x0: PSRLQ(PRq,Ib); 703 0x1: PSRLQ(VRo,Ib); 704 } 705 0x3: decode LEGACY_OP { 706 0x0: UD2(); 707 0x1: WarnUnimpl::psrldq_VRo_Ib(); 708 } 709 0x6: decode LEGACY_OP { 710 0x0: PSLLQ(PRq,Ib); 711 0x1: PSLLQ(VRo,Ib); 712 } 713 0x7: decode LEGACY_OP { 714 0x0: UD2(); 715 0x1: WarnUnimpl::pslldq_VRo_Ib(); 716 } | 645 0x2: PSRLQ(VRo,Ib); 646 0x3: WarnUnimpl::psrldq_VRo_Ib(); 647 0x6: PSLLQ(VRo,Ib); 648 0x7: WarnUnimpl::pslldq_VRo_Ib(); |
717 default: UD2(); 718 } 719 0x4: PCMPEQB(Vo,Wo); 720 0x5: PCMPEQW(Vo,Wo); 721 0x6: PCMPEQD(Vo,Wo); 722 default: UD2(); 723 } 724 // repne (0xF2) 725 0x8: decode OPCODE_OP_BOTTOM3 { 726 0x0: PSHUFLW(Vo,Wo,Ib); 727 default: UD2(); 728 } 729 default: UD2(); 730 } 731 0x0F: decode LEGACY_DECODEVAL { 732 // no prefix 733 0x0: decode OPCODE_OP_BOTTOM3 { | 649 default: UD2(); 650 } 651 0x4: PCMPEQB(Vo,Wo); 652 0x5: PCMPEQW(Vo,Wo); 653 0x6: PCMPEQD(Vo,Wo); 654 default: UD2(); 655 } 656 // repne (0xF2) 657 0x8: decode OPCODE_OP_BOTTOM3 { 658 0x0: PSHUFLW(Vo,Wo,Ib); 659 default: UD2(); 660 } 661 default: UD2(); 662 } 663 0x0F: decode LEGACY_DECODEVAL { 664 // no prefix 665 0x0: decode OPCODE_OP_BOTTOM3 { |
734 0x0: WarnUnimpl::vmread_Ed_or_Eq_Gd_or_Gq(); 735 0x1: WarnUnimpl::vmwrite_Gd_or_Gq_Ed_or_Eq(); | 666 0x0: WarnUnimpl::vmread_Edp_Gdp(); 667 0x1: WarnUnimpl::vmwrite_Gdp_Edp(); |
736 0x6: MOVD(Edp,Pdp); 737 0x7: MOVQ(Qq,Pq); 738 default: UD2(); 739 } 740 // repe (0xF3) 741 0x4: decode OPCODE_OP_BOTTOM3 { 742 0x6: MOVQ(Vq,Wq); 743 0x7: WarnUnimpl::movdqu_Wo_Vo(); --- 65 unchanged lines hidden (view full) --- 809 Rax = result.rax; 810 Rbx = result.rbx; 811 Rcx = result.rcx; 812 Rdx = result.rdx; 813 }}); 814 0x3: Inst::BT(Ev,Gv); 815 0x4: Inst::SHLD(Ev,Gv,Ib); 816 0x5: Inst::SHLD(Ev,Gv); | 668 0x6: MOVD(Edp,Pdp); 669 0x7: MOVQ(Qq,Pq); 670 default: UD2(); 671 } 672 // repe (0xF3) 673 0x4: decode OPCODE_OP_BOTTOM3 { 674 0x6: MOVQ(Vq,Wq); 675 0x7: WarnUnimpl::movdqu_Wo_Vo(); --- 65 unchanged lines hidden (view full) --- 741 Rax = result.rax; 742 Rbx = result.rbx; 743 Rcx = result.rcx; 744 Rdx = result.rdx; 745 }}); 746 0x3: Inst::BT(Ev,Gv); 747 0x4: Inst::SHLD(Ev,Gv,Ib); 748 0x5: Inst::SHLD(Ev,Gv); |
817 0x6: xbts_and_cmpxchg(); 818 0x7: ibts_and_cmpxchg(); | 749 default: Inst::UD2(); |
819 } 820 0x15: decode OPCODE_OP_BOTTOM3 { 821 0x0: push_gs(); 822 0x1: pop_gs(); 823 0x2: rsm_smm(); 824 0x3: Inst::BTS(Ev,Gv); 825 0x4: Inst::SHRD(Ev,Gv,Ib); 826 0x5: Inst::SHRD(Ev,Gv); | 750 } 751 0x15: decode OPCODE_OP_BOTTOM3 { 752 0x0: push_gs(); 753 0x1: pop_gs(); 754 0x2: rsm_smm(); 755 0x3: Inst::BTS(Ev,Gv); 756 0x4: Inst::SHRD(Ev,Gv,Ib); 757 0x5: Inst::SHRD(Ev,Gv); |
827 //0x6: group16(); 828 0x6: decode MODRM_REG { 829 0x0: fxsave(); 830 0x1: fxrstor(); 831 0x2: Inst::LDMXCSR(Md); 832 0x3: Inst::STMXCSR(Md); 833 0x4: Inst::UD2(); 834 0x5: decode MODRM_MOD { 835 0x3: BasicOperate::LFENCE( | 758 //0x6: group15(); 759 0x6: decode MODRM_MOD { 760 0x3: decode MODRM_REG { 761 0x5: BasicOperate::LFENCE( |
836 {{/*Nothing*/}}, IsReadBarrier); | 762 {{/*Nothing*/}}, IsReadBarrier); |
837 default: Inst::UD2(); 838 } 839 0x6: decode MODRM_MOD { 840 0x3: BasicOperate::MFENCE( | 763 0x6: BasicOperate::MFENCE( |
841 {{/*Nothing*/}}, IsMemBarrier); | 764 {{/*Nothing*/}}, IsMemBarrier); |
842 default: Inst::UD2(); 843 } 844 0x7: decode MODRM_MOD { 845 0x3: BasicOperate::SFENCE( | 765 0x7: BasicOperate::SFENCE( |
846 {{/*Nothing*/}}, IsWriteBarrier); 847 default: Inst::UD2(); 848 } | 766 {{/*Nothing*/}}, IsWriteBarrier); 767 default: Inst::UD2(); 768 } |
769 default: decode MODRM_REG { 770 0x0: fxsave(); 771 0x1: fxrstor(); 772 0x2: Inst::LDMXCSR(Md); 773 0x3: Inst::STMXCSR(Md); 774 0x4: xsave(); 775 0x5: xrstor(); 776 0x6: Inst::UD2(); 777 0x7: clflush(); 778 } |
|
849 } 850 0x7: Inst::IMUL(Gv,Ev); 851 } 852 format Inst { 853 0x16: decode OPCODE_OP_BOTTOM3 { 854 0x0: CMPXCHG(Eb,Gb); 855 0x1: CMPXCHG(Ev,Gv); 856 0x2: WarnUnimpl::lss_Gz_Mp(); 857 0x3: BTR(Ev,Gv); 858 0x4: WarnUnimpl::lfs_Gz_Mp(); 859 0x5: WarnUnimpl::lgs_Gz_Mp(); 860 //The size of the second operand in these instructions 861 //should really be "b" or "w", but it's set to v in order 862 //to have a consistent register size. This shouldn't 863 //affect behavior. 864 0x6: MOVZX_B(Gv,Ev); 865 0x7: MOVZX_W(Gv,Ev); 866 } 867 0x17: decode OPCODE_OP_BOTTOM3 { | 779 } 780 0x7: Inst::IMUL(Gv,Ev); 781 } 782 format Inst { 783 0x16: decode OPCODE_OP_BOTTOM3 { 784 0x0: CMPXCHG(Eb,Gb); 785 0x1: CMPXCHG(Ev,Gv); 786 0x2: WarnUnimpl::lss_Gz_Mp(); 787 0x3: BTR(Ev,Gv); 788 0x4: WarnUnimpl::lfs_Gz_Mp(); 789 0x5: WarnUnimpl::lgs_Gz_Mp(); 790 //The size of the second operand in these instructions 791 //should really be "b" or "w", but it's set to v in order 792 //to have a consistent register size. This shouldn't 793 //affect behavior. 794 0x6: MOVZX_B(Gv,Ev); 795 0x7: MOVZX_W(Gv,Ev); 796 } 797 0x17: decode OPCODE_OP_BOTTOM3 { |
868 0x0: WarnUnimpl::jmpe_Jz(); // IA-64? 869 //0x1: group11_UD2(); | 798 0x0: decode LEGACY_REP { 799 0x0: WarnUnimpl::jmpe_Jz(); 800 0x1: WarnUnimpl::popcnt_Gv_Ev(); 801 } 802 //0x1: group10_UD2(); |
870 0x1: UD2(); 871 //0x2: group8_Ev_Ib(); 872 0x2: decode MODRM_REG { 873 0x4: BT(Ev,Ib); 874 0x5: BTS(Ev,Ib); 875 0x6: BTR(Ev,Ib); 876 0x7: BTC(Ev,Ib); 877 default: UD2(); --- 245 unchanged lines hidden --- | 803 0x1: UD2(); 804 //0x2: group8_Ev_Ib(); 805 0x2: decode MODRM_REG { 806 0x4: BT(Ev,Ib); 807 0x5: BTS(Ev,Ib); 808 0x6: BTR(Ev,Ib); 809 0x7: BTC(Ev,Ib); 810 default: UD2(); --- 245 unchanged lines hidden --- |