48 lines
1009 B
ArmAsm
48 lines
1009 B
ArmAsm
.hidden context_switch_aarch64
|
|
.globl context_switch_aarch64
|
|
context_switch_aarch64:
|
|
// Setup SP on the Buffer
|
|
MOV SP, X0
|
|
|
|
// Restore Regs
|
|
LDR X0, [SP, #0]
|
|
LDR X1, [SP, #8]
|
|
LDR X2, [SP, #16]
|
|
LDR X3, [SP, #24]
|
|
LDR X4, [SP, #32]
|
|
LDR X5, [SP, #40]
|
|
LDR X6, [SP, #48]
|
|
LDR X7, [SP, #56]
|
|
LDR X8, [SP, #64]
|
|
LDR X9, [SP, #72]
|
|
LDR X10, [SP, #80]
|
|
LDR X11, [SP, #88]
|
|
LDR X12, [SP, #96]
|
|
LDR X13, [SP, #104]
|
|
LDR X14, [SP, #112]
|
|
LDR X15, [SP, #120]
|
|
LDR X16, [SP, #128]
|
|
LDR X17, [SP, #136]
|
|
LDR X18, [SP, #144]
|
|
LDR X19, [SP, #152]
|
|
LDR X20, [SP, #160]
|
|
LDR X21, [SP, #168]
|
|
LDR X22, [SP, #176]
|
|
LDR X23, [SP, #184]
|
|
LDR X24, [SP, #192]
|
|
LDR X25, [SP, #200]
|
|
LDR X26, [SP, #208]
|
|
LDR X27, [SP, #216]
|
|
LDR X28, [SP, #224]
|
|
|
|
// Restore FP, LR, SP
|
|
LDR FP, [SP, #232]
|
|
LDR LR, [SP, #240]
|
|
MOV X15, SP
|
|
LDR X17, [X15, #248]
|
|
MOV SP, X17
|
|
|
|
// Branch to PC
|
|
LDR X17, [X15, #256]
|
|
BR X17
|