aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorRoger Sayle <roger@nextmovesoftware.com>2016-05-31 11:30:56 +0000
committerRoger Sayle <roger@nextmovesoftware.com>2016-05-31 11:30:56 +0000
commitc6f511d6b14d6c1da163aab51dea72e06b367097 (patch)
treee4795973441e52b0a0b748fb08728e4962eb277f /libjava
parent953e0b2c0e75174dd08c1c05d8a7f191d3035bba (diff)
2016-05-31 Roger Sayle <roger@nextmovesoftware.com>
gcc/java: * builtins.c (java_builtins): Use popcount* and bswap* builtins to implement bitCount() and reverseBytes() methods in java.lang.Integer and friends. (initialize_builtins): Annotate math builtins with ECF_LEAF. Call define_builtin for the new popcount* and bswap* builtins. libjava: * testsuite/libjava.lang/BuiltinBitCount.java: New test case. * testsuite/libjava.lang/BuiltinReverseBytes.java: Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@236919 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinBitCount.jarbin0 -> 1033 bytes
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinBitCount.java51
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinBitCount.out0
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinReverseBytes.jarbin0 -> 1126 bytes
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinReverseBytes.java62
-rw-r--r--libjava/testsuite/libjava.lang/BuiltinReverseBytes.out0
7 files changed, 118 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 596fc0529ed..0a2830555d3 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-31 Roger Sayle <roger@nextmovesoftware.com>
+
+ * testsuite/libjava.lang/BuiltinBitCount.java: New test case.
+ * testsuite/libjava.lang/BuiltinReverseBytes.java: Likewise.
+
2016-04-30 Oleg Endo <olegendo@gcc.gnu.org>
* classpath/config.guess: Revert r235676.
diff --git a/libjava/testsuite/libjava.lang/BuiltinBitCount.jar b/libjava/testsuite/libjava.lang/BuiltinBitCount.jar
new file mode 100644
index 00000000000..0f6591c1e27
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinBitCount.jar
Binary files differ
diff --git a/libjava/testsuite/libjava.lang/BuiltinBitCount.java b/libjava/testsuite/libjava.lang/BuiltinBitCount.java
new file mode 100644
index 00000000000..bcafd310a21
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinBitCount.java
@@ -0,0 +1,51 @@
+class BuiltinBitCount
+{
+ public static int popcount(int x)
+ {
+ return Integer.bitCount(x);
+ }
+
+ public static int popcountl(long x)
+ {
+ return Long.bitCount(x);
+ }
+
+ public static void main(String[] args)
+ {
+ if (Integer.bitCount(0) != 0)
+ throw new Error();
+ if (Integer.bitCount(8) != 1)
+ throw new Error();
+ if (Integer.bitCount(123456) != 6)
+ throw new Error();
+ if (Integer.bitCount(-1) != 32)
+ throw new Error();
+
+ if (Long.bitCount(0) != 0)
+ throw new Error();
+ if (Long.bitCount(8) != 1)
+ throw new Error();
+ if (Long.bitCount(123456) != 6)
+ throw new Error();
+ if (Long.bitCount(-1) != 64)
+ throw new Error();
+
+ if (popcount(0) != 0)
+ throw new Error();
+ if (popcount(8) != 1)
+ throw new Error();
+ if (popcount(123456) != 6)
+ throw new Error();
+ if (popcount(-1) != 32)
+ throw new Error();
+
+ if (popcountl(0) != 0)
+ throw new Error();
+ if (popcountl(8) != 1)
+ throw new Error();
+ if (popcountl(123456) != 6)
+ throw new Error();
+ if (popcountl(-1) != 64)
+ throw new Error();
+ }
+}
diff --git a/libjava/testsuite/libjava.lang/BuiltinBitCount.out b/libjava/testsuite/libjava.lang/BuiltinBitCount.out
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinBitCount.out
diff --git a/libjava/testsuite/libjava.lang/BuiltinReverseBytes.jar b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.jar
new file mode 100644
index 00000000000..283a178eedb
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.jar
Binary files differ
diff --git a/libjava/testsuite/libjava.lang/BuiltinReverseBytes.java b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.java
new file mode 100644
index 00000000000..0d2e332081d
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.java
@@ -0,0 +1,62 @@
+class BuiltinReverseBytes
+{
+ public static short bswap16(short x)
+ {
+ return Short.reverseBytes(x);
+ }
+
+ public static int bswap32(int x)
+ {
+ return Integer.reverseBytes(x);
+ }
+
+ public static long bswap64(long x)
+ {
+ return Long.reverseBytes(x);
+ }
+
+ public static void main(String[] args)
+ {
+ if (Short.reverseBytes((short)0) != (short)0)
+ throw new Error();
+ if (Short.reverseBytes((short)0x1234) != (short)0x3412)
+ throw new Error();
+ if (Short.reverseBytes((short)-1) != (short)-1)
+ throw new Error();
+
+ if (Integer.reverseBytes(0) != 0)
+ throw new Error();
+ if (Integer.reverseBytes(0x12345678) != 0x78563412)
+ throw new Error();
+ if (Integer.reverseBytes(-1) != -1)
+ throw new Error();
+
+ if (Long.reverseBytes(0L) != 0L)
+ throw new Error();
+ if (Long.reverseBytes(0x123456789abcde0fL) != 0x0fdebc9a78563412L)
+ throw new Error();
+ if (Long.reverseBytes(-1L) != -1L)
+ throw new Error();
+
+ if (bswap16((short)0) != (short)0)
+ throw new Error();
+ if (bswap16((short)0x1234) != (short)0x3412)
+ throw new Error();
+ if (bswap16((short)-1) != (short)-1)
+ throw new Error();
+
+ if (bswap32(0) != 0)
+ throw new Error();
+ if (bswap32(0x12345678) != 0x78563412)
+ throw new Error();
+ if (bswap32(-1) != -1)
+ throw new Error();
+
+ if (bswap64(0L) != 0L)
+ throw new Error();
+ if (bswap64(0x123456789abcde0fL) != 0x0fdebc9a78563412L)
+ throw new Error();
+ if (bswap64(-1L) != -1L)
+ throw new Error();
+ }
+}
diff --git a/libjava/testsuite/libjava.lang/BuiltinReverseBytes.out b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.out
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/BuiltinReverseBytes.out