RFR(M): 8213528: fp registers should not need to be saved around a CallLeafNoFP

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu Nov 15 20:29:42 UTC 2018



On 15/11/2018 12:09, Roman Kennke wrote:
> Including zgc-dev because I believe the discussion may be relevant there
> too. Looking at the .ad file, I see Z barrier decls like this:
> 
> https://paste.fedoraproject.org/paste/niLRXUpUj81n8ML9MSM0yg
> 
> The only purpose of this exercise seems to be to tell C2 that this stuff
> (may) kill the xmm registers, and then call out to runtime. What Roland
> proposed seems an easier way? I.e. instead of generating all that stuff,
> emit a CallLeaf to call out to runtime directly?
> 
> Maybe even do what Shenandoah does and call with CallLeafNoFP to a stub,
> which in turn would care to save/restore all those registers. This way,
> the Z barriers wouldn't inhibit XMM spilling.

It looks like loadBarrierSlowRegXmmAndYmm does slightly different thing: 
it kills XMM regs, but leaves GP registers intact. The stub then needs 
to care only about GP registers if it decides to call into the VM.

CallLeaf/CallLeafNoFP obey platform ABI (modulo FP registers) and hence 
split GP registers into caller-/callee-saved classes.

Best regards,
Vladimir Ivanov

> 
> It looks to me like ZGC could live without any of those .ad declarations.
> 
> Maybe I am missing something though.
> 
> Roman
> 
>> Yes, like this.
>>
>> callnode.cpp - add space after node's name output. May be print
>> preserves_fp_registers before name as in machnode.cpp for consistency.
>>
>> Thanks,
>> Vladimir
>>
>> On 11/15/18 2:30 AM, Roland Westrelin wrote:
>>>
>>>> Sounds good. Is lcm.cpp only place where we do such check (in
>>>> addition to code in .ad files)?
>>>
>>> What about this?
>>>
>>> http://cr.openjdk.java.net/~roland/8213528/webrev.01/
>>>
>>> Roland.
>>>
> 


More information about the hotspot-compiler-dev mailing list