mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
Initial commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
AREA switch_arm64_masm, CODE, READONLY;
|
||||
GLOBAL slp_switch [FUNC]
|
||||
EXTERN slp_save_state_asm
|
||||
EXTERN slp_restore_state_asm
|
||||
|
||||
slp_switch
|
||||
; push callee saved registers to stack
|
||||
stp x19, x20, [sp, #-16]!
|
||||
stp x21, x22, [sp, #-16]!
|
||||
stp x23, x24, [sp, #-16]!
|
||||
stp x25, x26, [sp, #-16]!
|
||||
stp x27, x28, [sp, #-16]!
|
||||
stp x29, x30, [sp, #-16]!
|
||||
stp d8, d9, [sp, #-16]!
|
||||
stp d10, d11, [sp, #-16]!
|
||||
stp d12, d13, [sp, #-16]!
|
||||
stp d14, d15, [sp, #-16]!
|
||||
|
||||
; call slp_save_state_asm with stack pointer
|
||||
mov x0, sp
|
||||
bl slp_save_state_asm
|
||||
|
||||
; early return for return value of 1 and -1
|
||||
cmp x0, #-1
|
||||
b.eq RETURN
|
||||
cmp x0, #1
|
||||
b.eq RETURN
|
||||
|
||||
; increment stack and frame pointer
|
||||
add sp, sp, x0
|
||||
add x29, x29, x0
|
||||
|
||||
bl slp_restore_state_asm
|
||||
|
||||
; store return value for successful completion of routine
|
||||
mov x0, #0
|
||||
|
||||
RETURN
|
||||
; pop registers from stack
|
||||
ldp d14, d15, [sp], #16
|
||||
ldp d12, d13, [sp], #16
|
||||
ldp d10, d11, [sp], #16
|
||||
ldp d8, d9, [sp], #16
|
||||
ldp x29, x30, [sp], #16
|
||||
ldp x27, x28, [sp], #16
|
||||
ldp x25, x26, [sp], #16
|
||||
ldp x23, x24, [sp], #16
|
||||
ldp x21, x22, [sp], #16
|
||||
ldp x19, x20, [sp], #16
|
||||
|
||||
ret
|
||||
|
||||
END
|
Reference in New Issue
Block a user