aboutsummaryrefslogtreecommitdiffstats
path: root/util/system/context_aarch64.S
diff options
context:
space:
mode:
authordcherednik <dcherednik@ydb.tech>2022-10-26 16:40:35 +0300
committerdcherednik <dcherednik@ydb.tech>2022-10-26 16:40:35 +0300
commitb981cca279190176740c3bf5c5b4fd03be51b599 (patch)
treef5ec6210fdce0e976cbbe4dc8ae78bb6509adf49 /util/system/context_aarch64.S
parent6dc0de995652f7eeecdbdb88dc98b00bb0653a2f (diff)
downloadydb-b981cca279190176740c3bf5c5b4fd03be51b599.tar.gz
Enable linux-arm platform.
Diffstat (limited to 'util/system/context_aarch64.S')
-rw-r--r--util/system/context_aarch64.S52
1 files changed, 52 insertions, 0 deletions
diff --git a/util/system/context_aarch64.S b/util/system/context_aarch64.S
new file mode 100644
index 0000000000..0b2ef4e4a6
--- /dev/null
+++ b/util/system/context_aarch64.S
@@ -0,0 +1,52 @@
+.p2align 2
+#if !(defined __darwin__) && !(defined __arm64__)
+.global __mysetjmp
+.type __mysetjmp,@function
+__mysetjmp:
+#else
+.global ___mysetjmp
+___mysetjmp:
+#endif
+ // IHI0055B_aapcs64.pdf 5.1.1, 5.1.2 callee saved registers
+ stp x19, x20, [x0,#0]
+ stp x21, x22, [x0,#16]
+ stp x23, x24, [x0,#32]
+ stp x25, x26, [x0,#48]
+ stp x27, x28, [x0,#64]
+ stp x29, x30, [x0,#80]
+ mov x2, sp
+ str x2, [x0,#104]
+ stp d8, d9, [x0,#112]
+ stp d10, d11, [x0,#128]
+ stp d12, d13, [x0,#144]
+ stp d14, d15, [x0,#160]
+ mov x0, #0
+ ret
+
+.p2align 2
+#if !(defined __darwin__) && !(defined __arm64__)
+.global __mylongjmp
+.type __mylongjump,@function
+__mylongjmp:
+#else
+.global ___mylongjmp
+___mylongjmp:
+#endif
+ // IHI0055B_aapcs64.pdf 5.1.1, 5.1.2 callee saved registers
+ ldp x19, x20, [x0,#0]
+ ldp x21, x22, [x0,#16]
+ ldp x23, x24, [x0,#32]
+ ldp x25, x26, [x0,#48]
+ ldp x27, x28, [x0,#64]
+ ldp x29, x30, [x0,#80]
+ ldr x2, [x0,#104]
+ mov sp, x2
+ ldp d8 , d9, [x0,#112]
+ ldp d10, d11, [x0,#128]
+ ldp d12, d13, [x0,#144]
+ ldp d14, d15, [x0,#160]
+
+ mov x0, x1
+ cbnz x1, 1f
+ mov x0, #1
+1: br x30