x86/x86_64: Add rep_movs instructions
x86: This patch adds rep_movsb with tests
x86_64: This patch adds rep_movsb, rep_movsl with tests
Test: $ANDROID_HOST_OUT/nativetest{64}/art_compiler_host_tests/art_compiler_host_tests
Signed-off-by: Shalini Salomi Bodapati <shalini.salomi.bodapati@intel.com>
Change-Id: Ie49434c88e690007bdb7e773f746eae66b197574
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc
index 4b64e92..861b27e 100644
--- a/compiler/utils/x86/assembler_x86.cc
+++ b/compiler/utils/x86/assembler_x86.cc
@@ -3735,6 +3735,11 @@
EmitUint8(0xA5);
}
+void X86Assembler::rep_movsl() {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0xF3);
+ EmitUint8(0xA5);
+}
X86Assembler* X86Assembler::lock() {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
diff --git a/compiler/utils/x86/assembler_x86.h b/compiler/utils/x86/assembler_x86.h
index dc2427d..c346ba9 100644
--- a/compiler/utils/x86/assembler_x86.h
+++ b/compiler/utils/x86/assembler_x86.h
@@ -871,6 +871,7 @@
void repe_cmpsw();
void repe_cmpsl();
void rep_movsb();
+ void rep_movsl();
void rep_movsw();
X86Assembler* lock();
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc
index 5db2b65..89c73c0 100644
--- a/compiler/utils/x86/assembler_x86_test.cc
+++ b/compiler/utils/x86/assembler_x86_test.cc
@@ -464,6 +464,12 @@
DriverStr(expected, "rep_movsw");
}
+TEST_F(AssemblerX86Test, RepMovsl) {
+ GetAssembler()->rep_movsl();
+ const char* expected = "rep movsl\n";
+ DriverStr(expected, "rep_movsl");
+}
+
TEST_F(AssemblerX86Test, Blsmask) {
DriverStr(RepeatRR(&x86::X86Assembler::blsmsk, "blsmsk %{reg2}, %{reg1}"), "blsmsk");
}