about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm')
-rw-r--r--.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm53
1 files changed, 53 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm b/.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm
new file mode 100644
index 00000000..29f9c225
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/greenlet/platform/switch_arm64_masm.asm
@@ -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