Adding an intrinsic to the interpreter

Paul Sandoz paul.sandoz at
Mon Sep 14 10:15:14 UTC 2015


Any pointers/guidance for adding an intrinsic to the interpreter would be much appreciated. Initially a quick hack might be sufficient for verification purposes.

The context is adding array comparison and mismatch methods:

This approach is designed such that one method [1], vectorizedMismatch, can be made intrinsic in C2 (e.g. to leverage AVX instructions on x86) and then other functionality is built on top of that. That method utilises Unsafe.getLongUnaligned to view array components as long values.

When run in the interpreter a modified Array.equals can be 3x to 20x slower than the unmodified version (depending on the array component type). Some slow down is acceptable but perhaps not quite that much. I suspect that is due to the overhead of making a native call to Unsafe.getLong which is wrapped in Unsafe.getLongUnaligned.

How difficult would it be to add an interpreter intrinsic supporting getLong/Unaligned? perhaps it does not need to be asm-based if one can defer to a C++ function e.g. somehow wire up to bytes.cpp functionality for the address of base + offset?


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <>

More information about the hotspot-compiler-dev mailing list