[aarch64-port-dev ] Field too big for insn issue with Shenandoah
Roman Kennke
rkennke at redhat.com
Mon Sep 10 15:11:27 UTC 2018
Hello AArch64-devs,
In current Shenandoah repo I am looking at an issue that seems to be an
upstream aarch64 bug. I hope you can help me a little bit.
When building with Shenandoah and trying to run anything with C1, I am
getting this:
# Internal Error
(/home/rkennke/src/shenandoah-jdk/src/hotspot/cpu/aarch64/assembler_aarch64.hpp:251),
pid=20187, tid=20319
# guarantee(chk == -1 || chk == 0) failed: Field too big for insn
#
The relevant stacktrace is:
https://paste.fedoraproject.org/paste/83wUZafXsQT2~646LSM6TA
The failure happens because:
1. The float constant doesn't qualify for immediate operand
2. the assembler writes the constant into code, and emits an
InternalAddress to it
3. That address is too far away from the PC, generating too large offset
(393108) and thus trips the assert above.
This only happens when running with Shenandoah. I suspect that the extra
barriers that we emit with Shenandoah make the code too big and the PC
too far away from the constants, but I am not sure.
Does anybody have an idea why that happens and how to possibly fix it?
You can try it by checking out:
http://hg.openjdk.java.net/shenandoah/jdk/
Build fastdebug and run:
CONF=fastdebug LOG=info LANG=C make run-test TEST=tier1_gc_shenandoah
Thanks,
Roman
More information about the aarch64-port-dev
mailing list