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