diff options
author | 2020-07-09 10:58:12 +0100 | |
---|---|---|
committer | 2020-07-09 10:58:12 +0100 | |
commit | be7fe3b5466e10c4c49f027f10a801e1a4a9216c (patch) | |
tree | e8946fd568d6ce71114e0d3d75c6b329437dea4c /compiler/utils | |
parent | dc787f488ce151478af1149c04a10b21b2b9fc6e (diff) |
Add some x86/x86-64 assembler tests.
Also add divq() and divl() to x86-64 assembler and clean up
a test. This is a follow-up to
https://android-review.googlesource.com/1355865 .
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing -t 082-inline-execute
Bug: 156736938
Change-Id: Iade33a2250cea481249f6b976bc53c86663cb901
Diffstat (limited to 'compiler/utils')
-rw-r--r-- | compiler/utils/x86/assembler_x86_test.cc | 16 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.cc | 16 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.h | 2 | ||||
-rw-r--r-- | compiler/utils/x86_64/assembler_x86_64_test.cc | 16 |
4 files changed, 50 insertions, 0 deletions
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc index 9253730797..baef254716 100644 --- a/compiler/utils/x86/assembler_x86_test.cc +++ b/compiler/utils/x86/assembler_x86_test.cc @@ -1230,4 +1230,20 @@ TEST_F(AssemblerX86Test, Cmpw) { DriverStr(RepeatAI(&x86::X86Assembler::cmpw, /*imm_bytes*/ 2U, "cmpw ${imm}, {mem}"), "cmpw"); } +TEST_F(AssemblerX86Test, Idiv) { + DriverStr(RepeatR(&x86::X86Assembler::idivl, "idivl %{reg}"), "idivl"); +} + +TEST_F(AssemblerX86Test, Div) { + DriverStr(RepeatR(&x86::X86Assembler::divl, "divl %{reg}"), "divl"); +} + +TEST_F(AssemblerX86Test, Negl) { + DriverStr(RepeatR(&x86::X86Assembler::negl, "negl %{reg}"), "negl"); +} + +TEST_F(AssemblerX86Test, Notl) { + DriverStr(RepeatR(&x86::X86Assembler::notl, "notl %{reg}"), "notl"); +} + } // namespace art diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index 2c5dd9e949..ea4172bf8f 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -4374,6 +4374,22 @@ void X86_64Assembler::idivq(CpuRegister reg) { } +void X86_64Assembler::divl(CpuRegister reg) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitOptionalRex32(reg); + EmitUint8(0xF7); + EmitUint8(0xF0 | reg.LowBits()); +} + + +void X86_64Assembler::divq(CpuRegister reg) { + AssemblerBuffer::EnsureCapacity ensured(&buffer_); + EmitRex64(reg); + EmitUint8(0xF7); + EmitUint8(0xF0 | reg.LowBits()); +} + + void X86_64Assembler::imull(CpuRegister dst, CpuRegister src) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); EmitOptionalRex32(dst, src); diff --git a/compiler/utils/x86_64/assembler_x86_64.h b/compiler/utils/x86_64/assembler_x86_64.h index 70072d9224..64603ee750 100644 --- a/compiler/utils/x86_64/assembler_x86_64.h +++ b/compiler/utils/x86_64/assembler_x86_64.h @@ -782,6 +782,8 @@ class X86_64Assembler final : public Assembler { void idivl(CpuRegister reg); void idivq(CpuRegister reg); + void divl(CpuRegister reg); + void divq(CpuRegister reg); void imull(CpuRegister dst, CpuRegister src); void imull(CpuRegister reg, const Immediate& imm); diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index 411d64bd50..c4ca716149 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -868,6 +868,22 @@ TEST_F(AssemblerX86_64Test, Testl) { DriverStr(Repeatrr(&x86_64::X86_64Assembler::testl, "testl %{reg1}, %{reg2}"), "testl"); } +TEST_F(AssemblerX86_64Test, Idivq) { + DriverStr(RepeatR(&x86_64::X86_64Assembler::idivq, "idivq %{reg}"), "idivq"); +} + +TEST_F(AssemblerX86_64Test, Idivl) { + DriverStr(Repeatr(&x86_64::X86_64Assembler::idivl, "idivl %{reg}"), "idivl"); +} + +TEST_F(AssemblerX86_64Test, Divq) { + DriverStr(RepeatR(&x86_64::X86_64Assembler::divq, "divq %{reg}"), "divq"); +} + +TEST_F(AssemblerX86_64Test, Divl) { + DriverStr(Repeatr(&x86_64::X86_64Assembler::divl, "divl %{reg}"), "divl"); +} + TEST_F(AssemblerX86_64Test, Negq) { DriverStr(RepeatR(&x86_64::X86_64Assembler::negq, "negq %{reg}"), "negq"); } |