summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/utils/x86/assembler_x86_test.cc16
-rw-r--r--compiler/utils/x86_64/assembler_x86_64.cc16
-rw-r--r--compiler/utils/x86_64/assembler_x86_64.h2
-rw-r--r--compiler/utils/x86_64/assembler_x86_64_test.cc16
-rw-r--r--test/082-inline-execute/src/Main.java5
5 files changed, 52 insertions, 3 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");
}
diff --git a/test/082-inline-execute/src/Main.java b/test/082-inline-execute/src/Main.java
index 81afee1caf..338a3ddf00 100644
--- a/test/082-inline-execute/src/Main.java
+++ b/test/082-inline-execute/src/Main.java
@@ -1396,10 +1396,9 @@ public class Main {
try {
Integer.divideUnsigned(1, 0);
- } catch (ArithmeticException e) {
- return;
+ Assert.fail("Unreachable");
+ } catch (ArithmeticException expected) {
}
- Assert.fail("Unreachable");
}
public static void test_Integer_numberOfLeadingZeros() {