public class jdk.internal.foreign.abi.x64.windows.CallArranger
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: jdk.internal.foreign.abi.x64.windows.CallArranger
super_class: java.lang.Object
{
private static final int STACK_SLOT_SIZE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 8
private static final jdk.internal.foreign.abi.ABIDescriptor CWindows;
descriptor: Ljdk/internal/foreign/abi/ABIDescriptor;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=10, locals=0, args_size=0
0: iconst_4
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.rcx:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_1
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.rdx:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_2
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.r8:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_3
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.r9:Ljdk/internal/foreign/abi/VMStorage;
aastore
1: iconst_4
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm0:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_1
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm1:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_2
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm2:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_3
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm3:Ljdk/internal/foreign/abi/VMStorage;
aastore
2: iconst_1
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.rax:Ljdk/internal/foreign/abi/VMStorage;
aastore
3: iconst_1
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm0:Ljdk/internal/foreign/abi/VMStorage;
aastore
4: iconst_0
5: iconst_3
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.rax:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_1
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.r10:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_2
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.r11:Ljdk/internal/foreign/abi/VMStorage;
aastore
6: iconst_2
anewarray jdk.internal.foreign.abi.VMStorage
dup
iconst_0
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm4:Ljdk/internal/foreign/abi/VMStorage;
aastore
dup
iconst_1
getstatic jdk.internal.foreign.abi.x64.X86_64Architecture.xmm5:Ljdk/internal/foreign/abi/VMStorage;
aastore
7: bipush 16
8: bipush 32
9: invokestatic jdk.internal.foreign.abi.x64.X86_64Architecture.abiFor:([Ljdk/internal/foreign/abi/VMStorage;[Ljdk/internal/foreign/abi/VMStorage;[Ljdk/internal/foreign/abi/VMStorage;[Ljdk/internal/foreign/abi/VMStorage;I[Ljdk/internal/foreign/abi/VMStorage;[Ljdk/internal/foreign/abi/VMStorage;II)Ljdk/internal/foreign/abi/ABIDescriptor;
putstatic jdk.internal.foreign.abi.x64.windows.CallArranger.CWindows:Ljdk/internal/foreign/abi/ABIDescriptor;
10: return
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Ljdk/internal/foreign/abi/x64/windows/CallArranger;
public static jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings getBindings(java.lang.invoke.MethodType, jdk.incubator.foreign.FunctionDescriptor, boolean);
descriptor: (Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;Z)Ljdk/internal/foreign/abi/x64/windows/CallArranger$Bindings;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=7, args_size=3
start local 0 start local 1 start local 2 0: aload 0
aload 1
ldc 64
invokestatic jdk.internal.foreign.abi.SharedUtils.checkFunctionTypes:(Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;J)V
1: new jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper
dup
iload 2
invokespecial jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.<init>:(Z)V
astore 3
start local 3 2: aload 1
invokevirtual jdk.incubator.foreign.FunctionDescriptor.returnLayout:()Ljava/util/Optional;
invokestatic jdk.internal.foreign.abi.x64.windows.CallArranger.isInMemoryReturn:(Ljava/util/Optional;)Z
istore 4
start local 4 3: iload 4
ifeq 10
4: ldc Ljdk/incubator/foreign/MemoryAddress;
astore 5
start local 5 5: getstatic jdk.internal.foreign.PlatformLayouts$Win64.C_POINTER:Ljdk/incubator/foreign/ValueLayout;
astore 6
start local 6 6: aload 3
aload 5
aload 6
invokevirtual jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.addArgumentBindings:(Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)V
7: iload 2
ifeq 12
8: aload 3
aload 5
aload 6
invokevirtual jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.setReturnBindings:(Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)V
end local 6 end local 5 9: goto 12
StackMap locals: jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper int
StackMap stack:
10: aload 1
invokevirtual jdk.incubator.foreign.FunctionDescriptor.returnLayout:()Ljava/util/Optional;
invokevirtual java.util.Optional.isPresent:()Z
ifeq 12
11: aload 3
aload 0
invokevirtual java.lang.invoke.MethodType.returnType:()Ljava/lang/Class;
aload 1
invokevirtual jdk.incubator.foreign.FunctionDescriptor.returnLayout:()Ljava/util/Optional;
invokevirtual java.util.Optional.get:()Ljava/lang/Object;
checkcast jdk.incubator.foreign.MemoryLayout
invokevirtual jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.setReturnBindings:(Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)V
12: StackMap locals:
StackMap stack:
iconst_0
istore 5
start local 5 13: goto 16
14: StackMap locals: int
StackMap stack:
aload 3
aload 0
iload 5
invokevirtual java.lang.invoke.MethodType.parameterType:(I)Ljava/lang/Class;
aload 1
invokevirtual jdk.incubator.foreign.FunctionDescriptor.argumentLayouts:()Ljava/util/List;
iload 5
invokeinterface java.util.List.get:(I)Ljava/lang/Object;
checkcast jdk.incubator.foreign.MemoryLayout
invokevirtual jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.addArgumentBindings:(Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)V
15: iinc 5 1
StackMap locals:
StackMap stack:
16: iload 5
aload 0
invokevirtual java.lang.invoke.MethodType.parameterCount:()I
if_icmplt 14
end local 5 17: aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.csb:Ljdk/internal/foreign/abi/CallingSequenceBuilder;
aload 1
invokestatic jdk.internal.foreign.abi.SharedUtils.isTrivial:(Ljdk/incubator/foreign/FunctionDescriptor;)Z
invokevirtual jdk.internal.foreign.abi.CallingSequenceBuilder.setTrivial:(Z)Ljdk/internal/foreign/abi/CallingSequenceBuilder;
pop
18: new jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings
dup
aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper.csb:Ljdk/internal/foreign/abi/CallingSequenceBuilder;
invokevirtual jdk.internal.foreign.abi.CallingSequenceBuilder.build:()Ljdk/internal/foreign/abi/CallingSequence;
iload 4
invokespecial jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings.<init>:(Ljdk/internal/foreign/abi/CallingSequence;Z)V
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 19 0 mt Ljava/lang/invoke/MethodType;
0 19 1 cDesc Ljdk/incubator/foreign/FunctionDescriptor;
0 19 2 forUpcall Z
2 19 3 csb Ljdk/internal/foreign/abi/x64/windows/CallArranger$1CallingSequenceBuilderHelper;
3 19 4 returnInMemory Z
5 9 5 carrier Ljava/lang/Class<*>;
6 9 6 layout Ljdk/incubator/foreign/MemoryLayout;
13 17 5 i I
MethodParameters:
Name Flags
mt
cDesc
forUpcall
public static java.lang.invoke.MethodHandle arrangeDowncall(jdk.incubator.foreign.Addressable, java.lang.invoke.MethodType, jdk.incubator.foreign.FunctionDescriptor);
descriptor: (Ljdk/incubator/foreign/Addressable;Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=5, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
iconst_0
invokestatic jdk.internal.foreign.abi.x64.windows.CallArranger.getBindings:(Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;Z)Ljdk/internal/foreign/abi/x64/windows/CallArranger$Bindings;
astore 3
start local 3 1: new jdk.internal.foreign.abi.ProgrammableInvoker
dup
getstatic jdk.internal.foreign.abi.x64.windows.CallArranger.CWindows:Ljdk/internal/foreign/abi/ABIDescriptor;
aload 0
aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings.callingSequence:Ljdk/internal/foreign/abi/CallingSequence;
invokespecial jdk.internal.foreign.abi.ProgrammableInvoker.<init>:(Ljdk/internal/foreign/abi/ABIDescriptor;Ljdk/incubator/foreign/Addressable;Ljdk/internal/foreign/abi/CallingSequence;)V
invokevirtual jdk.internal.foreign.abi.ProgrammableInvoker.getBoundMethodHandle:()Ljava/lang/invoke/MethodHandle;
astore 4
start local 4 2: aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings.isInMemoryReturn:Z
ifeq 4
3: aload 4
aload 2
invokestatic jdk.internal.foreign.abi.SharedUtils.adaptDowncallForIMR:(Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle;
astore 4
4: StackMap locals: jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings java.lang.invoke.MethodHandle
StackMap stack:
aload 4
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 addr Ljdk/incubator/foreign/Addressable;
0 5 1 mt Ljava/lang/invoke/MethodType;
0 5 2 cDesc Ljdk/incubator/foreign/FunctionDescriptor;
1 5 3 bindings Ljdk/internal/foreign/abi/x64/windows/CallArranger$Bindings;
2 5 4 handle Ljava/lang/invoke/MethodHandle;
MethodParameters:
Name Flags
addr
mt
cDesc
public static jdk.internal.foreign.abi.UpcallHandler arrangeUpcall(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, jdk.incubator.foreign.FunctionDescriptor);
descriptor: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;)Ljdk/internal/foreign/abi/UpcallHandler;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=5, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
iconst_1
invokestatic jdk.internal.foreign.abi.x64.windows.CallArranger.getBindings:(Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;Z)Ljdk/internal/foreign/abi/x64/windows/CallArranger$Bindings;
astore 3
start local 3 1: aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings.isInMemoryReturn:Z
ifeq 3
2: aload 0
invokestatic jdk.internal.foreign.abi.SharedUtils.adaptUpcallForIMR:(Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;
astore 0
3: StackMap locals: jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings
StackMap stack:
new jdk.internal.foreign.abi.ProgrammableUpcallHandler
dup
getstatic jdk.internal.foreign.abi.x64.windows.CallArranger.CWindows:Ljdk/internal/foreign/abi/ABIDescriptor;
aload 0
aload 3
getfield jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings.callingSequence:Ljdk/internal/foreign/abi/CallingSequence;
invokespecial jdk.internal.foreign.abi.ProgrammableUpcallHandler.<init>:(Ljdk/internal/foreign/abi/ABIDescriptor;Ljava/lang/invoke/MethodHandle;Ljdk/internal/foreign/abi/CallingSequence;)V
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 target Ljava/lang/invoke/MethodHandle;
0 4 1 mt Ljava/lang/invoke/MethodType;
0 4 2 cDesc Ljdk/incubator/foreign/FunctionDescriptor;
1 4 3 bindings Ljdk/internal/foreign/abi/x64/windows/CallArranger$Bindings;
MethodParameters:
Name Flags
target
mt
cDesc
private static boolean isInMemoryReturn(java.util.Optional<jdk.incubator.foreign.MemoryLayout>);
descriptor: (Ljava/util/Optional;)Z
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
1: ldc Ljdk/incubator/foreign/GroupLayout;
dup
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
pop
invokedynamic test(Ljava/lang/Class;)Ljava/util/function/Predicate;
Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
(Ljava/lang/Object;)Z
java/lang/Class.isInstance(Ljava/lang/Object;)Z (5)
(Ljdk/incubator/foreign/MemoryLayout;)Z
invokevirtual java.util.Optional.filter:(Ljava/util/function/Predicate;)Ljava/util/Optional;
2: invokedynamic test()Ljava/util/function/Predicate;
Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
(Ljava/lang/Object;)Z
jdk/internal/foreign/abi/x64/windows/CallArranger.lambda$1(Ljdk/incubator/foreign/MemoryLayout;)Z (6)
(Ljdk/incubator/foreign/MemoryLayout;)Z
invokevirtual java.util.Optional.filter:(Ljava/util/function/Predicate;)Ljava/util/Optional;
3: invokevirtual java.util.Optional.isPresent:()Z
4: ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 returnLayout Ljava/util/Optional<Ljdk/incubator/foreign/MemoryLayout;>;
Signature: (Ljava/util/Optional<Ljdk/incubator/foreign/MemoryLayout;>;)Z
MethodParameters:
Name Flags
returnLayout
private static boolean lambda$1(jdk.incubator.foreign.MemoryLayout);
descriptor: (Ljdk/incubator/foreign/MemoryLayout;)Z
flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokestatic jdk.internal.foreign.abi.x64.windows.TypeClass.isRegisterAggregate:(Ljdk/incubator/foreign/MemoryLayout;)Z
ifeq 1
iconst_0
goto 2
StackMap locals:
StackMap stack:
1: iconst_1
StackMap locals:
StackMap stack: int
2: ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 g Ljdk/incubator/foreign/MemoryLayout;
}
SourceFile: "CallArranger.java"
NestMembers:
jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper jdk.internal.foreign.abi.x64.windows.CallArranger$BindingCalculator jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings jdk.internal.foreign.abi.x64.windows.CallArranger$BoxBindingCalculator jdk.internal.foreign.abi.x64.windows.CallArranger$StorageCalculator jdk.internal.foreign.abi.x64.windows.CallArranger$UnboxBindingCalculator
InnerClasses:
public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
public final Win64 = jdk.internal.foreign.PlatformLayouts$Win64 of jdk.internal.foreign.PlatformLayouts
CallingSequenceBuilderHelper = jdk.internal.foreign.abi.x64.windows.CallArranger$1CallingSequenceBuilderHelper
private abstract BindingCalculator = jdk.internal.foreign.abi.x64.windows.CallArranger$BindingCalculator of jdk.internal.foreign.abi.x64.windows.CallArranger
public Bindings = jdk.internal.foreign.abi.x64.windows.CallArranger$Bindings of jdk.internal.foreign.abi.x64.windows.CallArranger
BoxBindingCalculator = jdk.internal.foreign.abi.x64.windows.CallArranger$BoxBindingCalculator of jdk.internal.foreign.abi.x64.windows.CallArranger
StorageCalculator = jdk.internal.foreign.abi.x64.windows.CallArranger$StorageCalculator of jdk.internal.foreign.abi.x64.windows.CallArranger
UnboxBindingCalculator = jdk.internal.foreign.abi.x64.windows.CallArranger$UnboxBindingCalculator of jdk.internal.foreign.abi.x64.windows.CallArranger