[JAVA PATCH] Builtin support for popcount* and bswap* functions

Jeff Law law@redhat.com
Thu May 19 18:09:00 GMT 2016


On 02/22/2016 11:13 AM, roger@nextmovesoftware.com wrote:
>
> The following patch provides builtin support for byte swapping and bit counting.
> On suitable hardware, these generate the x86 popcount instructions, as also
> generated by the SUN HotSpot JIT/JVM for these method calls.
>
> java.lang.Integer.bitCount -> __builtin_popcount
> java.lang.Long.bitCount -> __builtin_popcountl
>
> java.lang.Short.reverseBytes -> __builtin_bswap16
> java.lang.Integer.reverseBytes -> __builtin_bswap32
> java.lang.Long.reverseBytes -> __builtin_bswap64
>
> New test cases have been added to libjava to double check nothing breaks.
> Whist I was there I noticed that the math builtins (many of which I added support for
> back in 2003/2004) weren't marked as ECF_LEAF, indicating that they don't/can't
> invoke any user specified functions.   This has also been fixed in the patch below.
>
> The following patch has been tested on x86_64-pc-linux-gnu with a full make bootstrap
> and make check with no new failures/regressions.
>
> Ok for stage1 once it reopens?
>
> Cheers,
>
> Roger
> --
> Roger Sayle, Ph.D.
> CEO and founder
> NextMove Software Limited
> Registered in England No. 07588305
> Registered Office: Innovation Centre (Unit 23), Cambridge Science Park, Cambridge CB4 0EY
>
> 2016-02-21  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.
OK for the trunk.

Thanks,
Jeff



More information about the Gcc-patches mailing list