summaryrefslogtreecommitdiff
path: root/test/082-inline-execute/src/Main.java
diff options
context:
space:
mode:
author Artem Serov <artem.serov@linaro.org> 2020-08-27 16:26:17 +0100
committer Vladimir Marko <vmarko@google.com> 2020-09-25 09:16:33 +0000
commita3bd4ec050e10fbfb6df0fe024bc6f3851bcc326 (patch)
tree8a373f87b05b3580f564bd8561bf0dd4ebb9161e /test/082-inline-execute/src/Main.java
parentb0f405e1482df602fc57ee2ed4434456c4dc2555 (diff)
Introduce Long.divideUnsigned() intrinsic on ARM64.
Extends the 082-inline-execute test and reorders divideUnsigned intrinsic code before VarHandle code. Test: 082-inline-execute. Test: testrunner.py --target --optimizing --64 Bug: 156736938 Change-Id: I8acf3db184da30640aff36cf02570ae0c6d2b88c
Diffstat (limited to 'test/082-inline-execute/src/Main.java')
-rw-r--r--test/082-inline-execute/src/Main.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/082-inline-execute/src/Main.java b/test/082-inline-execute/src/Main.java
index b565985ea7..5597947cfc 100644
--- a/test/082-inline-execute/src/Main.java
+++ b/test/082-inline-execute/src/Main.java
@@ -83,6 +83,7 @@ public class Main {
test_Memory_pokeInt();
test_Memory_pokeLong();
test_Integer_divideUnsigned();
+ test_Long_divideUnsigned();
test_Integer_numberOfTrailingZeros();
test_Long_numberOfTrailingZeros();
test_Integer_rotateRight();
@@ -1402,6 +1403,40 @@ public class Main {
}
}
+
+ private static final long BIG_LONG_VALUE = 739287620162442240L;
+
+ public static void test_Long_divideUnsigned() {
+ Assert.assertEquals(Long.divideUnsigned(100L, 10L), 10L);
+ Assert.assertEquals(Long.divideUnsigned(100L, 1L), 100L);
+ Assert.assertEquals(Long.divideUnsigned(1024L, 128L), 8L);
+ Assert.assertEquals(Long.divideUnsigned(12345678L, 264L), 46763L);
+ Assert.assertEquals(Long.divideUnsigned(13L, 5L), 2L);
+ Assert.assertEquals(Long.divideUnsigned(-2L, 2L), Long.MAX_VALUE);
+ Assert.assertEquals(Long.divideUnsigned(-1L, 2L), Long.MAX_VALUE);
+ Assert.assertEquals(Long.divideUnsigned(100000L, -1L), 0L);
+ Assert.assertEquals(Long.divideUnsigned(Long.MAX_VALUE, -1L), 0L);
+ Assert.assertEquals(Long.divideUnsigned(-2L, -1L), 0L);
+ Assert.assertEquals(Long.divideUnsigned(-1L, -2L), 1L);
+ Assert.assertEquals(Long.divideUnsigned(-173448L, 13L), 1418980313362259859L);
+ Assert.assertEquals(Long.divideUnsigned(Long.MIN_VALUE, 2L), (1L << 62));
+ Assert.assertEquals(Long.divideUnsigned(-1L, Long.MIN_VALUE), 1L);
+ Assert.assertEquals(Long.divideUnsigned(Long.MAX_VALUE, Long.MIN_VALUE), 0L);
+ Assert.assertEquals(Long.divideUnsigned(Long.MIN_VALUE, Long.MAX_VALUE), 1L);
+ Assert.assertEquals(Long.divideUnsigned(Long.MAX_VALUE, 1L), Long.MAX_VALUE);
+ Assert.assertEquals(Long.divideUnsigned(Long.MIN_VALUE, 1L), Long.MIN_VALUE);
+ Assert.assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, BIG_LONG_VALUE), 1L);
+ Assert.assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 1L), BIG_LONG_VALUE);
+ Assert.assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 1024L), 721960566564885L);
+ Assert.assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 0x1FFFFFFFFL), 86064406L);
+
+ try {
+ Long.divideUnsigned(1L, 0L);
+ Assert.fail("Unreachable");
+ } catch (ArithmeticException expected) {
+ }
+ }
+
public static void test_Integer_numberOfLeadingZeros() {
Assert.assertEquals(Integer.numberOfLeadingZeros(0), Integer.SIZE);
Assert.assertEquals(Integer.numberOfLeadingZeros(1), Integer.SIZE - 1);