// d2
// d1
// d0 <- __PWTB_FloatArgumentRegisters
-.macro PROLOG_WITH_TRANSITION_BLOCK extraLocals = 0, saveFpArgs = 0, pushArgRegs = 0
+.macro PROLOG_WITH_TRANSITION_BLOCK extraLocals = 0, saveFpArgs = 1, pushArgRegs = 0
__PWTB_FloatArgumentRegisters = \extraLocals
__PWTB_SaveFPArgs = \saveFpArgs
.if ((__PWTB_FloatArgumentRegisters % 8) != 0)
__PWTB_FloatArgumentRegisters = __PWTB_FloatArgumentRegisters + 4
.endif
-
- __PWTB_TransitionBlock = __PWTB_FloatArgumentRegisters + 8 * 8 + 8 // 8 floating point registers
- .else
+
+ __PWTB_TransitionBlock = __PWTB_FloatArgumentRegisters + 8 * 8 + 4 // 8 floating point registers + padding
+ .else
.if ((__PWTB_FloatArgumentRegisters % 8) == 0)
__PWTB_FloatArgumentRegisters = __PWTB_FloatArgumentRegisters + 4
.endif
-
+
__PWTB_TransitionBlock = __PWTB_FloatArgumentRegisters
.endif
PUSH_CALLEE_SAVED_REGISTERS
alloc_stack __PWTB_StackAlloc
-
+
.if (__PWTB_SaveFPArgs == 1)
add r6, sp, #(__PWTB_FloatArgumentRegisters)
vstm r6, {d0-d7}
.endif
-
+
CHECK_STACK_ALIGNMENT
END_PROLOGUE
POP_CALLEE_SAVED_REGISTERS
free_stack 16
bx lr
-
+
.endm
.macro EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
add r6, sp, #(__PWTB_FloatArgumentRegisters)
vldm r6, {d0-d7}
.endif
-
+
free_stack __PWTB_StackAlloc
POP_CALLEE_SAVED_REGISTERS
- POP_ARGUMENT_REGISTERS
+ POP_ARGUMENT_REGISTERS
.endm
// FloatRegisters::d2
// FloatRegisters::d1
// FloatRegisters::d0
-.macro PROLOG_WITH_TRANSITION_BLOCK extraLocals, SaveFPArgs
+.macro PROLOG_WITH_TRANSITION_BLOCK extraLocals = 0, SaveFPArgs = 1
__PWTB_FloatArgumentRegisters = \extraLocals
// Provides a matching epilog to PROLOG_WITH_TRANSITION_BLOCK and ends by preparing for tail-calling.
// Since this is a tail call argument registers are restored.
//
-.macro EPILOG_WITH_TRANSITION_BLOCK_TAILCALL extraLocals, SaveFPArgs
+.macro EPILOG_WITH_TRANSITION_BLOCK_TAILCALL extraLocals = 0, SaveFPArgs =1
__PWTB_FloatArgumentRegisters = \extraLocals
push {r0}
- PROLOG_WITH_TRANSITION_BLOCK 0x4, 1, DoNotPushArgRegs
+ PROLOG_WITH_TRANSITION_BLOCK 0x4, 0, DoNotPushArgRegs
// Load the helper arguments
ldr r5, [sp,#(__PWTB_TransitionBlock+10*4)] // pModule
PROLOG_PUSH {r0}
- PROLOG_WITH_TRANSITION_BLOCK 0x4, {true}, DoNotPushArgRegs
+ PROLOG_WITH_TRANSITION_BLOCK 0x4, {false}, DoNotPushArgRegs
; Load the helper arguments
ldr r5, [sp,#(__PWTB_TransitionBlock+10*4)] ; pModule
NESTED_ENTRY ThePreStub, _TEXT, NoHandler
- PROLOG_WITH_TRANSITION_BLOCK 0, 0
+ PROLOG_WITH_TRANSITION_BLOCK
add x0, sp, #__PWTB_TransitionBlock // pTransitionBlock
mov x1, METHODDESC_REGISTER // pMethodDesc
mov x9, x0
- EPILOG_WITH_TRANSITION_BLOCK_TAILCALL 0, 0
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
EPILOG_BRANCH_REG x9
NESTED_END ThePreStub, _TEXT
// The stub dispatch thunk which transfers control to VSD_ResolveWorker.
NESTED_ENTRY ResolveWorkerAsmStub, _TEXT, NoHandler
- PROLOG_WITH_TRANSITION_BLOCK 0, 0
+ PROLOG_WITH_TRANSITION_BLOCK
add x0, sp, #__PWTB_TransitionBlock // pTransitionBlock
and x1, x11, #-4 // Indirection cell
bl C_FUNC(VSD_ResolveWorker)
mov x9, x0
- EPILOG_WITH_TRANSITION_BLOCK_TAILCALL 0, 0
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
EPILOG_BRANCH_REG x9
NESTED_ENTRY ExternalMethodFixupStub, _TEXT, NoHandler
- PROLOG_WITH_TRANSITION_BLOCK 0, 0
+ PROLOG_WITH_TRANSITION_BLOCK
add x0, sp, #__PWTB_TransitionBlock // pTransitionBlock
mov x1, x12 // pThunk
// mov the address we patched to in x12 so that we can tail call to it
mov x12, x0
- EPILOG_WITH_TRANSITION_BLOCK_TAILCALL 0, 0
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
PATCH_LABEL ExternalMethodFixupPatchLabel
EPILOG_BRANCH_REG x12