RFR(L) 8055494: Add C2 x86 intrinsic for BigInteger::multiplyToLen() method

Vladimir Kozlov vladimir.kozlov at oracle.com
Sat Aug 30 03:02:17 UTC 2014


Add new C2 intrinsic for BigInteger::multiplyToLen() on x86 in 64-bit 
VM. Use unsigned multiply instruction which produces 128 bit result in 
registers pair. It doubles performance in microbenchmark and gives about 
4-5% improvement in jvm2008.crypto. It has code which will run on old 
cpus and additional specialized code which use BMI2 instructions (allow 
to reduce number of instructions). Also it has a special code for next 
processor to use new ADX instructions.
BMI instructions require VEX encoding which we generate only with AVX so 
I added additional check for UseBMI1Instructions and UseBMI2Instructions 
flags settings in vm_version_x86.cpp.

Added regression test with flags which requires 8056964 and 8055286 
changes. Flags disable the intrinsic in base_multiply() method and 
enable in new_multiply() to verify correctness.

Tested jtreg, JPRT.


More information about the hotspot-compiler-dev mailing list