| Index: src/ia32/disasm-ia32.cc
 | 
| ===================================================================
 | 
| --- src/ia32/disasm-ia32.cc	(revision 9531)
 | 
| +++ 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;
 | 
| 
 |