Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
211 changes: 211 additions & 0 deletions src/coreclr/vm/arm64/asmhelpers.S
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,48 @@ NESTED_ENTRY InterpreterStubRetVector64, _TEXT, NoHandler
EPILOG_RETURN
NESTED_END InterpreterStubRetVector64, _TEXT

NESTED_ENTRY InterpreterStubRet2Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr d0, [x0], #8
ldr d1, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet2Vector64, _TEXT

NESTED_ENTRY InterpreterStubRet3Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr d0, [x0], #8
ldr d1, [x0], #8
ldr d2, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet3Vector64, _TEXT

NESTED_ENTRY InterpreterStubRet4Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr d0, [x0], #8
ldr d1, [x0], #8
ldr d2, [x0], #8
ldr d3, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet4Vector64, _TEXT

NESTED_ENTRY InterpreterStubRetVector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
Expand All @@ -918,6 +960,48 @@ NESTED_ENTRY InterpreterStubRetVector128, _TEXT, NoHandler
EPILOG_RETURN
NESTED_END InterpreterStubRetVector128, _TEXT

NESTED_ENTRY InterpreterStubRet2Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr q0, [x0], #16
ldr q1, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet2Vector128, _TEXT

NESTED_ENTRY InterpreterStubRet3Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr q0, [x0], #16
ldr q1, [x0], #16
ldr q2, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet3Vector128, _TEXT

NESTED_ENTRY InterpreterStubRet4Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_NO_FP_INDEXED fp, lr, -16
// The +16 is for the fp, lr above
add x0, sp, #__PWTB_TransitionBlock + 16
mov x1, x19 // the IR bytecode pointer
mov x2, xzr
bl C_FUNC(ExecuteInterpretedMethod)
ldr q0, [x0], #16
ldr q1, [x0], #16
ldr q2, [x0], #16
ldr q3, [x0]
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 16
EPILOG_RETURN
NESTED_END InterpreterStubRet4Vector128, _TEXT

// Copy arguments from the processor stack to the interpreter stack
// The CPU stack slots are aligned to pointer size.

Expand Down Expand Up @@ -1902,6 +1986,69 @@ NESTED_ENTRY CallJittedMethodRetVector64, _TEXT, NoHandler
EPILOG_RETURN
NESTED_END CallJittedMethodRetVector64, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet2Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str d0, [x2], #8
str d1, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet2Vector64, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet3Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str d0, [x2], #8
str d1, [x2], #8
str d2, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet3Vector64, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet4Vector64, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str d0, [x2], #8
str d1, [x2], #8
str d2, [x2], #8
str d3, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet4Vector64, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
Expand All @@ -1921,4 +2068,68 @@ NESTED_ENTRY CallJittedMethodRetVector128, _TEXT, NoHandler
EPILOG_RETURN
NESTED_END CallJittedMethodRetVector128, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet2Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str q0, [x2], #16
str q1, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet2Vector128, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet3Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str q0, [x2], #16
str q1, [x2], #16
str q2, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet3Vector128, _TEXT

// X0 - routines array
// X1 - interpreter stack args location
// X2 - interpreter stack return value location
// X3 - stack arguments size (properly aligned)
NESTED_ENTRY CallJittedMethodRet4Vector128, _TEXT, NoHandler
PROLOG_SAVE_REG_PAIR_INDEXED fp, lr, -32
str x2, [fp, #16]
sub sp, sp, x3
mov x10, x0
mov x9, x1
ldr x11, [x10], #8
blr x11
ldr x2, [fp, #16]
str q0, [x2], #16
str q1, [x2], #16
str q2, [x2], #16
str q3, [x2]
EPILOG_STACK_RESTORE
EPILOG_RESTORE_REG_PAIR_INDEXED fp, lr, 32
EPILOG_RETURN
NESTED_END CallJittedMethodRet4Vector128, _TEXT


#endif // FEATURE_INTERPRETER
Loading
Loading