RFR 8222243 [lworld] Calling convention - C2 to C1 (fixed point params only)
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Apr 10 10:50:14 UTC 2019
Hi Ioi,
this looks good to me.
Thanks,
Tobias
On 10.04.19 07:56, Ioi Lam wrote:
> https://bugs.openjdk.java.net/browse/JDK-8222243
> http://cr.openjdk.java.net/~iklam/valhalla/8222243-c2-calls-c1-fixed-point-params.v01/
>
> Implement Method::verified_entry and Method::verified_value_ro_entry for C1-compiled methods. This
> allows C2 to call C1 with scalarized parameters.
>
> In this RFR, we only support passing of fixed point parameters (boolean, byte, char, short, int and
> long), along with value objects that contain fields of these types. Support for other types of
> parameters/fields will be implemented in subsequent steps.
>
> The C1 code uses the same functionality as the code in sharedRuntime.cpp that handles the signature
> of the different compiled entries. Hence, I refactored the code into a new class
> CompiledEntrySignature.
>
> The code is littered with lots of FIXME (no support for floats, oops, GC, etc). I intend to fix
> those soon.
>
> Thanks
> - Ioi
>
> --------------------------------------------------
>
> Example of parameter shuffling in C1 verified_entry
>
> static void test(int a, Point p, int b) {...}
>
> C2 passes outgoing parameters as
>
> # parm0: rsi = int a
> # parm1: rdx = int p.x
> # parm2: rcx = int p.y
> # parm3: r8 = int b
>
>
> C1 expects incoming parameters as
>
> # parm0: rsi = int a
> # parm1: rdx = Point p
> # parm2: rcx = int b
>
>
> The C1 Verified Entry Point will pack the scalarized parameters (p.x,
> p.y) back into a Point reference, and shuffle the rest of the params:
>
> 0: push %rbp
> 1: sub $0x30,%rsp
> 5: mov $0x7f0b154f9448,%rbx ; Method test(IQPoint;I)
> 15: callq 0x00007f0b4c7d2cc0 ; {runtime_call buffer_value_args}
> ; no need to shuffle rsi (a)
> 20: mov 0x10(%rax),%r11d
> 24: shl $0x3,%r11 ; r11 = p
> 28: mov %edx,0x10(%r11) ; set p.x
> 32: mov %ecx,0x14(%r11) ; set p.y
> 36: mov %r11,%rdx ; rdx = p
> 39: mov %r8,%rcx ; rcx = a
> 42: pop %rbp
> 43: add $0x30,%rsp
> 47: jmpq verified_value_entry
>
>
>
>
More information about the valhalla-dev
mailing list