RFR 8233500: Shenandoah: Shenandoah load barrier should save registers before calling keep alive barrier on x86
Zhengyu Gu
zgu at redhat.com
Tue Nov 5 12:50:11 UTC 2019
On 11/4/19 1:39 PM, Aleksey Shipilev wrote:
> On 11/4/19 7:34 PM, Zhengyu Gu wrote:
>>> SATB handling is similar to G1 is doing, where's the similar code in G1? The patch adds save/restore
>>> at in SBSA::load_at, but there is a similar block in SBSA::store_at, why it is not needed there?
>>
>> Because we do self-fixing in LRB and have to reshuffle registers.
>
> Okay. So AArch64 does enter()/leave(), why x86 needs the entire IU_state pushed/popped?
>
> My concern is that pushing/popping the entire state explodes code size (we don't care about
> performance much, but we do care about hitting the stub boundaries), and probably hides some bugs
> with register shuffles.
>
push_IU_state()/pop_IU_state(), each adds 3 instructions on x86_64, 2 on
x86_32.
void MacroAssembler::push_IU_state() {
// Push flags first because pusha kills them
pushf();
// Make sure rsp stays 16-byte aligned
LP64_ONLY(subq(rsp, 8));
pusha();
}
void MacroAssembler::pop_IU_state() {
popa();
LP64_ONLY(addq(rsp, 8));
popf();
}
-Zhengyu
More information about the hotspot-gc-dev
mailing list