| Index: src/ia32/disasm-ia32.cc
|
| ===================================================================
|
| --- src/ia32/disasm-ia32.cc (revision 9327)
|
| +++ src/ia32/disasm-ia32.cc (working copy)
|
| @@ -55,6 +55,7 @@
|
|
|
|
|
| static const ByteMnemonic two_operands_instr[] = {
|
| + {0x01, "add", OPER_REG_OP_ORDER},
|
| {0x03, "add", REG_OPER_OP_ORDER},
|
| {0x09, "or", OPER_REG_OP_ORDER},
|
| {0x0B, "or", REG_OPER_OP_ORDER},
|
| @@ -117,6 +118,19 @@
|
| };
|
|
|
|
|
| +// Generally we don't want to generate these because they are subject to partial
|
| +// register stalls. They are included for completeness and because the cmp
|
| +// variant is used by the RecordWrite stub. Because it does not update the
|
| +// register it is not subject to partial register stalls.
|
| +static ByteMnemonic byte_immediate_instr[] = {
|
| + {0x0c, "or", UNSET_OP_ORDER},
|
| + {0x24, "and", UNSET_OP_ORDER},
|
| + {0x34, "xor", UNSET_OP_ORDER},
|
| + {0x3c, "cmp", UNSET_OP_ORDER},
|
| + {-1, "", UNSET_OP_ORDER}
|
| +};
|
| +
|
| +
|
| static const char* const jump_conditional_mnem[] = {
|
| /*0*/ "jo", "jno", "jc", "jnc",
|
| /*4*/ "jz", "jnz", "jna", "ja",
|
| @@ -149,7 +163,8 @@
|
| REGISTER_INSTR,
|
| MOVE_REG_INSTR,
|
| CALL_JUMP_INSTR,
|
| - SHORT_IMMEDIATE_INSTR
|
| + SHORT_IMMEDIATE_INSTR,
|
| + BYTE_IMMEDIATE_INSTR
|
| };
|
|
|
|
|
| @@ -198,6 +213,7 @@
|
| CopyTable(zero_operands_instr, ZERO_OPERANDS_INSTR);
|
| CopyTable(call_jump_instr, CALL_JUMP_INSTR);
|
| CopyTable(short_immediate_instr, SHORT_IMMEDIATE_INSTR);
|
| + CopyTable(byte_immediate_instr, BYTE_IMMEDIATE_INSTR);
|
| AddJumpConditionalShort();
|
| SetTableRange(REGISTER_INSTR, 0x40, 0x47, "inc");
|
| SetTableRange(REGISTER_INSTR, 0x48, 0x4F, "dec");
|
| @@ -912,6 +928,12 @@
|
| break;
|
| }
|
|
|
| + case BYTE_IMMEDIATE_INSTR: {
|
| + AppendToBuffer("%s al, 0x%x", idesc.mnem, data[1]);
|
| + data += 2;
|
| + break;
|
| + }
|
| +
|
| case NO_INSTR:
|
| processed = false;
|
| break;
|
| @@ -1346,11 +1368,6 @@
|
| data += 2;
|
| break;
|
|
|
| - case 0x2C:
|
| - AppendToBuffer("subb eax,0x%x", *reinterpret_cast<uint8_t*>(data+1));
|
| - data += 2;
|
| - break;
|
| -
|
| case 0xA9:
|
| AppendToBuffer("test eax,0x%x", *reinterpret_cast<int32_t*>(data+1));
|
| data += 5;
|
|
|