aboutsummaryrefslogtreecommitdiffstats
path: root/util/system/context_x86_64.asm
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/system/context_x86_64.asm
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/system/context_x86_64.asm')
-rw-r--r--util/system/context_x86_64.asm40
1 files changed, 40 insertions, 0 deletions
diff --git a/util/system/context_x86_64.asm b/util/system/context_x86_64.asm
new file mode 100644
index 0000000000..8bcc01e4fc
--- /dev/null
+++ b/util/system/context_x86_64.asm
@@ -0,0 +1,40 @@
+ [bits 64]
+
+ %define MJB_RBX 0
+ %define MJB_RBP 1
+ %define MJB_R12 2
+ %define MJB_R13 3
+ %define MJB_R14 4
+ %define MJB_R15 5
+ %define MJB_RSP 6
+ %define MJB_PC 7
+ %define MJB_SIZE (8*8)
+
+EXPORT __mylongjmp
+ mov rbx, [rdi + MJB_RBX * 8]
+ mov rbp, [rdi + MJB_RBP * 8]
+ mov r12, [rdi + MJB_R12 * 8]
+ mov r13, [rdi + MJB_R13 * 8]
+ mov r14, [rdi + MJB_R14 * 8]
+ mov r15, [rdi + MJB_R15 * 8]
+ test esi, esi
+ mov eax, 1
+ cmove esi, eax
+ mov eax, esi
+ mov rdx, [rdi + MJB_PC * 8]
+ mov rsp, [rdi + MJB_RSP * 8]
+ jmp rdx
+
+EXPORT __mysetjmp
+ mov [rdi + MJB_RBX * 8], rbx
+ mov [rdi + MJB_RBP * 8], rbp
+ mov [rdi + MJB_R12 * 8], r12
+ mov [rdi + MJB_R13 * 8], r13
+ mov [rdi + MJB_R14 * 8], r14
+ mov [rdi + MJB_R15 * 8], r15
+ lea rdx, [rsp + 8]
+ mov [rdi + MJB_RSP * 8], rdx
+ mov rax, [rsp]
+ mov [rdi + MJB_PC * 8], rax
+ mov eax, 0
+ ret