diff options
author | 2022-02-11 18:01:22 +0530 | |
---|---|---|
committer | 2022-02-14 11:07:59 +0000 | |
commit | 927a996d99df01bbe052965ff6c746f8727db046 (patch) | |
tree | 1eb89189132ad1e8b14e54d1005e3744bf0e6f51 | |
parent | 3bd485822201efe935173c769a84ae7be3b14928 (diff) |
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
-rw-r--r-- | compiler/utils/x86/assembler_x86.cc | 5 | ||||
-rw-r--r-- | compiler/utils/x86/assembler_x86.h | 1 | ||||
-rw-r--r-- | compiler/utils/x86/assembler_x86_test.cc | 6 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.cc | 11 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.h | 2 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64_test.cc | 12 |
6 files changed, 37 insertions, 0 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index 4b64e92136..861b27e6af 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -3735,6 +3735,11 @@ void X86Assembler::rep_movsw() { 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 dc2427d9d9..c346ba9235 100644 --- a/compiler/utils/x86/assembler_x86.h +++ b/compiler/utils/x86/assembler_x86.h @@ -871,6 +871,7 @@ class X86Assembler final : public Assembler { 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 5db2b65179..89c73c0ade 100644 --- a/compiler/utils/x86/assembler_x86_test.cc +++ b/compiler/utils/x86/assembler_x86_test.cc @@ -464,6 +464,12 @@ TEST_F(AssemblerX86Test, RepMovsw) { 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"); } diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index 966d9e4e7e..21a44810ba 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -4981,6 +4981,17 @@ void X86_64Assembler::rep_movsw() { EmitUint8(0xA5); } +void X86_64Assembler::rep_movsb() { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF3); + EmitUint8(0xA4); +} + +void X86_64Assembler::rep_movsl() { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitUint8(0xF3); + EmitUint8(0xA5); +} X86_64Assembler* X86_64Assembler::lock() { AssemblerBuffer::EnsureCapacity ensured(&buffer_); diff --git a/compiler/utils/x86_64/assembler_x86_64.h b/compiler/utils/x86_64/assembler_x86_64.h index 7d61500d07..ea944c200e 100644 --- a/compiler/utils/x86_64/assembler_x86_64.h +++ b/compiler/utils/x86_64/assembler_x86_64.h @@ -981,6 +981,8 @@ class X86_64Assembler final : public Assembler { void repe_cmpsl(); void repe_cmpsq(); void rep_movsw(); + void rep_movsb(); + void rep_movsl(); void ud2(); diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index 53febca629..f7e890d112 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -1226,12 +1226,24 @@ TEST_F(AssemblerX86_64Test, RepneScasw) { DriverStr(expected, "repne_scasw"); } +TEST_F(AssemblerX86_64Test, RepMovsb) { + GetAssembler()->rep_movsb(); + const char* expected = "rep movsb\n"; + DriverStr(expected, "rep_movsb"); +} + TEST_F(AssemblerX86_64Test, RepMovsw) { GetAssembler()->rep_movsw(); const char* expected = "rep movsw\n"; DriverStr(expected, "rep_movsw"); } +TEST_F(AssemblerX86_64Test, RepMovsl) { + GetAssembler()->rep_movsl(); + const char* expected = "rep movsl\n"; + DriverStr(expected, "rep_movsl"); +} + TEST_F(AssemblerX86_64Test, Movsxd) { DriverStr(RepeatRr(&x86_64::X86_64Assembler::movsxd, "movslq %{reg2}, %{reg1}"), "movsxd"); } |