diff options
author | 2020-08-27 16:26:17 +0100 | |
---|---|---|
committer | 2020-09-25 09:16:33 +0000 | |
commit | a3bd4ec050e10fbfb6df0fe024bc6f3851bcc326 (patch) | |
tree | 8a373f87b05b3580f564bd8561bf0dd4ebb9161e /test/082-inline-execute/src/Main.java | |
parent | b0f405e1482df602fc57ee2ed4434456c4dc2555 (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.java | 35 |
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); |