diff options
| author | forsyth <forsyth@vitanuova.com> | 2010-05-03 15:47:59 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2010-05-03 15:47:59 +0100 |
| commit | 773d7fd206e9623edfb12cd182dc5a115ec86950 (patch) | |
| tree | 9f1953e19a531cca9d2f0be969f902eddda1dca1 /utils/libmach | |
| parent | f8af978a60a0a00813e7a57f93d9a5ba4df44069 (diff) | |
20100503-1547
Diffstat (limited to 'utils/libmach')
| -rw-r--r-- | utils/libmach/8db.c | 1749 | ||||
| -rw-r--r-- | utils/libmach/kdb.c | 340 | ||||
| -rw-r--r-- | utils/libmach/obj.c | 26 | ||||
| -rw-r--r-- | utils/libmach/setmach.c | 23 |
4 files changed, 1129 insertions, 1009 deletions
diff --git a/utils/libmach/8db.c b/utils/libmach/8db.c index 7177c815..8cdcf9d2 100644 --- a/utils/libmach/8db.c +++ b/utils/libmach/8db.c @@ -19,34 +19,50 @@ static int i386instlen(Map*, uvlong); static char STARTSYM[] = "_main"; static char PROFSYM[] = "_mainp"; static char FRAMENAME[] = ".frame"; -static char *excname[] = +static char *excname[65] = { -[0] "divide error", -[1] "debug exception", -[4] "overflow", -[5] "bounds check", -[6] "invalid opcode", -[7] "math coprocessor emulation", -[8] "double fault", -[9] "math coprocessor overrun", -[10] "invalid TSS", -[11] "segment not present", -[12] "stack exception", -[13] "general protection violation", -[14] "page fault", -[16] "math coprocessor error", -[17] "alignment check", -[18] "machine check", -[19] "floating-point exception", -[24] "clock", -[25] "keyboard", -[27] "modem status", -[28] "serial line status", -[30] "floppy disk", -[36] "mouse", -[37] "math coprocessor", -[38] "hard disk", -[64] "system call", +/*[0]*/ "divide error", +/*[1]*/ "debug exception", +/*[2]*/ nil, +/*[3]*/ nil, +/*[4]*/ "overflow", +/*[5]*/ "bounds check", +/*[6]*/ "invalid opcode", +/*[7]*/ "math coprocessor emulation", +/*[8]*/ "double fault", +/*[9]*/ "math coprocessor overrun", +/*[10]*/ "invalid TSS", +/*[11]*/ "segment not present", +/*[12]*/ "stack exception", +/*[13]*/ "general protection violation", +/*[14]*/ "page fault", +/*[15]*/ nil, +/*[16]*/ "math coprocessor error", +/*[17]*/ "alignment check", +/*[18]*/ "machine check", +/*[19]*/ "floating-point exception", +/*[20]*/ nil, +/*[21]*/ nil, +/*[22]*/ nil, +/*[23]*/ nil, +/*[24]*/ "clock", +/*[25]*/ "keyboard", +/*[26]*/ nil, +/*[27]*/ "modem status", +/*[28]*/ "serial line status", +/*[29]*/ nil, +/*[30]*/ "floppy disk", +/*[31]*/ nil, +/*[32]*/ nil, +/*[33]*/ nil, +/*[34]*/ nil, +/*[35]*/ nil, +/*[36]*/ "mouse", +/*[37]*/ "math coprocessor", +/*[38]*/ "hard disk", + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/* 39-54 */ + 0,0,0,0,0,0,0,0,0, /* 55-63 */ +/*[64]*/ "system call", }; Machdata i386mach = @@ -243,6 +259,7 @@ enum{ typedef struct Optable Optable; struct Optable { + int x; char operand[2]; void *proto; /* actually either (char*) or (Optable*) */ }; @@ -282,28 +299,28 @@ enum { static Optable optab0F00[8]= { -[0x00] 0,0, "MOVW LDT,%e", -[0x01] 0,0, "MOVW TR,%e", -[0x02] 0,0, "MOVW %e,LDT", -[0x03] 0,0, "MOVW %e,TR", -[0x04] 0,0, "VERR %e", -[0x05] 0,0, "VERW %e", +0x00, 0,0, "MOVW LDT,%e", +0x01, 0,0, "MOVW TR,%e", +0x02, 0,0, "MOVW %e,LDT", +0x03, 0,0, "MOVW %e,TR", +0x04, 0,0, "VERR %e", +0x05, 0,0, "VERW %e", }; static Optable optab0F01[8]= { -[0x00] 0,0, "MOVL GDTR,%e", -[0x01] 0,0, "MOVL IDTR,%e", -[0x02] 0,0, "MOVL %e,GDTR", -[0x03] 0,0, "MOVL %e,IDTR", -[0x04] 0,0, "MOVW MSW,%e", /* word */ -[0x06] 0,0, "MOVW %e,MSW", /* word */ -[0x07] 0,0, "INVLPG %e", /* or SWAPGS */ +0x00, 0,0, "MOVL GDTR,%e", +0x01, 0,0, "MOVL IDTR,%e", +0x02, 0,0, "MOVL %e,GDTR", +0x03, 0,0, "MOVL %e,IDTR", +0x04, 0,0, "MOVW MSW,%e", /* word */ +0x06, 0,0, "MOVW %e,MSW", /* word */ +0x07, 0,0, "INVLPG %e", /* or SWAPGS */ }; static Optable optab0F01F8[1]= { -[0x00] 0,0, "SWAPGS", +0x00, 0,0, "SWAPGS", }; /* 0F71 */ @@ -312,13 +329,13 @@ static Optable optab0F01F8[1]= static Optable optab0FAE[8]= { -[0x00] 0,0, "FXSAVE %e", -[0x01] 0,0, "FXRSTOR %e", -[0x02] 0,0, "LDMXCSR %e", -[0x03] 0,0, "STMXCSR %e", -[0x05] 0,0, "LFENCE", -[0x06] 0,0, "MFENCE", -[0x07] 0,0, "SFENCE", +0x00, 0,0, "FXSAVE %e", +0x01, 0,0, "FXRSTOR %e", +0x02, 0,0, "LDMXCSR %e", +0x03, 0,0, "STMXCSR %e", +0x05, 0,0, "LFENCE", +0x06, 0,0, "MFENCE", +0x07, 0,0, "SFENCE", }; /* 0F18 */ @@ -326,455 +343,455 @@ static Optable optab0FAE[8]= static Optable optab0FBA[8]= { -[0x04] Ib,0, "BT%S %i,%e", -[0x05] Ib,0, "BTS%S %i,%e", -[0x06] Ib,0, "BTR%S %i,%e", -[0x07] Ib,0, "BTC%S %i,%e", +0x04, Ib,0, "BT%S %i,%e", +0x05, Ib,0, "BTS%S %i,%e", +0x06, Ib,0, "BTR%S %i,%e", +0x07, Ib,0, "BTC%S %i,%e", }; static Optable optab0F0F[256]= { -[0x0c] 0,0, "PI2FW %m,%M", -[0x0d] 0,0, "PI2L %m,%M", -[0x1c] 0,0, "PF2IW %m,%M", -[0x1d] 0,0, "PF2IL %m,%M", -[0x8a] 0,0, "PFNACC %m,%M", -[0x8e] 0,0, "PFPNACC %m,%M", -[0x90] 0,0, "PFCMPGE %m,%M", -[0x94] 0,0, "PFMIN %m,%M", -[0x96] 0,0, "PFRCP %m,%M", -[0x97] 0,0, "PFRSQRT %m,%M", -[0x9a] 0,0, "PFSUB %m,%M", -[0x9e] 0,0, "PFADD %m,%M", -[0xa0] 0,0, "PFCMPGT %m,%M", -[0xa4] 0,0, "PFMAX %m,%M", -[0xa6] 0,0, "PFRCPIT1 %m,%M", -[0xa7] 0,0, "PFRSQIT1 %m,%M", -[0xaa] 0,0, "PFSUBR %m,%M", -[0xae] 0,0, "PFACC %m,%M", -[0xb0] 0,0, "PFCMPEQ %m,%M", -[0xb4] 0,0, "PFMUL %m,%M", -[0xb6] 0,0, "PFRCPI2T %m,%M", -[0xb7] 0,0, "PMULHRW %m,%M", -[0xbb] 0,0, "PSWAPL %m,%M", +0x0c, 0,0, "PI2FW %m,%M", +0x0d, 0,0, "PI2L %m,%M", +0x1c, 0,0, "PF2IW %m,%M", +0x1d, 0,0, "PF2IL %m,%M", +0x8a, 0,0, "PFNACC %m,%M", +0x8e, 0,0, "PFPNACC %m,%M", +0x90, 0,0, "PFCMPGE %m,%M", +0x94, 0,0, "PFMIN %m,%M", +0x96, 0,0, "PFRCP %m,%M", +0x97, 0,0, "PFRSQRT %m,%M", +0x9a, 0,0, "PFSUB %m,%M", +0x9e, 0,0, "PFADD %m,%M", +0xa0, 0,0, "PFCMPGT %m,%M", +0xa4, 0,0, "PFMAX %m,%M", +0xa6, 0,0, "PFRCPIT1 %m,%M", +0xa7, 0,0, "PFRSQIT1 %m,%M", +0xaa, 0,0, "PFSUBR %m,%M", +0xae, 0,0, "PFACC %m,%M", +0xb0, 0,0, "PFCMPEQ %m,%M", +0xb4, 0,0, "PFMUL %m,%M", +0xb6, 0,0, "PFRCPI2T %m,%M", +0xb7, 0,0, "PMULHRW %m,%M", +0xbb, 0,0, "PSWAPL %m,%M", }; static Optable optab0FC7[8]= { -[0x01] 0,0, "CMPXCHG8B %e", +0x01, 0,0, "CMPXCHG8B %e", }; static Optable optab660F71[8]= { -[0x02] Ib,0, "PSRLW %i,%X", -[0x04] Ib,0, "PSRAW %i,%X", -[0x06] Ib,0, "PSLLW %i,%X", +0x02, Ib,0, "PSRLW %i,%X", +0x04, Ib,0, "PSRAW %i,%X", +0x06, Ib,0, "PSLLW %i,%X", }; static Optable optab660F72[8]= { -[0x02] Ib,0, "PSRLL %i,%X", -[0x04] Ib,0, "PSRAL %i,%X", -[0x06] Ib,0, "PSLLL %i,%X", +0x02, Ib,0, "PSRLL %i,%X", +0x04, Ib,0, "PSRAL %i,%X", +0x06, Ib,0, "PSLLL %i,%X", }; static Optable optab660F73[8]= { -[0x02] Ib,0, "PSRLQ %i,%X", -[0x03] Ib,0, "PSRLO %i,%X", -[0x06] Ib,0, "PSLLQ %i,%X", -[0x07] Ib,0, "PSLLO %i,%X", +0x02, Ib,0, "PSRLQ %i,%X", +0x03, Ib,0, "PSRLO %i,%X", +0x06, Ib,0, "PSLLQ %i,%X", +0x07, Ib,0, "PSLLO %i,%X", }; static Optable optab660F[256]= { -[0x2B] RM,0, "MOVNTPD %x,%e", -[0x2E] RM,0, "UCOMISD %x,%X", -[0x2F] RM,0, "COMISD %x,%X", -[0x5A] RM,0, "CVTPD2PS %x,%X", -[0x5B] RM,0, "CVTPS2PL %x,%X", -[0x6A] RM,0, "PUNPCKHLQ %x,%X", -[0x6B] RM,0, "PACKSSLW %x,%X", -[0x6C] RM,0, "PUNPCKLQDQ %x,%X", -[0x6D] RM,0, "PUNPCKHQDQ %x,%X", -[0x6E] RM,0, "MOV%S %e,%X", -[0x6F] RM,0, "MOVO %x,%X", /* MOVDQA */ -[0x70] RM,Ib, "PSHUFL %i,%x,%X", -[0x71] RMOP,0, optab660F71, -[0x72] RMOP,0, optab660F72, -[0x73] RMOP,0, optab660F73, -[0x7E] RM,0, "MOV%S %X,%e", -[0x7F] RM,0, "MOVO %X,%x", -[0xC4] RM,Ib, "PINSRW %i,%e,%X", -[0xC5] RMR,Ib, "PEXTRW %i,%X,%e", -[0xD4] RM,0, "PADDQ %x,%X", -[0xD5] RM,0, "PMULLW %x,%X", -[0xD6] RM,0, "MOVQ %X,%x", -[0xE6] RM,0, "CVTTPD2PL %x,%X", -[0xE7] RM,0, "MOVNTO %X,%e", -[0xF7] RM,0, "MASKMOVOU %x,%X", +0x2B, RM,0, "MOVNTPD %x,%e", +0x2E, RM,0, "UCOMISD %x,%X", +0x2F, RM,0, "COMISD %x,%X", +0x5A, RM,0, "CVTPD2PS %x,%X", +0x5B, RM,0, "CVTPS2PL %x,%X", +0x6A, RM,0, "PUNPCKHLQ %x,%X", +0x6B, RM,0, "PACKSSLW %x,%X", +0x6C, RM,0, "PUNPCKLQDQ %x,%X", +0x6D, RM,0, "PUNPCKHQDQ %x,%X", +0x6E, RM,0, "MOV%S %e,%X", +0x6F, RM,0, "MOVO %x,%X", /* MOVDQA */ +0x70, RM,Ib, "PSHUFL %i,%x,%X", +0x71, RMOP,0, optab660F71, +0x72, RMOP,0, optab660F72, +0x73, RMOP,0, optab660F73, +0x7E, RM,0, "MOV%S %X,%e", +0x7F, RM,0, "MOVO %X,%x", +0xC4, RM,Ib, "PINSRW %i,%e,%X", +0xC5, RMR,Ib, "PEXTRW %i,%X,%e", +0xD4, RM,0, "PADDQ %x,%X", +0xD5, RM,0, "PMULLW %x,%X", +0xD6, RM,0, "MOVQ %X,%x", +0xE6, RM,0, "CVTTPD2PL %x,%X", +0xE7, RM,0, "MOVNTO %X,%e", +0xF7, RM,0, "MASKMOVOU %x,%X", }; static Optable optabF20F[256]= { -[0x10] RM,0, "MOVSD %x,%X", -[0x11] RM,0, "MOVSD %X,%x", -[0x2A] RM,0, "CVTS%S2SD %e,%X", -[0x2C] RM,0, "CVTTSD2S%S %x,%r", -[0x2D] RM,0, "CVTSD2S%S %x,%r", -[0x5A] RM,0, "CVTSD2SS %x,%X", -[0x6F] RM,0, "MOVOU %x,%X", -[0x70] RM,Ib, "PSHUFLW %i,%x,%X", -[0x7F] RM,0, "MOVOU %X,%x", -[0xD6] RM,0, "MOVQOZX %M,%X", -[0xE6] RM,0, "CVTPD2PL %x,%X", +0x10, RM,0, "MOVSD %x,%X", +0x11, RM,0, "MOVSD %X,%x", +0x2A, RM,0, "CVTS%S2SD %e,%X", +0x2C, RM,0, "CVTTSD2S%S %x,%r", +0x2D, RM,0, "CVTSD2S%S %x,%r", +0x5A, RM,0, "CVTSD2SS %x,%X", +0x6F, RM,0, "MOVOU %x,%X", +0x70, RM,Ib, "PSHUFLW %i,%x,%X", +0x7F, RM,0, "MOVOU %X,%x", +0xD6, RM,0, "MOVQOZX %M,%X", +0xE6, RM,0, "CVTPD2PL %x,%X", }; static Optable optabF30F[256]= { -[0x10] RM,0, "MOVSS %x,%X", -[0x11] RM,0, "MOVSS %X,%x", -[0x2A] RM,0, "CVTS%S2SS %e,%X", -[0x2C] RM,0, "CVTTSS2S%S %x,%r", -[0x2D] RM,0, "CVTSS2S%S %x,%r", -[0x5A] RM,0, "CVTSS2SD %x,%X", -[0x5B] RM,0, "CVTTPS2PL %x,%X", -[0x6F] RM,0, "MOVOU %x,%X", -[0x70] RM,Ib, "PSHUFHW %i,%x,%X", -[0x7E] RM,0, "MOVQOZX %x,%X", -[0x7F] RM,0, "MOVOU %X,%x", -[0xD6] RM,0, "MOVQOZX %m*,%X", -[0xE6] RM,0, "CVTPL2PD %x,%X", +0x10, RM,0, "MOVSS %x,%X", +0x11, RM,0, "MOVSS %X,%x", +0x2A, RM,0, "CVTS%S2SS %e,%X", +0x2C, RM,0, "CVTTSS2S%S %x,%r", +0x2D, RM,0, "CVTSS2S%S %x,%r", +0x5A, RM,0, "CVTSS2SD %x,%X", +0x5B, RM,0, "CVTTPS2PL %x,%X", +0x6F, RM,0, "MOVOU %x,%X", +0x70, RM,Ib, "PSHUFHW %i,%x,%X", +0x7E, RM,0, "MOVQOZX %x,%X", +0x7F, RM,0, "MOVOU %X,%x", +0xD6, RM,0, "MOVQOZX %m*,%X", +0xE6, RM,0, "CVTPL2PD %x,%X", }; static Optable optab0F[256]= { -[0x00] RMOP,0, optab0F00, -[0x01] RMOP,0, optab0F01, -[0x02] RM,0, "LAR %e,%r", -[0x03] RM,0, "LSL %e,%r", -[0x05] 0,0, "SYSCALL", -[0x06] 0,0, "CLTS", -[0x07] 0,0, "SYSRET", -[0x08] 0,0, "INVD", -[0x09] 0,0, "WBINVD", -[0x0B] 0,0, "UD2", -[0x0F] RM,AUX, optab0F0F, /* 3DNow! */ -[0x10] RM,0, "MOVU%s %x,%X", -[0x11] RM,0, "MOVU%s %X,%x", -[0x12] RM,0, "MOV[H]L%s %x,%X", /* TO DO: H if source is XMM */ -[0x13] RM,0, "MOVL%s %X,%e", -[0x14] RM,0, "UNPCKL%s %x,%X", -[0x15] RM,0, "UNPCKH%s %x,%X", -[0x16] RM,0, "MOV[L]H%s %x,%X", /* TO DO: L if source is XMM */ -[0x17] RM,0, "MOVH%s %X,%x", -[0x20] RMR,0, "MOVL %C,%e", -[0x21] RMR,0, "MOVL %D,%e", -[0x22] RMR,0, "MOVL %e,%C", -[0x23] RMR,0, "MOVL %e,%D", -[0x24] RMR,0, "MOVL %T,%e", -[0x26] RMR,0, "MOVL %e,%T", -[0x28] RM,0, "MOVA%s %x,%X", -[0x29] RM,0, "MOVA%s %X,%x", -[0x2A] RM,0, "CVTPL2%s %m*,%X", -[0x2B] RM,0, "MOVNT%s %X,%e", -[0x2C] RM,0, "CVTT%s2PL %x,%M", -[0x2D] RM,0, "CVT%s2PL %x,%M", -[0x2E] RM,0, "UCOMISS %x,%X", -[0x2F] RM,0, "COMISS %x,%X", -[0x30] 0,0, "WRMSR", -[0x31] 0,0, "RDTSC", -[0x32] 0,0, "RDMSR", -[0x33] 0,0, "RDPMC", -[0x42] RM,0, "CMOVC %e,%r", /* CF */ -[0x43] RM,0, "CMOVNC %e,%r", /* ¬ CF */ -[0x44] RM,0, "CMOVZ %e,%r", /* ZF */ -[0x45] RM,0, "CMOVNZ %e,%r", /* ¬ ZF */ -[0x46] RM,0, "CMOVBE %e,%r", /* CF ∨ ZF */ -[0x47] RM,0, "CMOVA %e,%r", /* ¬CF ∧ ¬ZF */ -[0x48] RM,0, "CMOVS %e,%r", /* SF */ -[0x49] RM,0, "CMOVNS %e,%r", /* ¬ SF */ -[0x4A] RM,0, "CMOVP %e,%r", /* PF */ -[0x4B] RM,0, "CMOVNP %e,%r", /* ¬ PF */ -[0x4C] RM,0, "CMOVLT %e,%r", /* LT ≡ OF ≠ SF */ -[0x4D] RM,0, "CMOVGE %e,%r", /* GE ≡ ZF ∨ SF */ -[0x4E] RM,0, "CMOVLE %e,%r", /* LE ≡ ZF ∨ LT */ -[0x4F] RM,0, "CMOVGT %e,%r", /* GT ≡ ¬ZF ∧ GE */ -[0x50] RM,0, "MOVMSK%s %X,%r", /* TO DO: check */ -[0x51] RM,0, "SQRT%s %x,%X", -[0x52] RM,0, "RSQRT%s %x,%X", -[0x53] RM,0, "RCP%s %x,%X", -[0x54] RM,0, "AND%s %x,%X", -[0x55] RM,0, "ANDN%s %x,%X", -[0x56] RM,0, "OR%s %x,%X", /* TO DO: S/D */ -[0x57] RM,0, "XOR%s %x,%X", /* S/D */ -[0x58] RM,0, "ADD%s %x,%X", /* S/P S/D */ -[0x59] RM,0, "MUL%s %x,%X", -[0x5A] RM,0, "CVTPS2PD %x,%X", -[0x5B] RM,0, "CVTPL2PS %x,%X", -[0x5C] RM,0, "SUB%s %x,%X", -[0x5D] RM,0, "MIN%s %x,%X", -[0x5E] RM,0, "DIV%s %x,%X", /* TO DO: S/P S/D */ -[0x5F] RM,0, "MAX%s %x,%X", -[0x60] RM,0, "PUNPCKLBW %m,%M", -[0x61] RM,0, "PUNPCKLWL %m,%M", -[0x62] RM,0, "PUNPCKLLQ %m,%M", -[0x63] RM,0, "PACKSSWB %m,%M", -[0x64] RM,0, "PCMPGTB %m,%M", -[0x65] RM,0, "PCMPGTW %m,%M", -[0x66] RM,0, "PCMPGTL %m,%M", -[0x67] RM,0, "PACKUSWB %m,%M", -[0x68] RM,0, "PUNPCKHBW %m,%M", -[0x69] RM,0, "PUNPCKHWL %m,%M", -[0x6A] RM,0, "PUNPCKHLQ %m,%M", -[0x6B] RM,0, "PACKSSLW %m,%M", -[0x6E] RM,0, "MOV%S %e,%M", -[0x6F] RM,0, "MOVQ %m,%M", -[0x70] RM,Ib, "PSHUFW %i,%m,%M", -[0x74] RM,0, "PCMPEQB %m,%M", -[0x75] RM,0, "PCMPEQW %m,%M", -[0x76] RM,0, "PCMPEQL %m,%M", -[0x7E] RM,0, "MOV%S %M,%e", -[0x7F] RM,0, "MOVQ %M,%m", -[0xAE] RMOP,0, optab0FAE, -[0xAA] 0,0, "RSM", -[0xB0] RM,0, "CMPXCHGB %r,%e", -[0xB1] RM,0, "CMPXCHG%S %r,%e", -[0xC0] RMB,0, "XADDB %r,%e", -[0xC1] RM,0, "XADD%S %r,%e", -[0xC2] RM,Ib, "CMP%s %i,%x,%X", -[0xC3] RM,0, "MOVNTI%S %r,%e", -[0xC6] RM,Ib, "SHUF%s %i,%x,%X", -[0xC8] 0,0, "BSWAP AX", -[0xC9] 0,0, "BSWAP CX", -[0xCA] 0,0, "BSWAP DX", -[0xCB] 0,0, "BSWAP BX", -[0xCC] 0,0, "BSWAP SP", -[0xCD] 0,0, "BSWAP BP", -[0xCE] 0,0, "BSWAP SI", -[0xCF] 0,0, "BSWAP DI", -[0xD1] RM,0, "PSRLW %m,%M", -[0xD2] RM,0, "PSRLL %m,%M", -[0xD3] RM,0, "PSRLQ %m,%M", -[0xD5] RM,0, "PMULLW %m,%M", -[0xD6] RM,0, "MOVQOZX %m*,%X", -[0xD7] RM,0, "PMOVMSKB %m,%r", -[0xD8] RM,0, "PSUBUSB %m,%M", -[0xD9] RM,0, "PSUBUSW %m,%M", -[0xDA] RM,0, "PMINUB %m,%M", -[0xDB] RM,0, "PAND %m,%M", -[0xDC] RM,0, "PADDUSB %m,%M", -[0xDD] RM,0, "PADDUSW %m,%M", -[0xDE] RM,0, "PMAXUB %m,%M", -[0xDF] RM,0, "PANDN %m,%M", -[0xE0] RM,0, "PAVGB %m,%M", -[0xE1] RM,0, "PSRAW %m,%M", -[0xE2] RM,0, "PSRAL %m,%M", -[0xE3] RM,0, "PAVGW %m,%M", -[0xE4] RM,0, "PMULHUW %m,%M", -[0xE5] RM,0, "PMULHW %m,%M", -[0xE7] RM,0, "MOVNTQ %M,%e", -[0xE8] RM,0, "PSUBSB %m,%M", -[0xE9] RM,0, "PSUBSW %m,%M", -[0xEA] RM,0, "PMINSW %m,%M", -[0xEB] RM,0, "POR %m,%M", -[0xEC] RM,0, "PADDSB %m,%M", -[0xED] RM,0, "PADDSW %m,%M", -[0xEE] RM,0, "PMAXSW %m,%M", -[0xEF] RM,0, "PXOR %m,%M", -[0xF1] RM,0, "PSLLW %m,%M", -[0xF2] RM,0, "PSLLL %m,%M", -[0xF3] RM,0, "PSLLQ %m,%M", -[0xF4] RM,0, "PMULULQ %m,%M", -[0xF5] RM,0, "PMADDWL %m,%M", -[0xF6] RM,0, "PSADBW %m,%M", -[0xF7] RMR,0, "MASKMOVQ %m,%M", -[0xF8] RM,0, "PSUBB %m,%M", -[0xF9] RM,0, "PSUBW %m,%M", -[0xFA] RM,0, "PSUBL %m,%M", -[0xFC] RM,0, "PADDB %m,%M", -[0xFD] RM,0, "PADDW %m,%M", -[0xFE] RM,0, "PADDL %m,%M", - -[0x80] Iwds,0, "JOS %p", -[0x81] Iwds,0, "JOC %p", -[0x82] Iwds,0, "JCS %p", -[0x83] Iwds,0, "JCC %p", -[0x84] Iwds,0, "JEQ %p", -[0x85] Iwds,0, "JNE %p", -[0x86] Iwds,0, "JLS %p", -[0x87] Iwds,0, "JHI %p", -[0x88] Iwds,0, "JMI %p", -[0x89] Iwds,0, "JPL %p", -[0x8a] Iwds,0, "JPS %p", -[0x8b] Iwds,0, "JPC %p", -[0x8c] Iwds,0, "JLT %p", -[0x8d] Iwds,0, "JGE %p", -[0x8e] Iwds,0, "JLE %p", -[0x8f] Iwds,0, "JGT %p", -[0x90] RMB,0, "SETOS %e", -[0x91] RMB,0, "SETOC %e", -[0x92] RMB,0, "SETCS %e", -[0x93] RMB,0, "SETCC %e", -[0x94] RMB,0, "SETEQ %e", -[0x95] RMB,0, "SETNE %e", -[0x96] RMB,0, "SETLS %e", -[0x97] RMB,0, "SETHI %e", -[0x98] RMB,0, "SETMI %e", -[0x99] RMB,0, "SETPL %e", -[0x9a] RMB,0, "SETPS %e", -[0x9b] RMB,0, "SETPC %e", -[0x9c] RMB,0, "SETLT %e", -[0x9d] RMB,0, "SETGE %e", -[0x9e] RMB,0, "SETLE %e", -[0x9f] RMB,0, "SETGT %e", -[0xa0] 0,0, "PUSHL FS", -[0xa1] 0,0, "POPL FS", -[0xa2] 0,0, "CPUID", -[0xa3] RM,0, "BT%S %r,%e", -[0xa4] RM,Ib, "SHLD%S %r,%i,%e", -[0xa5] RM,0, "SHLD%S %r,CL,%e", -[0xa8] 0,0, "PUSHL GS", -[0xa9] 0,0, "POPL GS", -[0xab] RM,0, "BTS%S %r,%e", -[0xac] RM,Ib, "SHRD%S %r,%i,%e", -[0xad] RM,0, "SHRD%S %r,CL,%e", -[0xaf] RM,0, "IMUL%S %e,%r", -[0xb2] RMM,0, "LSS %e,%r", -[0xb3] RM,0, "BTR%S %r,%e", -[0xb4] RMM,0, "LFS %e,%r", -[0xb5] RMM,0, "LGS %e,%r", -[0xb6] RMB,0, "MOVBZX %e,%R", -[0xb7] RM,0, "MOVWZX %e,%R", -[0xba] RMOP,0, optab0FBA, -[0xbb] RM,0, "BTC%S %e,%r", -[0xbc] RM,0, "BSF%S %e,%r", -[0xbd] RM,0, "BSR%S %e,%r", -[0xbe] RMB,0, "MOVBSX %e,%R", -[0xbf] RM,0, "MOVWSX %e,%R", -[0xc7] RMOP,0, optab0FC7, +0x00, RMOP,0, optab0F00, +0x01, RMOP,0, optab0F01, +0x02, RM,0, "LAR %e,%r", +0x03, RM,0, "LSL %e,%r", +0x05, 0,0, "SYSCALL", +0x06, 0,0, "CLTS", +0x07, 0,0, "SYSRET", +0x08, 0,0, "INVD", +0x09, 0,0, "WBINVD", +0x0B, 0,0, "UD2", +0x0F, RM,AUX, optab0F0F, /* 3DNow! */ +0x10, RM,0, "MOVU%s %x,%X", +0x11, RM,0, "MOVU%s %X,%x", +0x12, RM,0, "MOV[H]L%s %x,%X", /* TO DO: H if source is XMM */ +0x13, RM,0, "MOVL%s %X,%e", +0x14, RM,0, "UNPCKL%s %x,%X", +0x15, RM,0, "UNPCKH%s %x,%X", +0x16, RM,0, "MOV[L]H%s %x,%X", /* TO DO: L if source is XMM */ +0x17, RM,0, "MOVH%s %X,%x", +0x20, RMR,0, "MOVL %C,%e", +0x21, RMR,0, "MOVL %D,%e", +0x22, RMR,0, "MOVL %e,%C", +0x23, RMR,0, "MOVL %e,%D", +0x24, RMR,0, "MOVL %T,%e", +0x26, RMR,0, "MOVL %e,%T", +0x28, RM,0, "MOVA%s %x,%X", +0x29, RM,0, "MOVA%s %X,%x", +0x2A, RM,0, "CVTPL2%s %m*,%X", +0x2B, RM,0, "MOVNT%s %X,%e", +0x2C, RM,0, "CVTT%s2PL %x,%M", +0x2D, RM,0, "CVT%s2PL %x,%M", +0x2E, RM,0, "UCOMISS %x,%X", +0x2F, RM,0, "COMISS %x,%X", +0x30, 0,0, "WRMSR", +0x31, 0,0, "RDTSC", +0x32, 0,0, "RDMSR", +0x33, 0,0, "RDPMC", +0x42, RM,0, "CMOVC %e,%r", /* CF */ +0x43, RM,0, "CMOVNC %e,%r", /* ¬ CF */ +0x44, RM,0, "CMOVZ %e,%r", /* ZF */ +0x45, RM,0, "CMOVNZ %e,%r", /* ¬ ZF */ +0x46, RM,0, "CMOVBE %e,%r", /* CF ∨ ZF */ +0x47, RM,0, "CMOVA %e,%r", /* ¬CF ∧ ¬ZF */ +0x48, RM,0, "CMOVS %e,%r", /* SF */ +0x49, RM,0, "CMOVNS %e,%r", /* ¬ SF */ +0x4A, RM,0, "CMOVP %e,%r", /* PF */ +0x4B, RM,0, "CMOVNP %e,%r", /* ¬ PF */ +0x4C, RM,0, "CMOVLT %e,%r", /* LT ≡ OF ≠ SF */ +0x4D, RM,0, "CMOVGE %e,%r", /* GE ≡ ZF ∨ SF */ +0x4E, RM,0, "CMOVLE %e,%r", /* LE ≡ ZF ∨ LT */ +0x4F, RM,0, "CMOVGT %e,%r", /* GT ≡ ¬ZF ∧ GE */ +0x50, RM,0, "MOVMSK%s %X,%r", /* TO DO: check */ +0x51, RM,0, "SQRT%s %x,%X", +0x52, RM,0, "RSQRT%s %x,%X", +0x53, RM,0, "RCP%s %x,%X", +0x54, RM,0, "AND%s %x,%X", +0x55, RM,0, "ANDN%s %x,%X", +0x56, RM,0, "OR%s %x,%X", /* TO DO: S/D */ +0x57, RM,0, "XOR%s %x,%X", /* S/D */ +0x58, RM,0, "ADD%s %x,%X", /* S/P S/D */ +0x59, RM,0, "MUL%s %x,%X", +0x5A, RM,0, "CVTPS2PD %x,%X", +0x5B, RM,0, "CVTPL2PS %x,%X", +0x5C, RM,0, "SUB%s %x,%X", +0x5D, RM,0, "MIN%s %x,%X", +0x5E, RM,0, "DIV%s %x,%X", /* TO DO: S/P S/D */ +0x5F, RM,0, "MAX%s %x,%X", +0x60, RM,0, "PUNPCKLBW %m,%M", +0x61, RM,0, "PUNPCKLWL %m,%M", +0x62, RM,0, "PUNPCKLLQ %m,%M", +0x63, RM,0, "PACKSSWB %m,%M", +0x64, RM,0, "PCMPGTB %m,%M", +0x65, RM,0, "PCMPGTW %m,%M", +0x66, RM,0, "PCMPGTL %m,%M", +0x67, RM,0, "PACKUSWB %m,%M", +0x68, RM,0, "PUNPCKHBW %m,%M", +0x69, RM,0, "PUNPCKHWL %m,%M", +0x6A, RM,0, "PUNPCKHLQ %m,%M", +0x6B, RM,0, "PACKSSLW %m,%M", +0x6E, RM,0, "MOV%S %e,%M", +0x6F, RM,0, "MOVQ %m,%M", +0x70, RM,Ib, "PSHUFW %i,%m,%M", +0x74, RM,0, "PCMPEQB %m,%M", +0x75, RM,0, "PCMPEQW %m,%M", +0x76, RM,0, "PCMPEQL %m,%M", +0x7E, RM,0, "MOV%S %M,%e", +0x7F, RM,0, "MOVQ %M,%m", +0xAE, RMOP,0, optab0FAE, +0xAA, 0,0, "RSM", +0xB0, RM,0, "CMPXCHGB %r,%e", +0xB1, RM,0, "CMPXCHG%S %r,%e", +0xC0, RMB,0, "XADDB %r,%e", +0xC1, RM,0, "XADD%S %r,%e", +0xC2, RM,Ib, "CMP%s %i,%x,%X", +0xC3, RM,0, "MOVNTI%S %r,%e", +0xC6, RM,Ib, "SHUF%s %i,%x,%X", +0xC8, 0,0, "BSWAP AX", +0xC9, 0,0, "BSWAP CX", +0xCA, 0,0, "BSWAP DX", +0xCB, 0,0, "BSWAP BX", +0xCC, 0,0, "BSWAP SP", +0xCD, 0,0, "BSWAP BP", +0xCE, 0,0, "BSWAP SI", +0xCF, 0,0, "BSWAP DI", +0xD1, RM,0, "PSRLW %m,%M", +0xD2, RM,0, "PSRLL %m,%M", +0xD3, RM,0, "PSRLQ %m,%M", +0xD5, RM,0, "PMULLW %m,%M", +0xD6, RM,0, "MOVQOZX %m*,%X", +0xD7, RM,0, "PMOVMSKB %m,%r", +0xD8, RM,0, "PSUBUSB %m,%M", +0xD9, RM,0, "PSUBUSW %m,%M", +0xDA, RM,0, "PMINUB %m,%M", +0xDB, RM,0, "PAND %m,%M", +0xDC, RM,0, "PADDUSB %m,%M", +0xDD, RM,0, "PADDUSW %m,%M", +0xDE, RM,0, "PMAXUB %m,%M", +0xDF, RM,0, "PANDN %m,%M", +0xE0, RM,0, "PAVGB %m,%M", +0xE1, RM,0, "PSRAW %m,%M", +0xE2, RM,0, "PSRAL %m,%M", +0xE3, RM,0, "PAVGW %m,%M", +0xE4, RM,0, "PMULHUW %m,%M", +0xE5, RM,0, "PMULHW %m,%M", +0xE7, RM,0, "MOVNTQ %M,%e", +0xE8, RM,0, "PSUBSB %m,%M", +0xE9, RM,0, "PSUBSW %m,%M", +0xEA, RM,0, "PMINSW %m,%M", +0xEB, RM,0, "POR %m,%M", +0xEC, RM,0, "PADDSB %m,%M", +0xED, RM,0, "PADDSW %m,%M", +0xEE, RM,0, "PMAXSW %m,%M", +0xEF, RM,0, "PXOR %m,%M", +0xF1, RM,0, "PSLLW %m,%M", +0xF2, RM,0, "PSLLL %m,%M", +0xF3, RM,0, "PSLLQ %m,%M", +0xF4, RM,0, "PMULULQ %m,%M", +0xF5, RM,0, "PMADDWL %m,%M", +0xF6, RM,0, "PSADBW %m,%M", +0xF7, RMR,0, "MASKMOVQ %m,%M", +0xF8, RM,0, "PSUBB %m,%M", +0xF9, RM,0, "PSUBW %m,%M", +0xFA, RM,0, "PSUBL %m,%M", +0xFC, RM,0, "PADDB %m,%M", +0xFD, RM,0, "PADDW %m,%M", +0xFE, RM,0, "PADDL %m,%M", + +0x80, Iwds,0, "JOS %p", +0x81, Iwds,0, "JOC %p", +0x82, Iwds,0, "JCS %p", +0x83, Iwds,0, "JCC %p", +0x84, Iwds,0, "JEQ %p", +0x85, Iwds,0, "JNE %p", +0x86, Iwds,0, "JLS %p", +0x87, Iwds,0, "JHI %p", +0x88, Iwds,0, "JMI %p", +0x89, Iwds,0, "JPL %p", +0x8a, Iwds,0, "JPS %p", +0x8b, Iwds,0, "JPC %p", +0x8c, Iwds,0, "JLT %p", +0x8d, Iwds,0, "JGE %p", +0x8e, Iwds,0, "JLE %p", +0x8f, Iwds,0, "JGT %p", +0x90, RMB,0, "SETOS %e", +0x91, RMB,0, "SETOC %e", +0x92, RMB,0, "SETCS %e", +0x93, RMB,0, "SETCC %e", +0x94, RMB,0, "SETEQ %e", +0x95, RMB,0, "SETNE %e", +0x96, RMB,0, "SETLS %e", +0x97, RMB,0, "SETHI %e", +0x98, RMB,0, "SETMI %e", +0x99, RMB,0, "SETPL %e", +0x9a, RMB,0, "SETPS %e", +0x9b, RMB,0, "SETPC %e", +0x9c, RMB,0, "SETLT %e", +0x9d, RMB,0, "SETGE %e", +0x9e, RMB,0, "SETLE %e", +0x9f, RMB,0, "SETGT %e", +0xa0, 0,0, "PUSHL FS", +0xa1, 0,0, "POPL FS", +0xa2, 0,0, "CPUID", +0xa3, RM,0, "BT%S %r,%e", +0xa4, RM,Ib, "SHLD%S %r,%i,%e", +0xa5, RM,0, "SHLD%S %r,CL,%e", +0xa8, 0,0, "PUSHL GS", +0xa9, 0,0, "POPL GS", +0xab, RM,0, "BTS%S %r,%e", +0xac, RM,Ib, "SHRD%S %r,%i,%e", +0xad, RM,0, "SHRD%S %r,CL,%e", +0xaf, RM,0, "IMUL%S %e,%r", +0xb2, RMM,0, "LSS %e,%r", +0xb3, RM,0, "BTR%S %r,%e", +0xb4, RMM,0, "LFS %e,%r", +0xb5, RMM,0, "LGS %e,%r", +0xb6, RMB,0, "MOVBZX %e,%R", +0xb7, RM,0, "MOVWZX %e,%R", +0xba, RMOP,0, optab0FBA, +0xbb, RM,0, "BTC%S %e,%r", +0xbc, RM,0, "BSF%S %e,%r", +0xbd, RM,0, "BSR%S %e,%r", +0xbe, RMB,0, "MOVBSX %e,%R", +0xbf, RM,0, "MOVWSX %e,%R", +0xc7, RMOP,0, optab0FC7, }; static Optable optab80[8]= { -[0x00] Ib,0, "ADDB %i,%e", -[0x01] Ib,0, "ORB %i,%e", -[0x02] Ib,0, "ADCB %i,%e", -[0x03] Ib,0, "SBBB %i,%e", -[0x04] Ib,0, "ANDB %i,%e", -[0x05] Ib,0, "SUBB %i,%e", -[0x06] Ib,0, "XORB %i,%e", -[0x07] Ib,0, "CMPB %e,%i", +0x00, Ib,0, "ADDB %i,%e", +0x01, Ib,0, "ORB %i,%e", +0x02, Ib,0, "ADCB %i,%e", +0x03, Ib,0, "SBBB %i,%e", +0x04, Ib,0, "ANDB %i,%e", +0x05, Ib,0, "SUBB %i,%e", +0x06, Ib,0, "XORB %i,%e", +0x07, Ib,0, "CMPB %e,%i", }; static Optable optab81[8]= { -[0x00] Iwd,0, "ADD%S %i,%e", -[0x01] Iwd,0, "OR%S %i,%e", -[0x02] Iwd,0, "ADC%S %i,%e", -[0x03] Iwd,0, "SBB%S %i,%e", -[0x04] Iwd,0, "AND%S %i,%e", -[0x05] Iwd,0, "SUB%S %i,%e", -[0x06] Iwd,0, "XOR%S %i,%e", -[0x07] Iwd,0, "CMP%S %e,%i", +0x00, Iwd,0, "ADD%S %i,%e", +0x01, Iwd,0, "OR%S %i,%e", +0x02, Iwd,0, "ADC%S %i,%e", +0x03, Iwd,0, "SBB%S %i,%e", +0x04, Iwd,0, "AND%S %i,%e", +0x05, Iwd,0, "SUB%S %i,%e", +0x06, Iwd,0, "XOR%S %i,%e", +0x07, Iwd,0, "CMP%S %e,%i", }; static Optable optab83[8]= { -[0x00] Ibs,0, "ADD%S %i,%e", -[0x01] Ibs,0, "OR%S %i,%e", -[0x02] Ibs,0, "ADC%S %i,%e", -[0x03] Ibs,0, "SBB%S %i,%e", -[0x04] Ibs,0, "AND%S %i,%e", -[0x05] Ibs,0, "SUB%S %i,%e", -[0x06] Ibs,0, "XOR%S %i,%e", -[0x07] Ibs,0, "CMP%S %e,%i", +0x00, Ibs,0, "ADD%S %i,%e", +0x01, Ibs,0, "OR%S %i,%e", +0x02, Ibs,0, "ADC%S %i,%e", +0x03, Ibs,0, "SBB%S %i,%e", +0x04, Ibs,0, "AND%S %i,%e", +0x05, Ibs,0, "SUB%S %i,%e", +0x06, Ibs,0, "XOR%S %i,%e", +0x07, Ibs,0, "CMP%S %e,%i", }; static Optable optabC0[8] = { -[0x00] Ib,0, "ROLB %i,%e", -[0x01] Ib,0, "RORB %i,%e", -[0x02] Ib,0, "RCLB %i,%e", -[0x03] Ib,0, "RCRB %i,%e", -[0x04] Ib,0, "SHLB %i,%e", -[0x05] Ib,0, "SHRB %i,%e", -[0x07] Ib,0, "SARB %i,%e", +0x00, Ib,0, "ROLB %i,%e", +0x01, Ib,0, "RORB %i,%e", +0x02, Ib,0, "RCLB %i,%e", +0x03, Ib,0, "RCRB %i,%e", +0x04, Ib,0, "SHLB %i,%e", +0x05, Ib,0, "SHRB %i,%e", +0x07, Ib,0, "SARB %i,%e", }; static Optable optabC1[8] = { -[0x00] Ib,0, "ROL%S %i,%e", -[0x01] Ib,0, "ROR%S %i,%e", -[0x02] Ib,0, "RCL%S %i,%e", -[0x03] Ib,0, "RCR%S %i,%e", -[0x04] Ib,0, "SHL%S %i,%e", -[0x05] Ib,0, "SHR%S %i,%e", -[0x07] Ib,0, "SAR%S %i,%e", +0x00, Ib,0, "ROL%S %i,%e", +0x01, Ib,0, "ROR%S %i,%e", +0x02, Ib,0, "RCL%S %i,%e", +0x03, Ib,0, "RCR%S %i,%e", +0x04, Ib,0, "SHL%S %i,%e", +0x05, Ib,0, "SHR%S %i,%e", +0x07, Ib,0, "SAR%S %i,%e", }; static Optable optabD0[8] = { -[0x00] 0,0, "ROLB %e", -[0x01] 0,0, "RORB %e", -[0x02] 0,0, "RCLB %e", -[0x03] 0,0, "RCRB %e", -[0x04] 0,0, "SHLB %e", -[0x05] 0,0, "SHRB %e", -[0x07] 0,0, "SARB %e", +0x00, 0,0, "ROLB %e", +0x01, 0,0, "RORB %e", +0x02, 0,0, "RCLB %e", +0x03, 0,0, "RCRB %e", +0x04, 0,0, "SHLB %e", +0x05, 0,0, "SHRB %e", +0x07, 0,0, "SARB %e", }; static Optable optabD1[8] = { -[0x00] 0,0, "ROL%S %e", -[0x01] 0,0, "ROR%S %e", -[0x02] 0,0, "RCL%S %e", -[0x03] 0,0, "RCR%S %e", -[0x04] 0,0, "SHL%S %e", -[0x05] 0,0, "SHR%S %e", -[0x07] 0,0, "SAR%S %e", +0x00, 0,0, "ROL%S %e", +0x01, 0,0, "ROR%S %e", +0x02, 0,0, "RCL%S %e", +0x03, 0,0, "RCR%S %e", +0x04, 0,0, "SHL%S %e", +0x05, 0,0, "SHR%S %e", +0x07, 0,0, "SAR%S %e", }; static Optable optabD2[8] = { -[0x00] 0,0, "ROLB CL,%e", -[0x01] 0,0, "RORB CL,%e", -[0x02] 0,0, "RCLB CL,%e", -[0x03] 0,0, "RCRB CL,%e", -[0x04] 0,0, "SHLB CL,%e", -[0x05] 0,0, "SHRB CL,%e", -[0x07] 0,0, "SARB CL,%e", +0x00, 0,0, "ROLB CL,%e", +0x01, 0,0, "RORB CL,%e", +0x02, 0,0, "RCLB CL,%e", +0x03, 0,0, "RCRB CL,%e", +0x04, 0,0, "SHLB CL,%e", +0x05, 0,0, "SHRB CL,%e", +0x07, 0,0, "SARB CL,%e", }; static Optable optabD3[8] = { -[0x00] 0,0, "ROL%S CL,%e", -[0x01] 0,0, "ROR%S CL,%e", -[0x02] 0,0, "RCL%S CL,%e", -[0x03] 0,0, "RCR%S CL,%e", -[0x04] 0,0, "SHL%S CL,%e", -[0x05] 0,0, "SHR%S CL,%e", -[0x07] 0,0, "SAR%S CL,%e", +0x00, 0,0, "ROL%S CL,%e", +0x01, 0,0, "ROR%S CL,%e", +0x02, 0,0, "RCL%S CL,%e", +0x03, 0,0, "RCR%S CL,%e", +0x04, 0,0, "SHL%S CL,%e", +0x05, 0,0, "SHR%S CL,%e", +0x07, 0,0, "SAR%S CL,%e", }; static Optable optabD8[8+8] = { -[0x00] 0,0, "FADDF %e,F0", -[0x01] 0,0, "FMULF %e,F0", -[0x02] 0,0, "FCOMF %e,F0", -[0x03] 0,0, "FCOMFP %e,F0", -[0x04] 0,0, "FSUBF %e,F0", -[0x05] 0,0, "FSUBRF %e,F0", -[0x06] 0,0, "FDIVF %e,F0", -[0x07] 0,0, "FDIVRF %e,F0", -[0x08] 0,0, "FADDD %f,F0", -[0x09] 0,0, "FMULD %f,F0", -[0x0a] 0,0, "FCOMD %f,F0", -[0x0b] 0,0, "FCOMPD %f,F0", -[0x0c] 0,0, "FSUBD %f,F0", -[0x0d] 0,0, "FSUBRD %f,F0", -[0x0e] 0,0, "FDIVD %f,F0", -[0x0f] 0,0, "FDIVRD %f,F0", +0x00, 0,0, "FADDF %e,F0", +0x01, 0,0, "FMULF %e,F0", +0x02, 0,0, "FCOMF %e,F0", +0x03, 0,0, "FCOMFP %e,F0", +0x04, 0,0, "FSUBF %e,F0", +0x05, 0,0, "FSUBRF %e,F0", +0x06, 0,0, "FDIVF %e,F0", +0x07, 0,0, "FDIVRF %e,F0", +0x08, 0,0, "FADDD %f,F0", +0x09, 0,0, "FMULD %f,F0", +0x0a, 0,0, "FCOMD %f,F0", +0x0b, 0,0, "FCOMPD %f,F0", +0x0c, 0,0, "FSUBD %f,F0", +0x0d, 0,0, "FSUBRD %f,F0", +0x0e, 0,0, "FDIVD %f,F0", +0x0f, 0,0, "FDIVRD %f,F0", }; /* * optabD9 and optabDB use the following encoding: @@ -786,444 +803,517 @@ static Optable optabD8[8+8] = */ static Optable optabD9[64+8] = { -[0x00] 0,0, "FMOVF %e,F0", -[0x02] 0,0, "FMOVF F0,%e", -[0x03] 0,0, "FMOVFP F0,%e", -[0x04] 0,0, "FLDENV%S %e", -[0x05] 0,0, "FLDCW %e", -[0x06] 0,0, "FSTENV%S %e", -[0x07] 0,0, "FSTCW %e", -[0x08] 0,0, "FMOVD F0,F0", /* Mod R/M = 11xx xxxx*/ -[0x09] 0,0, "FMOVD F1,F0", -[0x0a] 0,0, "FMOVD F2,F0", -[0x0b] 0,0, "FMOVD F3,F0", -[0x0c] 0,0, "FMOVD F4,F0", -[0x0d] 0,0, "FMOVD F5,F0", -[0x0e] 0,0, "FMOVD F6,F0", -[0x0f] 0,0, "FMOVD F7,F0", -[0x10] 0,0, "FXCHD F0,F0", -[0x11] 0,0, "FXCHD F1,F0", -[0x12] 0,0, "FXCHD F2,F0", -[0x13] 0,0, "FXCHD F3,F0", -[0x14] 0,0, "FXCHD F4,F0", -[0x15] 0,0, "FXCHD F5,F0", -[0x16] 0,0, "FXCHD F6,F0", -[0x17] 0,0, "FXCHD F7,F0", -[0x18] 0,0, "FNOP", -[0x28] 0,0, "FCHS", -[0x29] 0,0, "FABS", -[0x2c] 0,0, "FTST", -[0x2d] 0,0, "FXAM", -[0x30] 0,0, "FLD1", -[0x31] 0,0, "FLDL2T", -[0x32] 0,0, "FLDL2E", -[0x33] 0,0, "FLDPI", -[0x34] 0,0, "FLDLG2", -[0x35] 0,0, "FLDLN2", -[0x36] 0,0, "FLDZ", -[0x38] 0,0, "F2XM1", -[0x39] 0,0, "FYL2X", -[0x3a] 0,0, "FPTAN", -[0x3b] 0,0, "FPATAN", -[0x3c] 0,0, "FXTRACT", -[0x3d] 0,0, "FPREM1", -[0x3e] 0,0, "FDECSTP", -[0x3f] 0,0, "FNCSTP", -[0x40] 0,0, "FPREM", -[0x41] 0,0, "FYL2XP1", -[0x42] 0,0, "FSQRT", -[0x43] 0,0, "FSINCOS", -[0x44] 0,0, "FRNDINT", -[0x45] 0,0, "FSCALE", -[0x46] 0,0, "FSIN", -[0x47] 0,0, "FCOS", +0x00, 0,0, "FMOVF %e,F0", +0x02, 0,0, "FMOVF F0,%e", +0x03, 0,0, "FMOVFP F0,%e", +0x04, 0,0, "FLDENV%S %e", +0x05, 0,0, "FLDCW %e", +0x06, 0,0, "FSTENV%S %e", +0x07, 0,0, "FSTCW %e", +0x08, 0,0, "FMOVD F0,F0", /* Mod R/M = 11xx xxxx*/ +0x09, 0,0, "FMOVD F1,F0", +0x0a, 0,0, "FMOVD F2,F0", +0x0b, 0,0, "FMOVD F3,F0", +0x0c, 0,0, "FMOVD F4,F0", +0x0d, 0,0, "FMOVD F5,F0", +0x0e, 0,0, "FMOVD F6,F0", +0x0f, 0,0, "FMOVD F7,F0", +0x10, 0,0, "FXCHD F0,F0", +0x11, 0,0, "FXCHD F1,F0", +0x12, 0,0, "FXCHD F2,F0", +0x13, 0,0, "FXCHD F3,F0", +0x14, 0,0, "FXCHD F4,F0", +0x15, 0,0, "FXCHD F5,F0", +0x16, 0,0, "FXCHD F6,F0", +0x17, 0,0, "FXCHD F7,F0", +0x18, 0,0, "FNOP", +0x28, 0,0, "FCHS", +0x29, 0,0, "FABS", +0x2c, 0,0, "FTST", +0x2d, 0,0, "FXAM", +0x30, 0,0, "FLD1", +0x31, 0,0, "FLDL2T", +0x32, 0,0, "FLDL2E", +0x33, 0,0, "FLDPI", +0x34, 0,0, "FLDLG2", +0x35, 0,0, "FLDLN2", +0x36, 0,0, "FLDZ", +0x38, 0,0, "F2XM1", +0x39, 0,0, "FYL2X", +0x3a, 0,0, "FPTAN", +0x3b, 0,0, "FPATAN", +0x3c, 0,0, "FXTRACT", +0x3d, 0,0, "FPREM1", +0x3e, 0,0, "FDECSTP", +0x3f, 0,0, "FNCSTP", +0x40, 0,0, "FPREM", +0x41, 0,0, "FYL2XP1", +0x42, 0,0, "FSQRT", +0x43, 0,0, "FSINCOS", +0x44, 0,0, "FRNDINT", +0x45, 0,0, "FSCALE", +0x46, 0,0, "FSIN", +0x47, 0,0, "FCOS", }; static Optable optabDA[8+8] = { -[0x00] 0,0, "FADDL %e,F0", -[0x01] 0,0, "FMULL %e,F0", -[0x02] 0,0, "FCOML %e,F0", -[0x03] 0,0, "FCOMLP %e,F0", -[0x04] 0,0, "FSUBL %e,F0", -[0x05] 0,0, "FSUBRL %e,F0", -[0x06] 0,0, "FDIVL %e,F0", -[0x07] 0,0, "FDIVRL %e,F0", -[0x0d] R1,0, "FUCOMPP", +0x00, 0,0, "FADDL %e,F0", +0x01, 0,0, "FMULL %e,F0", +0x02, 0,0, "FCOML %e,F0", +0x03, 0,0, "FCOMLP %e,F0", +0x04, 0,0, "FSUBL %e,F0", +0x05, 0,0, "FSUBRL %e,F0", +0x06, 0,0, "FDIVL %e,F0", +0x07, 0,0, "FDIVRL %e,F0", +0x0d, R1,0, "FUCOMPP", }; static Optable optabDB[8+64] = { -[0x00] 0,0, "FMOVL %e,F0", -[0x02] 0,0, "FMOVL F0,%e", -[0x03] 0,0, "FMOVLP F0,%e", -[0x05] 0,0, "FMOVX %e,F0", -[0x07] 0,0, "FMOVXP F0,%e", -[0x2a] 0,0, "FCLEX", -[0x2b] 0,0, "FINIT", +0x00, 0,0, "FMOVL %e,F0", +0x02, 0,0, "FMOVL F0,%e", +0x03, 0,0, "FMOVLP F0,%e", +0x05, 0,0, "FMOVX %e,F0", +0x07, 0,0, "FMOVXP F0,%e", +0x2a, 0,0, "FCLEX", +0x2b, 0,0, "FINIT", }; static Optable optabDC[8+8] = { -[0x00] 0,0, "FADDD %e,F0", -[0x01] 0,0, "FMULD %e,F0", -[0x02] 0,0, "FCOMD %e,F0", -[0x03] 0,0, "FCOMDP %e,F0", -[0x04] 0,0, "FSUBD %e,F0", -[0x05] 0,0, "FSUBRD %e,F0", -[0x06] 0,0, "FDIVD %e,F0", -[0x07] 0,0, "FDIVRD %e,F0", -[0x08] 0,0, "FADDD F0,%f", -[0x09] 0,0, "FMULD F0,%f", -[0x0c] 0,0, "FSUBRD F0,%f", -[0x0d] 0,0, "FSUBD F0,%f", -[0x0e] 0,0, "FDIVRD F0,%f", -[0x0f] 0,0, "FDIVD F0,%f", +0x00, 0,0, "FADDD %e,F0", +0x01, 0,0, "FMULD %e,F0", +0x02, 0,0, "FCOMD %e,F0", +0x03, 0,0, "FCOMDP %e,F0", +0x04, 0,0, "FSUBD %e,F0", +0x05, 0,0, "FSUBRD %e,F0", +0x06, 0,0, "FDIVD %e,F0", +0x07, 0,0, "FDIVRD %e,F0", +0x08, 0,0, "FADDD F0,%f", +0x09, 0,0, "FMULD F0,%f", +0x0c, 0,0, "FSUBRD F0,%f", +0x0d, 0,0, "FSUBD F0,%f", +0x0e, 0,0, "FDIVRD F0,%f", +0x0f, 0,0, "FDIVD F0,%f", }; static Optable optabDD[8+8] = { -[0x00] 0,0, "FMOVD %e,F0", -[0x02] 0,0, "FMOVD F0,%e", -[0x03] 0,0, "FMOVDP F0,%e", -[0x04] 0,0, "FRSTOR%S %e", -[0x06] 0,0, "FSAVE%S %e", -[0x07] 0,0, "FSTSW %e", -[0x08] 0,0, "FFREED %f", -[0x0a] 0,0, "FMOVD %f,F0", -[0x0b] 0,0, "FMOVDP %f,F0", -[0x0c] 0,0, "FUCOMD %f,F0", -[0x0d] 0,0, "FUCOMDP %f,F0", +0x00, 0,0, "FMOVD %e,F0", +0x02, 0,0, "FMOVD F0,%e", +0x03, 0,0, "FMOVDP F0,%e", +0x04, 0,0, "FRSTOR%S %e", +0x06, 0,0, "FSAVE%S %e", +0x07, 0,0, "FSTSW %e", +0x08, 0,0, "FFREED %f", +0x0a, 0,0, "FMOVD %f,F0", +0x0b, 0,0, "FMOVDP %f,F0", +0x0c, 0,0, "FUCOMD %f,F0", +0x0d, 0,0, "FUCOMDP %f,F0", }; static Optable optabDE[8+8] = { -[0x00] 0,0, "FADDW %e,F0", -[0x01] 0,0, "FMULW %e,F0", -[0x02] 0,0, "FCOMW %e,F0", -[0x03] 0,0, "FCOMWP %e,F0", -[0x04] 0,0, "FSUBW %e,F0", -[0x05] 0,0, "FSUBRW %e,F0", -[0x06] 0,0, "FDIVW %e,F0", -[0x07] 0,0, "FDIVRW %e,F0", -[0x08] 0,0, "FADDDP F0,%f", -[0x09] 0,0, "FMULDP F0,%f", -[0x0b] R1,0, "FCOMPDP", -[0x0c] 0,0, "FSUBRDP F0,%f", -[0x0d] 0,0, "FSUBDP F0,%f", -[0x0e] 0,0, "FDIVRDP F0,%f", -[0x0f] 0,0, "FDIVDP F0,%f", +0x00, 0,0, "FADDW %e,F0", +0x01, 0,0, "FMULW %e,F0", +0x02, 0,0, "FCOMW %e,F0", +0x03, 0,0, "FCOMWP %e,F0", +0x04, 0,0, "FSUBW %e,F0", +0x05, 0,0, "FSUBRW %e,F0", +0x06, 0,0, "FDIVW %e,F0", +0x07, 0,0, "FDIVRW %e,F0", +0x08, 0,0, "FADDDP F0,%f", +0x09, 0,0, "FMULDP F0,%f", +0x0b, R1,0, "FCOMPDP", +0x0c, 0,0, "FSUBRDP F0,%f", +0x0d, 0,0, "FSUBDP F0,%f", +0x0e, 0,0, "FDIVRDP F0,%f", +0x0f, 0,0, "FDIVDP F0,%f", }; static Optable optabDF[8+8] = { -[0x00] 0,0, "FMOVW %e,F0", -[0x02] 0,0, "FMOVW F0,%e", -[0x03] 0,0, "FMOVWP F0,%e", -[0x04] 0,0, "FBLD %e", -[0x05] 0,0, "FMOVL %e,F0", -[0x06] 0,0, "FBSTP %e", -[0x07] 0,0, "FMOVLP F0,%e", -[0x0c] R0,0, "FSTSW %OAX", +0x00, 0,0, "FMOVW %e,F0", +0x02, 0,0, "FMOVW F0,%e", +0x03, 0,0, "FMOVWP F0,%e", +0x04, 0,0, "FBLD %e", +0x05, 0,0, "FMOVL %e,F0", +0x06, 0,0, "FBSTP %e", +0x07, 0,0, "FMOVLP F0,%e", +0x0c, R0,0, "FSTSW %OAX", }; static Optable optabF6[8] = { -[0x00] Ib,0, "TESTB %i,%e", -[0x02] 0,0, "NOTB %e", -[0x03] 0,0, "NEGB %e", -[0x04] 0,0, "MULB AL,%e", -[0x05] 0,0, "IMULB AL,%e", -[0x06] 0,0, "DIVB AL,%e", -[0x07] 0,0, "IDIVB AL,%e", +0x00, Ib,0, "TESTB %i,%e", +0x02, 0,0, "NOTB %e", +0x03, 0,0, "NEGB %e", +0x04, 0,0, "MULB AL,%e", +0x05, 0,0, "IMULB AL,%e", +0x06, 0,0, "DIVB AL,%e", +0x07, 0,0, "IDIVB AL,%e", }; static Optable optabF7[8] = { -[0x00] Iwd,0, "TEST%S %i,%e", -[0x02] 0,0, "NOT%S %e", -[0x03] 0,0, "NEG%S %e", -[0x04] 0,0, "MUL%S %OAX,%e", -[0x05] 0,0, "IMUL%S %OAX,%e", -[0x06] 0,0, "DIV%S %OAX,%e", -[0x07] 0,0, "IDIV%S %OAX,%e", +0x00, Iwd,0, "TEST%S %i,%e", +0x02, 0,0, "NOT%S %e", +0x03, 0,0, "NEG%S %e", +0x04, 0,0, "MUL%S %OAX,%e", +0x05, 0,0, "IMUL%S %OAX,%e", +0x06, 0,0, "DIV%S %OAX,%e", +0x07, 0,0, "IDIV%S %OAX,%e", }; static Optable optabFE[8] = { -[0x00] 0,0, "INCB %e", -[0x01] 0,0, "DECB %e", +0x00, 0,0, "INCB %e", +0x01, 0,0, "DECB %e", }; static Optable optabFF[8] = { -[0x00] 0,0, "INC%S %e", -[0x01] 0,0, "DEC%S %e", -[0x02] JUMP,0, "CALL* %e", -[0x03] JUMP,0, "CALLF* %e", -[0x04] JUMP,0, "JMP* %e", -[0x05] JUMP,0, "JMPF* %e", -[0x06] 0,0, "PUSHL %e", +0x00, 0,0, "INC%S %e", +0x01, 0,0, "DEC%S %e", +0x02, JUMP,0, "CALL* %e", +0x03, JUMP,0, "CALLF* %e", +0x04, JUMP,0, "JMP* %e", +0x05, JUMP,0, "JMPF* %e", +0x06, 0,0, "PUSHL %e", }; static Optable optable[256+1] = { -[0x00] RMB,0, "ADDB %r,%e", -[0x01] RM,0, "ADD%S %r,%e", -[0x02] RMB,0, "ADDB %e,%r", -[0x03] RM,0, "ADD%S %e,%r", -[0x04] Ib,0, "ADDB %i,AL", -[0x05] Iwd,0, "ADD%S %i,%OAX", -[0x06] 0,0, "PUSHL ES", -[0x07] 0,0, "POPL ES", -[0x08] RMB,0, "ORB %r,%e", -[0x09] RM,0, "OR%S %r,%e", -[0x0a] RMB,0, "ORB %e,%r", -[0x0b] RM,0, "OR%S %e,%r", -[0x0c] Ib,0, "ORB %i,AL", -[0x0d] Iwd,0, "OR%S %i,%OAX", -[0x0e] 0,0, "PUSHL CS", -[0x0f] AUXMM,0, optab0F, -[0x10] RMB,0, "ADCB %r,%e", -[0x11] RM,0, "ADC%S %r,%e", -[0x12] RMB,0, "ADCB %e,%r", -[0x13] RM,0, "ADC%S %e,%r", -[0x14] Ib,0, "ADCB %i,AL", -[0x15] Iwd,0, "ADC%S %i,%OAX", -[0x16] 0,0, "PUSHL SS", -[0x17] 0,0, "POPL SS", -[0x18] RMB,0, "SBBB %r,%e", -[0x19] RM,0, "SBB%S %r,%e", -[0x1a] RMB,0, "SBBB %e,%r", -[0x1b] RM,0, "SBB%S %e,%r", -[0x1c] Ib,0, "SBBB %i,AL", -[0x1d] Iwd,0, "SBB%S %i,%OAX", -[0x1e] 0,0, "PUSHL DS", -[0x1f] 0,0, "POPL DS", -[0x20] RMB,0, "ANDB %r,%e", -[0x21] RM,0, "AND%S %r,%e", -[0x22] RMB,0, "ANDB %e,%r", -[0x23] RM,0, "AND%S %e,%r", -[0x24] Ib,0, "ANDB %i,AL", -[0x25] Iwd,0, "AND%S %i,%OAX", -[0x26] SEG,0, "ES:", -[0x27] 0,0, "DAA", -[0x28] RMB,0, "SUBB %r,%e", -[0x29] RM,0, "SUB%S %r,%e", -[0x2a] RMB,0, "SUBB %e,%r", -[0x2b] RM,0, "SUB%S %e,%r", -[0x2c] Ib,0, "SUBB %i,AL", -[0x2d] Iwd,0, "SUB%S %i,%OAX", -[0x2e] SEG,0, "CS:", -[0x2f] 0,0, "DAS", -[0x30] RMB,0, "XORB %r,%e", -[0x31] RM,0, "XOR%S %r,%e", -[0x32] RMB,0, "XORB %e,%r", -[0x33] RM,0, "XOR%S %e,%r", -[0x34] Ib,0, "XORB %i,AL", -[0x35] Iwd,0, "XOR%S %i,%OAX", -[0x36] SEG,0, "SS:", -[0x37] 0,0, "AAA", -[0x38] RMB,0, "CMPB %r,%e", -[0x39] RM,0, "CMP%S %r,%e", -[0x3a] RMB,0, "CMPB %e,%r", -[0x3b] RM,0, "CMP%S %e,%r", -[0x3c] Ib,0, "CMPB %i,AL", -[0x3d] Iwd,0, "CMP%S %i,%OAX", -[0x3e] SEG,0, "DS:", -[0x3f] 0,0, "AAS", -[0x40] 0,0, "INC%S %OAX", -[0x41] 0,0, "INC%S %OCX", -[0x42] 0,0, "INC%S %ODX", -[0x43] 0,0, "INC%S %OBX", -[0x44] 0,0, "INC%S %OSP", -[0x45] 0,0, "INC%S %OBP", -[0x46] 0,0, "INC%S %OSI", -[0x47] 0,0, "INC%S %ODI", -[0x48] 0,0, "DEC%S %OAX", -[0x49] 0,0, "DEC%S %OCX", -[0x4a] 0,0, "DEC%S %ODX", -[0x4b] 0,0, "DEC%S %OBX", -[0x4c] 0,0, "DEC%S %OSP", -[0x4d] 0,0, "DEC%S %OBP", -[0x4e] 0,0, "DEC%S %OSI", -[0x4f] 0,0, "DEC%S %ODI", -[0x50] 0,0, "PUSH%S %OAX", -[0x51] 0,0, "PUSH%S %OCX", -[0x52] 0,0, "PUSH%S %ODX", -[0x53] 0,0, "PUSH%S %OBX", -[0x54] 0,0, "PUSH%S %OSP", -[0x55] 0,0, "PUSH%S %OBP", -[0x56] 0,0, "PUSH%S %OSI", -[0x57] 0,0, "PUSH%S %ODI", -[0x58] 0,0, "POP%S %OAX", -[0x59] 0,0, "POP%S %OCX", -[0x5a] 0,0, "POP%S %ODX", -[0x5b] 0,0, "POP%S %OBX", -[0x5c] 0,0, "POP%S %OSP", -[0x5d] 0,0, "POP%S %OBP", -[0x5e] 0,0, "POP%S %OSI", -[0x5f] 0,0, "POP%S %ODI", -[0x60] 0,0, "PUSHA%S", -[0x61] 0,0, "POPA%S", -[0x62] RMM,0, "BOUND %e,%r", -[0x63] RM,0, "ARPL %r,%e", -[0x64] SEG,0, "FS:", -[0x65] SEG,0, "GS:", -[0x66] OPOVER,0, "", -[0x67] ADDOVER,0, "", -[0x68] Iwd,0, "PUSH%S %i", -[0x69] RM,Iwd, "IMUL%S %e,%i,%r", -[0x6a] Ib,0, "PUSH%S %i", -[0x6b] RM,Ibs, "IMUL%S %e,%i,%r", -[0x6c] 0,0, "INSB DX,(%ODI)", -[0x6d] 0,0, "INS%S DX,(%ODI)", -[0x6e] 0,0, "OUTSB (%ASI),DX", -[0x6f] 0,0, "OUTS%S (%ASI),DX", -[0x70] Jbs,0, "JOS %p", -[0x71] Jbs,0, "JOC %p", -[0x72] Jbs,0, "JCS %p", -[0x73] Jbs,0, "JCC %p", -[0x74] Jbs,0, "JEQ %p", -[0x75] Jbs,0, "JNE %p", -[0x76] Jbs,0, "JLS %p", -[0x77] Jbs,0, "JHI %p", -[0x78] Jbs,0, "JMI %p", -[0x79] Jbs,0, "JPL %p", -[0x7a] Jbs,0, "JPS %p", -[0x7b] Jbs,0, "JPC %p", -[0x7c] Jbs,0, "JLT %p", -[0x7d] Jbs,0, "JGE %p", -[0x7e] Jbs,0, "JLE %p", -[0x7f] Jbs,0, "JGT %p", -[0x80] RMOPB,0, optab80, -[0x81] RMOP,0, optab81, -[0x83] RMOP,0, optab83, -[0x84] RMB,0, "TESTB %r,%e", -[0x85] RM,0, "TEST%S %r,%e", -[0x86] RMB,0, "XCHGB %r,%e", -[0x87] RM,0, "XCHG%S %r,%e", -[0x88] RMB,0, "MOVB %r,%e", -[0x89] RM,0, "MOV%S %r,%e", -[0x8a] RMB,0, "MOVB %e,%r", -[0x8b] RM,0, "MOV%S %e,%r", -[0x8c] RM,0, "MOVW %g,%e", -[0x8d] RM,0, "LEA%S %e,%r", -[0x8e] RM,0, "MOVW %e,%g", -[0x8f] RM,0, "POP%S %e", -[0x90] 0,0, "NOP", -[0x91] 0,0, "XCHG %OCX,%OAX", -[0x92] 0,0, "XCHG %ODX,%OAX", -[0x93] 0,0, "XCHG %OBX,%OAX", -[0x94] 0,0, "XCHG %OSP,%OAX", -[0x95] 0,0, "XCHG %OBP,%OAX", -[0x96] 0,0, "XCHG %OSI,%OAX", -[0x97] 0,0, "XCHG %ODI,%OAX", -[0x98] 0,0, "%W", /* miserable CBW or CWDE */ -[0x99] 0,0, "%w", /* idiotic CWD or CDQ */ -[0x9a] PTR,0, "CALL%S %d", -[0x9b] 0,0, "WAIT", -[0x9c] 0,0, "PUSHF", -[0x9d] 0,0, "POPF", -[0x9e] 0,0, "SAHF", -[0x9f] 0,0, "LAHF", -[0xa0] Awd,0, "MOVB %i,AL", -[0xa1] Awd,0, "MOV%S %i,%OAX", -[0xa2] Awd,0, "MOVB AL,%i", -[0xa3] Awd,0, "MOV%S %OAX,%i", -[0xa4] 0,0, "MOVSB (%ASI),(%ADI)", -[0xa5] 0,0, "MOVS%S (%ASI),(%ADI)", -[0xa6] 0,0, "CMPSB (%ASI),(%ADI)", -[0xa7] 0,0, "CMPS%S (%ASI),(%ADI)", -[0xa8] Ib,0, "TESTB %i,AL", -[0xa9] Iwd,0, "TEST%S %i,%OAX", -[0xaa] 0,0, "STOSB AL,(%ADI)", -[0xab] 0,0, "STOS%S %OAX,(%ADI)", -[0xac] 0,0, "LODSB (%ASI),AL", -[0xad] 0,0, "LODS%S (%ASI),%OAX", -[0xae] 0,0, "SCASB (%ADI),AL", -[0xaf] 0,0, "SCAS%S (%ADI),%OAX", -[0xb0] Ib,0, "MOVB %i,AL", -[0xb1] Ib,0, "MOVB %i,CL", -[0xb2] Ib,0, "MOVB %i,DL", -[0xb3] Ib,0, "MOVB %i,BL", -[0xb4] Ib,0, "MOVB %i,AH", -[0xb5] Ib,0, "MOVB %i,CH", -[0xb6] Ib,0, "MOVB %i,DH", -[0xb7] Ib,0, "MOVB %i,BH", -[0xb8] Iwdq,0, "MOV%S %i,%OAX", -[0xb9] Iwdq,0, "MOV%S %i,%OCX", -[0xba] Iwdq,0, "MOV%S %i,%ODX", -[0xbb] Iwdq,0, "MOV%S %i,%OBX", -[0xbc] Iwdq,0, "MOV%S %i,%OSP", -[0xbd] Iwdq,0, "MOV%S %i,%OBP", -[0xbe] Iwdq,0, "MOV%S %i,%OSI", -[0xbf] Iwdq,0, "MOV%S %i,%ODI", -[0xc0] RMOPB,0, optabC0, -[0xc1] RMOP,0, optabC1, -[0xc2] Iw,0, "RET %i", -[0xc3] RET,0, "RET", -[0xc4] RM,0, "LES %e,%r", -[0xc5] RM,0, "LDS %e,%r", -[0xc6] RMB,Ib, "MOVB %i,%e", -[0xc7] RM,Iwd, "MOV%S %i,%e", -[0xc8] Iw2,Ib, "ENTER %i,%I", /* loony ENTER */ -[0xc9] RET,0, "LEAVE", /* bizarre LEAVE */ -[0xca] Iw,0, "RETF %i", -[0xcb] RET,0, "RETF", -[0xcc] 0,0, "INT 3", -[0xcd] Ib,0, "INTB %i", -[0xce] 0,0, "INTO", -[0xcf] 0,0, "IRET", -[0xd0] RMOPB,0, optabD0, -[0xd1] RMOP,0, optabD1, -[0xd2] RMOPB,0, optabD2, -[0xd3] RMOP,0, optabD3, -[0xd4] OA,0, "AAM", -[0xd5] OA,0, "AAD", -[0xd7] 0,0, "XLAT", -[0xd8] FRMOP,0, optabD8, -[0xd9] FRMEX,0, optabD9, -[0xda] FRMOP,0, optabDA, -[0xdb] FRMEX,0, optabDB, -[0xdc] FRMOP,0, optabDC, -[0xdd] FRMOP,0, optabDD, -[0xde] FRMOP,0, optabDE, -[0xdf] FRMOP,0, optabDF, -[0xe0] Jbs,0, "LOOPNE %p", -[0xe1] Jbs,0, "LOOPE %p", -[0xe2] Jbs,0, "LOOP %p", -[0xe3] Jbs,0, "JCXZ %p", -[0xe4] Ib,0, "INB %i,AL", -[0xe5] Ib,0, "IN%S %i,%OAX", -[0xe6] Ib,0, "OUTB AL,%i", -[0xe7] Ib,0, "OUT%S %OAX,%i", -[0xe8] Iwds,0, "CALL %p", -[0xe9] Iwds,0, "JMP %p", -[0xea] PTR,0, "JMP %d", -[0xeb] Jbs,0, "JMP %p", -[0xec] 0,0, "INB DX,AL", -[0xed] 0,0, "IN%S DX,%OAX", -[0xee] 0,0, "OUTB AL,DX", -[0xef] 0,0, "OUT%S %OAX,DX", -[0xf0] PRE,0, "LOCK", -[0xf2] OPRE,0, "REPNE", -[0xf3] OPRE,0, "REP", -[0xf4] 0,0, "HLT", -[0xf5] 0,0, "CMC", -[0xf6] RMOPB,0, optabF6, -[0xf7] RMOP,0, optabF7, -[0xf8] 0,0, "CLC", -[0xf9] 0,0, "STC", -[0xfa] 0,0, "CLI", -[0xfb] 0,0, "STI", -[0xfc] 0,0, "CLD", -[0xfd] 0,0, "STD", -[0xfe] RMOPB,0, optabFE, -[0xff] RMOP,0, optabFF, -[0x100] RM,0, "MOVLQSX %r,%e", +0x00, RMB,0, "ADDB %r,%e", +0x01, RM,0, "ADD%S %r,%e", +0x02, RMB,0, "ADDB %e,%r", +0x03, RM,0, "ADD%S %e,%r", +0x04, Ib,0, "ADDB %i,AL", +0x05, Iwd,0, "ADD%S %i,%OAX", +0x06, 0,0, "PUSHL ES", +0x07, 0,0, "POPL ES", +0x08, RMB,0, "ORB %r,%e", +0x09, RM,0, "OR%S %r,%e", +0x0a, RMB,0, "ORB %e,%r", +0x0b, RM,0, "OR%S %e,%r", +0x0c, Ib,0, "ORB %i,AL", +0x0d, Iwd,0, "OR%S %i,%OAX", +0x0e, 0,0, "PUSHL CS", +0x0f, AUXMM,0, optab0F, +0x10, RMB,0, "ADCB %r,%e", +0x11, RM,0, "ADC%S %r,%e", +0x12, RMB,0, "ADCB %e,%r", +0x13, RM,0, "ADC%S %e,%r", +0x14, Ib,0, "ADCB %i,AL", +0x15, Iwd,0, "ADC%S %i,%OAX", +0x16, 0,0, "PUSHL SS", +0x17, 0,0, "POPL SS", +0x18, RMB,0, "SBBB %r,%e", +0x19, RM,0, "SBB%S %r,%e", +0x1a, RMB,0, "SBBB %e,%r", +0x1b, RM,0, "SBB%S %e,%r", +0x1c, Ib,0, "SBBB %i,AL", +0x1d, Iwd,0, "SBB%S %i,%OAX", +0x1e, 0,0, "PUSHL DS", +0x1f, 0,0, "POPL DS", +0x20, RMB,0, "ANDB %r,%e", +0x21, RM,0, "AND%S %r,%e", +0x22, RMB,0, "ANDB %e,%r", +0x23, RM,0, "AND%S %e,%r", +0x24, Ib,0, "ANDB %i,AL", +0x25, Iwd,0, "AND%S %i,%OAX", +0x26, SEG,0, "ES:", +0x27, 0,0, "DAA", +0x28, RMB,0, "SUBB %r,%e", +0x29, RM,0, "SUB%S %r,%e", +0x2a, RMB,0, "SUBB %e,%r", +0x2b, RM,0, "SUB%S %e,%r", +0x2c, Ib,0, "SUBB %i,AL", +0x2d, Iwd,0, "SUB%S %i,%OAX", +0x2e, SEG,0, "CS:", +0x2f, 0,0, "DAS", +0x30, RMB,0, "XORB %r,%e", +0x31, RM,0, "XOR%S %r,%e", +0x32, RMB,0, "XORB %e,%r", +0x33, RM,0, "XOR%S %e,%r", +0x34, Ib,0, "XORB %i,AL", +0x35, Iwd,0, "XOR%S %i,%OAX", +0x36, SEG,0, "SS:", +0x37, 0,0, "AAA", +0x38, RMB,0, "CMPB %r,%e", +0x39, RM,0, "CMP%S %r,%e", +0x3a, RMB,0, "CMPB %e,%r", +0x3b, RM,0, "CMP%S %e,%r", +0x3c, Ib,0, "CMPB %i,AL", +0x3d, Iwd,0, "CMP%S %i,%OAX", +0x3e, SEG,0, "DS:", +0x3f, 0,0, "AAS", +0x40, 0,0, "INC%S %OAX", +0x41, 0,0, "INC%S %OCX", +0x42, 0,0, "INC%S %ODX", +0x43, 0,0, "INC%S %OBX", +0x44, 0,0, "INC%S %OSP", +0x45, 0,0, "INC%S %OBP", +0x46, 0,0, "INC%S %OSI", +0x47, 0,0, "INC%S %ODI", +0x48, 0,0, "DEC%S %OAX", +0x49, 0,0, "DEC%S %OCX", +0x4a, 0,0, "DEC%S %ODX", +0x4b, 0,0, "DEC%S %OBX", +0x4c, 0,0, "DEC%S %OSP", +0x4d, 0,0, "DEC%S %OBP", +0x4e, 0,0, "DEC%S %OSI", +0x4f, 0,0, "DEC%S %ODI", +0x50, 0,0, "PUSH%S %OAX", +0x51, 0,0, "PUSH%S %OCX", +0x52, 0,0, "PUSH%S %ODX", +0x53, 0,0, "PUSH%S %OBX", +0x54, 0,0, "PUSH%S %OSP", +0x55, 0,0, "PUSH%S %OBP", +0x56, 0,0, "PUSH%S %OSI", +0x57, 0,0, "PUSH%S %ODI", +0x58, 0,0, "POP%S %OAX", +0x59, 0,0, "POP%S %OCX", +0x5a, 0,0, "POP%S %ODX", +0x5b, 0,0, "POP%S %OBX", +0x5c, 0,0, "POP%S %OSP", +0x5d, 0,0, "POP%S %OBP", +0x5e, 0,0, "POP%S %OSI", +0x5f, 0,0, "POP%S %ODI", +0x60, 0,0, "PUSHA%S", +0x61, 0,0, "POPA%S", +0x62, RMM,0, "BOUND %e,%r", +0x63, RM,0, "ARPL %r,%e", +0x64, SEG,0, "FS:", +0x65, SEG,0, "GS:", +0x66, OPOVER,0, "", +0x67, ADDOVER,0, "", +0x68, Iwd,0, "PUSH%S %i", +0x69, RM,Iwd, "IMUL%S %e,%i,%r", +0x6a, Ib,0, "PUSH%S %i", +0x6b, RM,Ibs, "IMUL%S %e,%i,%r", +0x6c, 0,0, "INSB DX,(%ODI)", +0x6d, 0,0, "INS%S DX,(%ODI)", +0x6e, 0,0, "OUTSB (%ASI),DX", +0x6f, 0,0, "OUTS%S (%ASI),DX", +0x70, Jbs,0, "JOS %p", +0x71, Jbs,0, "JOC %p", +0x72, Jbs,0, "JCS %p", +0x73, Jbs,0, "JCC %p", +0x74, Jbs,0, "JEQ %p", +0x75, Jbs,0, "JNE %p", +0x76, Jbs,0, "JLS %p", +0x77, Jbs,0, "JHI %p", +0x78, Jbs,0, "JMI %p", +0x79, Jbs,0, "JPL %p", +0x7a, Jbs,0, "JPS %p", +0x7b, Jbs,0, "JPC %p", +0x7c, Jbs,0, "JLT %p", +0x7d, Jbs,0, "JGE %p", +0x7e, Jbs,0, "JLE %p", +0x7f, Jbs,0, "JGT %p", +0x80, RMOPB,0, optab80, +0x81, RMOP,0, optab81, +0x83, RMOP,0, optab83, +0x84, RMB,0, "TESTB %r,%e", +0x85, RM,0, "TEST%S %r,%e", +0x86, RMB,0, "XCHGB %r,%e", +0x87, RM,0, "XCHG%S %r,%e", +0x88, RMB,0, "MOVB %r,%e", +0x89, RM,0, "MOV%S %r,%e", +0x8a, RMB,0, "MOVB %e,%r", +0x8b, RM,0, "MOV%S %e,%r", +0x8c, RM,0, "MOVW %g,%e", +0x8d, RM,0, "LEA%S %e,%r", +0x8e, RM,0, "MOVW %e,%g", +0x8f, RM,0, "POP%S %e", +0x90, 0,0, "NOP", +0x91, 0,0, "XCHG %OCX,%OAX", +0x92, 0,0, "XCHG %ODX,%OAX", +0x93, 0,0, "XCHG %OBX,%OAX", +0x94, 0,0, "XCHG %OSP,%OAX", +0x95, 0,0, "XCHG %OBP,%OAX", +0x96, 0,0, "XCHG %OSI,%OAX", +0x97, 0,0, "XCHG %ODI,%OAX", +0x98, 0,0, "%W", /* miserable CBW or CWDE */ +0x99, 0,0, "%w", /* idiotic CWD or CDQ */ +0x9a, PTR,0, "CALL%S %d", +0x9b, 0,0, "WAIT", +0x9c, 0,0, "PUSHF", +0x9d, 0,0, "POPF", +0x9e, 0,0, "SAHF", +0x9f, 0,0, "LAHF", +0xa0, Awd,0, "MOVB %i,AL", +0xa1, Awd,0, "MOV%S %i,%OAX", +0xa2, Awd,0, "MOVB AL,%i", +0xa3, Awd,0, "MOV%S %OAX,%i", +0xa4, 0,0, "MOVSB (%ASI),(%ADI)", +0xa5, 0,0, "MOVS%S (%ASI),(%ADI)", +0xa6, 0,0, "CMPSB (%ASI),(%ADI)", +0xa7, 0,0, "CMPS%S (%ASI),(%ADI)", +0xa8, Ib,0, "TESTB %i,AL", +0xa9, Iwd,0, "TEST%S %i,%OAX", +0xaa, 0,0, "STOSB AL,(%ADI)", +0xab, 0,0, "STOS%S %OAX,(%ADI)", +0xac, 0,0, "LODSB (%ASI),AL", +0xad, 0,0, "LODS%S (%ASI),%OAX", +0xae, 0,0, "SCASB (%ADI),AL", +0xaf, 0,0, "SCAS%S (%ADI),%OAX", +0xb0, Ib,0, "MOVB %i,AL", +0xb1, Ib,0, "MOVB %i,CL", +0xb2, Ib,0, "MOVB %i,DL", +0xb3, Ib,0, "MOVB %i,BL", +0xb4, Ib,0, "MOVB %i,AH", +0xb5, Ib,0, "MOVB %i,CH", +0xb6, Ib,0, "MOVB %i,DH", +0xb7, Ib,0, "MOVB %i,BH", +0xb8, Iwdq,0, "MOV%S %i,%OAX", +0xb9, Iwdq,0, "MOV%S %i,%OCX", +0xba, Iwdq,0, "MOV%S %i,%ODX", +0xbb, Iwdq,0, "MOV%S %i,%OBX", +0xbc, Iwdq,0, "MOV%S %i,%OSP", +0xbd, Iwdq,0, "MOV%S %i,%OBP", +0xbe, Iwdq,0, "MOV%S %i,%OSI", +0xbf, Iwdq,0, "MOV%S %i,%ODI", +0xc0, RMOPB,0, optabC0, +0xc1, RMOP,0, optabC1, +0xc2, Iw,0, "RET %i", +0xc3, RET,0, "RET", +0xc4, RM,0, "LES %e,%r", +0xc5, RM,0, "LDS %e,%r", +0xc6, RMB,Ib, "MOVB %i,%e", +0xc7, RM,Iwd, "MOV%S %i,%e", +0xc8, Iw2,Ib, "ENTER %i,%I", /* loony ENTER */ +0xc9, RET,0, "LEAVE", /* bizarre LEAVE */ +0xca, Iw,0, "RETF %i", +0xcb, RET,0, "RETF", +0xcc, 0,0, "INT 3", +0xcd, Ib,0, "INTB %i", +0xce, 0,0, "INTO", +0xcf, 0,0, "IRET", +0xd0, RMOPB,0, optabD0, +0xd1, RMOP,0, optabD1, +0xd2, RMOPB,0, optabD2, +0xd3, RMOP,0, optabD3, +0xd4, OA,0, "AAM", +0xd5, OA,0, "AAD", +0xd7, 0,0, "XLAT", +0xd8, FRMOP,0, optabD8, +0xd9, FRMEX,0, optabD9, +0xda, FRMOP,0, optabDA, +0xdb, FRMEX,0, optabDB, +0xdc, FRMOP,0, optabDC, +0xdd, FRMOP,0, optabDD, +0xde, FRMOP,0, optabDE, +0xdf, FRMOP,0, optabDF, +0xe0, Jbs,0, "LOOPNE %p", +0xe1, Jbs,0, "LOOPE %p", +0xe2, Jbs,0, "LOOP %p", +0xe3, Jbs,0, "JCXZ %p", +0xe4, Ib,0, "INB %i,AL", +0xe5, Ib,0, "IN%S %i,%OAX", +0xe6, Ib,0, "OUTB AL,%i", +0xe7, Ib,0, "OUT%S %OAX,%i", +0xe8, Iwds,0, "CALL %p", +0xe9, Iwds,0, "JMP %p", +0xea, PTR,0, "JMP %d", +0xeb, Jbs,0, "JMP %p", +0xec, 0,0, "INB DX,AL", +0xed, 0,0, "IN%S DX,%OAX", +0xee, 0,0, "OUTB AL,DX", +0xef, 0,0, "OUT%S %OAX,DX", +0xf0, PRE,0, "LOCK", +0xf2, OPRE,0, "REPNE", +0xf3, OPRE,0, "REP", +0xf4, 0,0, "HLT", +0xf5, 0,0, "CMC", +0xf6, RMOPB,0, optabF6, +0xf7, RMOP,0, optabF7, +0xf8, 0,0, "CLC", +0xf9, 0,0, "STC", +0xfa, 0,0, "CLI", +0xfb, 0,0, "STI", +0xfc, 0,0, "CLD", +0xfd, 0,0, "STD", +0xfe, RMOPB,0, optabFE, +0xff, RMOP,0, optabFF, +0x100, RM,0, "MOVLQSX %r,%e", }; +static struct { + Optable *tab; + uint nel; +} optabtab[] = { + optab0F00, nelem(optab0F00), + optab0F01, nelem(optab0F01), + optab0F01F8, nelem(optab0F01F8), + optab0FAE, nelem(optab0FAE), + optab0FBA, nelem(optab0FBA), + optab0F0F, nelem(optab0F0F), + optab0FC7, nelem(optab0FC7), + optab660F71, nelem(optab660F71), + optab660F72, nelem(optab660F72), + optab660F73, nelem(optab660F73), + optab660F, nelem(optab660F), + optabF20F, nelem(optabF20F), + optabF30F, nelem(optabF30F), + optab0F, nelem(optab0F), + optab80, nelem(optab80), + optab81, nelem(optab81), + optab83, nelem(optab83), + optabC0, nelem(optabC0), + optabC1, nelem(optabC1), + optabD0, nelem(optabD0), + optabD1, nelem(optabD1), + optabD2, nelem(optabD2), + optabD3, nelem(optabD3), + optabD8, nelem(optabD8), + optabD9, nelem(optabD9), + optabDA, nelem(optabDA), + optabDB, nelem(optabDB), + optabDC, nelem(optabDC), + optabDD, nelem(optabDD), + optabDE, nelem(optabDE), + optabDF, nelem(optabDF), + optabF6, nelem(optabF6), + optabF7, nelem(optabF7), + optabFE, nelem(optabFE), + optabFF, nelem(optabFF), + optable, nelem(optable), +}; + +/* + * compensate for Microsoft's ageing compilers + */ +static void +ordertab(Optable *tab, int nel) +{ + int i, x; + static Optable empty; + + for(i = nel; --i >= 0;){ + x = tab[i].x; + if(x != i){ + tab[x] = tab[i]; + tab[i] = empty; + } + } +} + +static void +soptoms(void) +{ + int i; + static int reordered; /* assumes non-concurrent use */ + + if(reordered) + return; + reordered = 1; + for(i = 0; i < nelem(optabtab); i++) + ordertab(optabtab[i].tab, optabtab[i].nel); +} + /* * get a byte of the instruction */ @@ -1400,6 +1490,7 @@ mkinstr(Map *map, Instr *ip, uvlong pc) Optable *op, *obase; char buf[128]; + soptoms(); memset(ip, 0, sizeof(*ip)); norex = 1; ip->base = -1; @@ -1723,24 +1814,24 @@ bprint(Instr *ip, char *fmt, ...) #define ONAME(ip) "" static char *reg[] = { -[AX] "AX", -[CX] "CX", -[DX] "DX", -[BX] "BX", -[SP] "SP", -[BP] "BP", -[SI] "SI", -[DI] "DI", + "AX", + "CX", + "DX", + "BX", + "SP", + "BP", + "SI", + "DI", /* amd64 */ -[R8] "R8", -[R9] "R9", -[R10] "R10", -[R11] "R11", -[R12] "R12", -[R13] "R13", -[R14] "R14", -[R15] "R15", + "R8", + "R9", + "R10", + "R11", + "R12", + "R13", + "R14", + "R15", }; static char *breg[] = { "AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH" }; diff --git a/utils/libmach/kdb.c b/utils/libmach/kdb.c index 5536532a..80a4110b 100644 --- a/utils/libmach/kdb.c +++ b/utils/libmach/kdb.c @@ -150,130 +150,138 @@ static void loadcsr(Instr*, char*); static void trap(Instr*, char*); static struct opcode sparcop0[8] = { - [0] "UNIMP", unimp, 0, /* page 137 */ - [2] "B", bra, 0, /* page 119 */ - [4] "SETHI", sethi, 0, /* page 104 */ - [6] "FB", fbra, 0, /* page 121 */ - [7] "CB", cbra, 0, /* page 123 */ + "UNIMP", unimp, 0, /* page 137 */ /* 0 */ + "", 0, 0, /* 1 */ + "B", bra, 0, /* page 119 */ /* 2 */ + "", 0, 0, /* 3 */ + "SETHI", sethi, 0, /* page 104 */ /* 4 */ + "", 0, 0, /* 5 */ + "FB", fbra, 0, /* page 121 */ /* 6 */ + "CB", cbra, 0, /* page 123 */ /* 7 */ }; static struct opcode sparcop2[64] = { - [0x00] "ADD", add, 0, /* page 108 */ - [0x10] "ADDCC", add, 0, - [0x08] "ADDX", add, 0, - [0x18] "ADDXCC", add, 0, - - [0x20] "TADD", add, 0, /* page 109 */ - [0x22] "TADDCCTV", add, 0, - - [0x04] "SUB", add, 0, /* page 110 */ - [0x14] "SUBCC", cmp, 0, - [0x0C] "SUBX", add, 0, - [0x1C] "SUBXCC", add, 0, - - [0x21] "TSUB", add, 0, /* page 111 */ - [0x23] "TSUBCCTV", add, 0, - - [0x24] "MULSCC", add, 0, /* page 112 */ - - [0x0A] "UMUL", add, 0, /* page 113 */ - [0x0B] "SMUL", add, 0, - [0x1A] "UMULCC", add, 0, - [0x1B] "SMULCC", add, 0, - - [0x0E] "UDIV", add, 0, /* page 115 */ - [0x0F] "SDIV", add, 0, - [0x1E] "UDIVCC", add, 0, - [0x1F] "SDIVCC", add, 0, - - [0x01] "AND", add, 0, /* page 106 */ - [0x11] "ANDCC", add, 0, - [0x05] "ANDN", add, 0, - [0x15] "ANDNCC", add, 0, - [0x02] "OR", add, 0, - [0x12] "ORCC", add, 0, - [0x06] "ORN", add, 0, - [0x16] "ORNCC", add, 0, - [0x03] "XOR", add, 0, - [0x13] "XORCC", add, 0, - [0x07] "XORN", add, 0, - [0x17] "XORNCC", add, 0, - - [0x25] "SLL", shift, 0, /* page 107 */ - [0x26] "SRL", shift, 0, - [0x27] "SRA", shift, 0, - - [0x3C] "SAVE", add, 0, /* page 117 */ - [0x3D] "RESTORE", add, 0, - - [0x38] "JMPL", jmpl, 0, /* page 126 */ - - [0x39] "RETT", add, 0, /* page 127 */ - - [0x3A] "T", trap, 0, /* page 129 */ - - [0x28] "rdy", rd, 0, /* page 131 */ - [0x29] "rdpsr", rd, 0, - [0x2A] "rdwim", rd, 0, - [0x2B] "rdtbr", rd, 0, - - [0x30] "wry", wr, 0, /* page 133 */ - [0x31] "wrpsr", wr, 0, - [0x32] "wrwim", wr, 0, - [0x33] "wrtbr", wr, 0, - - [0x3B] "flush", add, 0, /* page 138 */ - - [0x34] "FPOP", fpop, 0, /* page 140 */ - [0x35] "FPOP", fpop, 0, + "ADD", add, 0, /* page 108 */ /* 0x00 */ + "AND", add, 0, /* page 106 */ /* 0x01 */ + "OR", add, 0, /* 0x02 */ + "XOR", add, 0, /* 0x03 */ + "SUB", add, 0, /* page 110 */ /* 0x04 */ + "ANDN", add, 0, /* 0x05 */ + "ORN", add, 0, /* 0x06 */ + "XORN", add, 0, /* 0x07 */ + "ADDX", add, 0, /* 0x08 */ + "", 0, 0, /* 0x09 */ + "UMUL", add, 0, /* page 113 */ /* 0x0a */ + "SMUL", add, 0, /* 0x0b */ + "SUBX", add, 0, /* 0x0c */ + "", 0, 0, /* 0x0d */ + "UDIV", add, 0, /* page 115 */ /* 0x0e */ + "SDIV", add, 0, /* 0x0f */ + "ADDCC", add, 0, /* 0x10 */ + "ANDCC", add, 0, /* 0x11 */ + "ORCC", add, 0, /* 0x12 */ + "XORCC", add, 0, /* 0x13 */ + "SUBCC", cmp, 0, /* 0x14 */ + "ANDNCC", add, 0, /* 0x15 */ + "ORNCC", add, 0, /* 0x16 */ + "XORNCC", add, 0, /* 0x17 */ + "ADDXCC", add, 0, /* 0x18 */ + "", 0, 0, /* 0x19 */ + "UMULCC", add, 0, /* 0x1a */ + "SMULCC", add, 0, /* 0x1b */ + "SUBXCC", add, 0, /* 0x1c */ + "", 0, 0, /* 0x1d */ + "UDIVCC", add, 0, /* 0x1e */ + "SDIVCC", add, 0, /* 0x1f */ + "TADD", add, 0, /* page 109 */ /* 0x20 */ + "TSUB", add, 0, /* page 111 */ /* 0x21 */ + "TADDCCTV", add, 0, /* 0x22 */ + "TSUBCCTV", add, 0, /* 0x23 */ + "MULSCC", add, 0, /* page 112 */ /* 0x24 */ + "SLL", shift, 0, /* page 107 */ /* 0x25 */ + "SRL", shift, 0, /* 0x26 */ + "SRA", shift, 0, /* 0x27 */ + "rdy", rd, 0, /* page 131 */ /* 0x28 */ + "rdpsr", rd, 0, /* 0x29 */ + "rdwim", rd, 0, /* 0x2a */ + "rdtbr", rd, 0, /* 0x2b */ + "", 0, 0, /* 0x2c */ + "", 0, 0, /* 0x2d */ + "", 0, 0, /* 0x2e */ + "", 0, 0, /* 0x2f */ + "wry", wr, 0, /* page 133 */ /* 0x30 */ + "wrpsr", wr, 0, /* 0x31 */ + "wrwim", wr, 0, /* 0x32 */ + "wrtbr", wr, 0, /* 0x33 */ + "FPOP", fpop, 0, /* page 140 */ /* 0x34 */ + "FPOP", fpop, 0, /* 0x35 */ + "", 0, 0, /* 0x36 */ + "", 0, 0, /* 0x37 */ + "JMPL", jmpl, 0, /* page 126 */ /* 0x38 */ + "RETT", add, 0, /* page 127 */ /* 0x39 */ + "T", trap, 0, /* page 129 */ /* 0x3a */ + "flush", add, 0, /* page 138 */ /* 0x3b */ + "SAVE", add, 0, /* page 117 */ /* 0x3c */ + "RESTORE", add, 0, /* 0x3d */ }; static struct opcode sparcop3[64]={ - [0x09] "ldsb", load, 0, /* page 90 */ - [0x19] "ldsba", loada, 0, - [0x0A] "ldsh", load, 0, - [0x1A] "ldsha", loada, 0, - [0x01] "ldub", load, 0, - [0x11] "lduba", loada, 0, - [0x02] "lduh", load, 0, - [0x12] "lduha", loada, 0, - [0x00] "ld", load, 0, - [0x10] "lda", loada, 0, - [0x03] "ldd", load, 0, - [0x13] "ldda", loada, 0, - - [0x20] "ldf", loadf, 0, /* page 92 */ - [0x23] "lddf", loadf, 0, - [0x21] "ldfsr", loadf,0, - - [0x30] "ldc", loadc, 0, /* page 94 */ - [0x33] "lddc", loadc, 0, - [0x31] "ldcsr", loadcsr,0, - - [0x05] "stb", store, 0, /* page 95 */ - [0x15] "stba", storea, 0, - [0x06] "sth", store, 0, - [0x16] "stha", storea, 0, - [0x04] "st", store, 0, - [0x14] "sta", storea, 0, - [0x07] "std", store, 0, - [0x17] "stda", storea, 0, - - [0x24] "stf", storef, 0, /* page 97 */ - [0x27] "stdf", storef, 0, - [0x25] "stfsr", storef,0, - [0x26] "stdfq", storef,0, - - [0x34] "stc", loadc, 0, /* page 99 */ - [0x37] "stdc", loadc, 0, - [0x35] "stcsr", loadcsr,0, - [0x36] "stdcq", loadcsr,0, - - [0x0D] "ldstub", store, 0, /* page 101 */ - [0x1D] "ldstuba", storea, 0, - - [0x0F] "swap", load, 0, /* page 102 */ - [0x1F] "swapa", loada, 0, + "ld", load, 0, /* 0x00 */ + "ldub", load, 0, /* 0x01 */ + "lduh", load, 0, /* 0x02 */ + "ldd", load, 0, /* 0x03 */ + "st", store, 0, /* 0x04 */ + "stb", store, 0, /* page 95 */ /* 0x05 */ + "sth", store, 0, /* 0x06 */ + "std", store, 0, /* 0x07 */ + "", 0, 0, /* 0x08 */ + "ldsb", load, 0, /* page 90 */ /* 0x09 */ + "ldsh", load, 0, /* 0x0a */ + "", 0, 0, /* 0x0b */ + "", 0, 0, /* 0x0c */ + "ldstub", store, 0, /* page 101 */ /* 0x0d */ + "", 0, 0, /* 0x0e */ + "swap", load, 0, /* page 102 */ /* 0x0f */ + "lda", loada, 0, /* 0x10 */ + "lduba", loada, 0, /* 0x11 */ + "lduha", loada, 0, /* 0x12 */ + "ldda", loada, 0, /* 0x13 */ + "sta", storea, 0, /* 0x14 */ + "stba", storea, 0, /* 0x15 */ + "stha", storea, 0, /* 0x16 */ + "stda", storea, 0, /* 0x17 */ + "", 0, 0, /* 0x18 */ + "ldsba", loada, 0, /* 0x19 */ + "ldsha", loada, 0, /* 0x1a */ + "", 0, 0, /* 0x1b */ + "", 0, 0, /* 0x1c */ + "ldstuba", storea, 0, /* 0x1d */ + "", 0, 0, /* 0x1e */ + "swapa", loada, 0, /* 0x1f */ + "ldf", loadf, 0, /* page 92 */ /* 0x20 */ + "ldfsr", loadf,0, /* 0x21 */ + "", 0, 0, /* 0x22 */ + "lddf", loadf, 0, /* 0x23 */ + "stf", storef, 0, /* page 97 */ /* 0x24 */ + "stfsr", storef,0, /* 0x25 */ + "stdfq", storef,0, /* 0x26 */ + "stdf", storef, 0, /* 0x27 */ + "", 0, 0, /* 0x28 */ + "", 0, 0, /* 0x29 */ + "", 0, 0, /* 0x2a */ + "", 0, 0, /* 0x2b */ + "", 0, 0, /* 0x2c */ + "", 0, 0, /* 0x2d */ + "", 0, 0, /* 0x2e */ + "", 0, 0, /* 0x2f */ + "ldc", loadc, 0, /* page 94 */ /* 0x30 */ + "ldcsr", loadcsr,0, /* 0x31 */ + "", 0, 0, /* 0x32 */ + "lddc", loadc, 0, /* 0x33 */ + "stc", loadc, 0, /* page 99 */ /* 0x34 */ + "stcsr", loadcsr,0, /* 0x35 */ + "stdcq", loadcsr,0, /* 0x36 */ + "stdc", loadc, 0, /* 0x37 */ }; #pragma varargck argpos bprint 2 @@ -534,60 +542,60 @@ unimp(Instr *i, char *m) } static char *bratab[16] = { /* page 91 */ - [0X8] "A", - [0X0] "N", - [0X9] "NE", - [0X1] "E", - [0XA] "G", - [0X2] "LE", - [0XB] "GE", - [0X3] "L", - [0XC] "GU", - [0X4] "LEU", - [0XD] "CC", - [0X5] "CS", - [0XE] "POS", - [0X6] "NEG", - [0XF] "VC", - [0X7] "VS", + "N", /* 0x0 */ + "E", /* 0x1 */ + "LE", /* 0x2 */ + "L", /* 0x3 */ + "LEU", /* 0x4 */ + "CS", /* 0x5 */ + "NEG", /* 0x6 */ + "VS", /* 0x7 */ + "A", /* 0x8 */ + "NE", /* 0x9 */ + "G", /* 0xa */ + "GE", /* 0xb */ + "GU", /* 0xc */ + "CC", /* 0xd */ + "POS", /* 0xe */ + "VC", /* 0xf */ }; static char *fbratab[16] = { /* page 91 */ - [0X8] "A", - [0X0] "N", - [0X7] "U", - [0X6] "G", - [0X5] "UG", - [0X4] "L", - [0X3] "UL", - [0X2] "LG", - [0X1] "NE", - [0X9] "E", - [0XA] "UE", - [0XB] "GE", - [0XC] "UGE", - [0XD] "LE", - [0XE] "ULE", - [0XF] "O", + "N", /* 0x0 */ + "NE", /* 0x1 */ + "LG", /* 0x2 */ + "UL", /* 0x3 */ + "L", /* 0x4 */ + "UG", /* 0x5 */ + "G", /* 0x6 */ + "U", /* 0x7 */ + "A", /* 0x8 */ + "E", /* 0x9 */ + "UE", /* 0xa */ + "GE", /* 0xb */ + "UGE", /* 0xc */ + "LE", /* 0xd */ + "ULE", /* 0xe */ + "O", /* 0xf */ }; static char *cbratab[16] = { /* page 91 */ - [0X8] "A", - [0X0] "N", - [0X7] "3", - [0X6] "2", - [0X5] "23", - [0X4] "1", - [0X3] "13", - [0X2] "12", - [0X1] "123", - [0X9] "0", - [0XA] "03", - [0XB] "02", - [0XC] "023", - [0XD] "01", - [0XE] "013", - [0XF] "012", + "N", /* 0x0 */ + "123", /* 0x1 */ + "12", /* 0x2 */ + "13", /* 0x3 */ + "1", /* 0x4 */ + "23", /* 0x5 */ + "2", /* 0x6 */ + "3", /* 0x7 */ + "A", /* 0x8 */ + "0", /* 0x9 */ + "03", /* 0xa */ + "02", /* 0xb */ + "023", /* 0xc */ + "01", /* 0xd */ + "013", /* 0xe */ + "012", /* 0xf */ }; static void diff --git a/utils/libmach/obj.c b/utils/libmach/obj.c index 812369ba..fcb6dba8 100644 --- a/utils/libmach/obj.c +++ b/utils/libmach/obj.c @@ -50,15 +50,23 @@ struct Obj /* functions to handle each intermediate (.$O) file */ static Obj obj[] = { /* functions to identify and parse each type of obj */ - [Obj68020] "68020 .2", _is2, _read2, - [ObjAmd64] "amd64 .6", _is6, _read6, - [ObjArm] "arm .5", _is5, _read5, - [Obj386] "386 .8", _is8, _read8, - [ObjSparc] "sparc .k", _isk, _readk, - [ObjPower] "power .q", _isq, _readq, - [ObjMips] "mips .v", _isv, _readv, - [ObjPower64] "power64 .9", _is9, _read9, - [Maxobjtype] 0, 0 + /*[Obj68020]*/ "68020 .2", _is2, _read2, + /*[ObjSparc]*/ "sparc .k", _isk, _readk, + /*[ObjMips]*/ "mips .v", _isv, _readv, + /*[Obj386]*/ "386 .8", _is8, _read8, + /*[Obj960]*/ {0, 0,}, + /*[Obj3210]*/ {0, 0,}, + /*[ObjMips2]*/ {0, 0,}, + /*[Obj29000]*/ {0, 0,}, + /*[ObjArm]*/ "arm .5", _is5, _read5, + /*[ObjPower]*/ "power .q", _isq, _readq, + /*[ObjMips2le]*/ {0, 0,}, + /*[ObjAlpha]*/ {0, 0,}, + /*[ObjSparc64]*/ {0, 0,}, + /*[ObjAmd64]*/ "amd64 .6", _is6, _read6, + /*[ObjSpim]*/ {0, 0,}, + /*[ObjPower64]*/ "power64 .9", _is9, _read9, + /*[Maxobjtype]*/ 0, 0 }; struct Symtab diff --git a/utils/libmach/setmach.c b/utils/libmach/setmach.c index cdac45f6..4332dc9d 100644 --- a/utils/libmach/setmach.c +++ b/utils/libmach/setmach.c @@ -15,9 +15,10 @@ struct machtab Machdata *machdata; /* machine functions */ }; -extern Mach mmips, msparc, m68020, mi386, marm, mmips2be, mmips2le, mpower; +extern Mach mmips, msparc, m68020, mi386, mamd64, + marm, mmips2be, mmips2le, mpower, mpower64, malpha, msparc64; extern Machdata mipsmach, sparcmach, m68020mach, i386mach, - armmach, mipsmach2be, mipsmach2le, powermach; + armmach, mipsmach2le, powermach, alphamach, sparc64mach; /* * machine selection table. machines with native disassemblers should @@ -55,7 +56,7 @@ Machtab machines[] = FMIPSB, AMIPS, &mmips2be, - &mipsmach2be, }, + &mipsmach, }, /* shares debuggers with native mips */ { "mipsco", /*native mips - must follow plan 9*/ FMIPS, FMIPSB, @@ -86,18 +87,30 @@ Machtab machines[] = AI8086, &mi386, &i386mach, }, + { "amd64", /*amd64*/ + FAMD64, + FAMD64B, + AAMD64, + &mamd64, + &i386mach, }, { "arm", /*ARM*/ FARM, - FNONE, + FARMB, AARM, &marm, &armmach, }, { "power", /*PowerPC*/ FPOWER, - FNONE, + FPOWERB, APOWER, &mpower, &powermach, }, + { "power64", /*PowerPC*/ + FPOWER64, + FPOWER64B, + APOWER64, + &mpower64, + &powermach, }, { 0 }, /*the terminator*/ }; |
