The adrp() (address of page) assembler macro can reach anywhere in the 48-bit AArch64 address space. However, byte_map_base is not necessarily an address: it might even wrap around the address space so that it is a negative 64-bit constant. In that case, we should not use ADRP to form its address.
While investigating this bug we discovered that the code stubs for C1's G1 pre- and post-barriers push the incorrect set of registers. We must include the call-clobbered vector registers too; they probably won't be used by the native runtime, but the ABI says that they may be so we must save them.
While investigating this bug we discovered that the code stubs for C1's G1 pre- and post-barriers push the incorrect set of registers. We must include the call-clobbered vector registers too; they probably won't be used by the native runtime, but the ABI says that they may be so we must save them.