RFR(L) 8055494: Add C2 x86 intrinsic for BigInteger::multiplyToLen() method
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