[aarch64-port-dev ] aarch64_get_thread_helper assumptions
Anton Kozlov
akozlov at azul.com
Sun Jan 24 16:42:25 UTC 2021
Hi, Bernhard, Ludovic,
following Andrew's comment on https://github.com/openjdk/jdk/pull/2200#discussion_r563131940. Could you describe why there is no volatile registers saving on Windows? It's a usual C function that can clobber r0-r17, so shouldn't these be saved?
I would like make a change like below, or do I miss something?
Thanks,
Anton
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
@@ -5265,10 +5265,14 @@ void MacroAssembler::char_array_compress(Register src, Register dst, Register le
// by the call to JavaThread::aarch64_get_thread_helper() or, indeed,
// the call setup code.
//
-// aarch64_get_thread_helper() clobbers only r0, r1, and flags.
+// On Linux, aarch64_get_thread_helper() clobbers only r0, r1, and flags.
+// On Windows and macOS, the helper is a usual C function.
//
void MacroAssembler::get_thread(Register dst) {
- RegSet saved_regs = RegSet::range(r0, r1) + BSD_ONLY(RegSet::range(r2, r17)) + lr - dst;
+ RegSet saved_regs =
+ LINUX_ONLY(RegSet::range(r0, r1) + lr - dst)
+ NOT_LINUX (RegSet::range(r0, r17) + lr - dst);
+
push(saved_regs, sp);
mov(lr, CAST_FROM_FN_PTR(address, JavaThread::aarch64_get_thread_helper));
More information about the aarch64-port-dev
mailing list