Commit dfbeb145 authored by Roland Levillain's avatar Roland Levillain Committed by Gerrit Code Review
Browse files

Merge "Add cmpb instruction to x86 and x86_64 assembler"

parents fc7662f7 3b62593b
......@@ -1030,6 +1030,14 @@ void X86Assembler::xchgl(Register reg, const Address& address) {
}
void X86Assembler::cmpb(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0x80);
EmitOperand(7, address);
EmitUint8(imm.value() & 0xFF);
}
void X86Assembler::cmpw(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0x66);
......
......@@ -479,6 +479,7 @@ class X86Assembler FINAL : public Assembler {
void xchgl(Register dst, Register src);
void xchgl(Register reg, const Address& address);
void cmpb(const Address& address, const Immediate& imm);
void cmpw(const Address& address, const Immediate& imm);
void cmpl(Register reg, const Immediate& imm);
......
......@@ -389,4 +389,10 @@ TEST_F(AssemblerX86Test, NearLabel) {
DriverStr(expected, "near_label");
}
TEST_F(AssemblerX86Test, Cmpb) {
GetAssembler()->cmpb(x86::Address(x86::EDI, 128), x86::Immediate(0));
const char* expected = "cmpb $0, 128(%EDI)\n";
DriverStr(expected, "cmpb");
}
} // namespace art
......@@ -1224,6 +1224,16 @@ void X86_64Assembler::xchgl(CpuRegister reg, const Address& address) {
}
void X86_64Assembler::cmpb(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
CHECK(imm.is_int32());
EmitOptionalRex32(address);
EmitUint8(0x80);
EmitOperand(7, address);
EmitUint8(imm.value() & 0xFF);
}
void X86_64Assembler::cmpw(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
CHECK(imm.is_int32());
......
......@@ -506,6 +506,7 @@ class X86_64Assembler FINAL : public Assembler {
void xchgq(CpuRegister dst, CpuRegister src);
void xchgl(CpuRegister reg, const Address& address);
void cmpb(const Address& address, const Immediate& imm);
void cmpw(const Address& address, const Immediate& imm);
void cmpl(CpuRegister reg, const Immediate& imm);
......
......@@ -1637,4 +1637,11 @@ TEST_F(AssemblerX86_64Test, Repecmpsq) {
DriverStr(expected, "Repecmpsq");
}
TEST_F(AssemblerX86_64Test, Cmpb) {
GetAssembler()->cmpb(x86_64::Address(x86_64::CpuRegister(x86_64::RDI), 128),
x86_64::Immediate(0));
const char* expected = "cmpb $0, 128(%RDI)\n";
DriverStr(expected, "cmpb");
}
} // namespace art
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment