summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2020-09-16 15:21:35 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2020-09-16 17:17:23 +0000
commit77cba3cc758ac6141abbf1297de8bd2df7083bbd (patch)
tree0e93e5d6ed8fa8057bdaf837b5404c95ec3f4b8b
parent52d2c0c3af51b9da9e20cfe6b10d72b816ddb7af (diff)
Add andw for memory to x86 assembler.
Test: assembler_x86_test Change-Id: I5866557f9498f6e5f5713fff2ce58c70e47bd74b
-rw-r--r--compiler/utils/x86/assembler_x86.cc8
-rw-r--r--compiler/utils/x86/assembler_x86.h1
-rw-r--r--compiler/utils/x86/assembler_x86_test.cc4
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");
}