diff options
author | 2020-09-16 15:21:35 +0100 | |
---|---|---|
committer | 2020-09-16 17:17:23 +0000 | |
commit | 77cba3cc758ac6141abbf1297de8bd2df7083bbd (patch) | |
tree | 0e93e5d6ed8fa8057bdaf837b5404c95ec3f4b8b | |
parent | 52d2c0c3af51b9da9e20cfe6b10d72b816ddb7af (diff) |
Add andw for memory to x86 assembler.
Test: assembler_x86_test
Change-Id: I5866557f9498f6e5f5713fff2ce58c70e47bd74b
-rw-r--r-- | compiler/utils/x86/assembler_x86.cc | 8 | ||||
-rw-r--r-- | compiler/utils/x86/assembler_x86.h | 1 | ||||
-rw-r--r-- | compiler/utils/x86/assembler_x86_test.cc | 4 |
3 files changed, 13 insertions, 0 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index 981894f321..c8ea229992 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -3039,6 +3039,14 @@ void X86Assembler::andl(Register dst, const Immediate& imm) { } +void X86Assembler::andw(const Address& address, const Immediate& imm) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + CHECK(imm.is_uint16() || imm.is_int16()) << imm.value(); + EmitOperandSizeOverride(); + EmitComplex(4, address, imm, /* is_16_op= */ true); +} + + void X86Assembler::orl(Register dst, Register src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); EmitUint8(0x0B); diff --git a/compiler/utils/x86/assembler_x86.h b/compiler/utils/x86/assembler_x86.h index ba928672df..05345a7177 100644 --- a/compiler/utils/x86/assembler_x86.h +++ b/compiler/utils/x86/assembler_x86.h @@ -694,6 +694,7 @@ class X86Assembler final : public Assembler { void andl(Register dst, const Immediate& imm); void andl(Register dst, Register src); void andl(Register dst, const Address& address); + void andw(const Address& address, const Immediate& imm); void orl(Register dst, const Immediate& imm); void orl(Register dst, Register src); diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc index 305f3c451e..d1c2cbe3cb 100644 --- a/compiler/utils/x86/assembler_x86_test.cc +++ b/compiler/utils/x86/assembler_x86_test.cc @@ -305,6 +305,10 @@ TEST_F(AssemblerX86Test, Addw) { DriverStr(RepeatAI(&x86::X86Assembler::addw, /*imm_bytes*/ 2U, "addw ${imm}, {mem}"), "addw"); } +TEST_F(AssemblerX86Test, Andw) { + DriverStr(RepeatAI(&x86::X86Assembler::andw, /*imm_bytes*/ 2U, "andw ${imm}, {mem}"), "andw"); +} + TEST_F(AssemblerX86Test, MovwStore) { DriverStr(RepeatAr(&x86::X86Assembler::movw, "movw %{reg}, {mem}"), "movw-store"); } |