RFR 8222384 [lworld] Calling convention - C2 to C1 (floating point params)

Tobias Hartmann tobias.hartmann at oracle.com
Fri Apr 12 12:38:07 UTC 2019


Hi Ioi,

looks good to me. Little typo: "overwrite it now and and".

I wonder if you could use MacroAssembler::move_helper() to avoid code duplication?

Thanks,
Tobias

On 12.04.19 06:58, Ioi Lam wrote:
> https://bugs.openjdk.java.net/browse/JDK-8222384
> http://cr.openjdk.java.net/~iklam/valhalla/8222384-c1-calling-convention-floats.v01/
> 
> This changeset supports floating point parameters (x64 only, i.e., XMM registers). I also fixed an
> issue wheresome registers may be trashed before their contents are shuffled. Here's an example (see
> the rdx register).
> 
> 
> C2 passes outgoing parameters as:
> 
>   # {method} {0x00007fb8593f8420} 'test' '(IQFloatTriplet;I)I' in 'Test'
>   # parm0:    rsi       = int
>   # parm1:    xmm0      = float
>   # parm2:    xmm1      = float
>   # parm3:    xmm2      = float
>   # parm4:    rdx       = int
> 
> 
> C1 expects incoming parameters as:
> 
>   # parm0:    rsi       = int
>   # parm1:    rdx:rdx   = 'FloatTriplet'
>   # parm2:    rcx       = int
> 
> shuffling code:
> 
>      20: mov    0x10(%rax),%r11d  ;r11 = buffered FloatTriplet obj
>      24: shl    $0x3,%r11
>      28: vmovss %xmm0,0x10(%r11)
>      34: vmovss %xmm1,0x14(%r11)
>      40: vmovss %xmm2,0x18(%r11)
>      46: push   %r11              ; can't write to rdx yet -> save it
>      48: mov    %rdx,%rcx         ; rdx is now shuffled
>      51: pop    %rdx              ; now update rdx
> 
> Thanks
> - Ioi


More information about the valhalla-dev mailing list