+2014-03-10 Andreas Kling <akling@apple.com>
+
+ [X86_64] Smaller code for test_ir when register is accumulator.
+ <https://webkit.org/b/130006>
+
+ Generate the shorthand version of "test eax, imm" when possible.
+
+ Reviewed by Benjamin Poulain.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::testl_i32r):
+ (JSC::X86Assembler::testq_i32r):
+
2014-03-10 Andreas Kling <akling@apple.com>
[X86_64] Smaller code for cmp_ir when register is accumulator.
OP_CDQ = 0x99,
OP_MOV_EAXOv = 0xA1,
OP_MOV_OvEAX = 0xA3,
+ OP_TEST_EAXIv = 0xA9,
OP_MOV_EAXIv = 0xB8,
OP_GROUP2_EvIb = 0xC1,
OP_RET = 0xC3,
void testl_i32r(int imm, RegisterID dst)
{
- m_formatter.oneByteOp(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);
+ if (dst == X86Registers::eax)
+ m_formatter.oneByteOp(OP_TEST_EAXIv);
+ else
+ m_formatter.oneByteOp(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);
m_formatter.immediate32(imm);
}
void testq_i32r(int imm, RegisterID dst)
{
- m_formatter.oneByteOp64(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);
+ if (dst == X86Registers::eax)
+ m_formatter.oneByteOp64(OP_TEST_EAXIv);
+ else
+ m_formatter.oneByteOp64(OP_GROUP3_EvIz, GROUP3_OP_TEST, dst);
m_formatter.immediate32(imm);
}