diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nonstd/x86-64.s | 54 | ||||
-rw-r--r-- | src/setjmp/__longjmp.x86-64.s | 26 | ||||
-rw-r--r-- | src/setjmp/__setjmp.x86-64.s | 26 |
3 files changed, 52 insertions, 54 deletions
diff --git a/src/nonstd/x86-64.s b/src/nonstd/x86-64.s index 5b13587c..87ff1637 100644 --- a/src/nonstd/x86-64.s +++ b/src/nonstd/x86-64.s @@ -10,60 +10,6 @@ __syscall: syscall ret -.global __setjmp -__setjmp: - /* setjmp() in C sets env[0] to 0 */ - mov %rbx, 0x08(%rdi) - mov %rcx, 0x10(%rdi) - mov %rdx, 0x18(%rdi) - mov %rsp, 0x20(%rdi) - mov %rbp, 0x28(%rdi) - mov %rsi, 0x30(%rdi) - mov %rdi, 0x38(%rdi) - mov %r8, 0x40(%rdi) - mov %r9, 0x48(%rdi) - mov %r10, 0x50(%rdi) - mov %r11, 0x58(%rdi) - mov %r12, 0x60(%rdi) - mov %r13, 0x68(%rdi) - mov %r14, 0x70(%rdi) - mov %r15, 0x78(%rdi) - mov 0x00(%rbp), %rax - mov %rax, 0x80(%rdi) - mov 0x08(%rbp), %rax - mov %rax, 0x88(%rdi) - mov 0x00(%rsp), %rax - mov %rax, 0x90(%rdi) - xor %rax, %rax - ret - -.global __longjmp -__longjmp: - mov %rdi, %rax - mov 0x08(%rax), %rbx - mov 0x18(%rax), %rdx - mov 0x20(%rax), %rsp - mov 0x28(%rax), %rbp - mov 0x30(%rax), %rsi - mov 0x38(%rax), %rdi - mov 0x40(%rax), %r8 - mov 0x48(%rax), %r9 - mov 0x50(%rax), %r10 - mov 0x58(%rax), %r11 - mov 0x60(%rax), %r12 - mov 0x68(%rax), %r13 - mov 0x70(%rax), %r14 - mov 0x78(%rax), %r15 - mov 0x80(%rax), %rcx - mov %rcx, 0x00(%rbp) - mov 0x88(%rax), %rcx - mov %rcx, 0x08(%rbp) - mov 0x90(%rax), %rcx - mov %rcx, 0x00(%rsp) - mov 0x10(%rax), %rcx - mov 0x00(%rax), %rax - ret - .global _start _start: popq %rdi diff --git a/src/setjmp/__longjmp.x86-64.s b/src/setjmp/__longjmp.x86-64.s new file mode 100644 index 00000000..de666dce --- /dev/null +++ b/src/setjmp/__longjmp.x86-64.s @@ -0,0 +1,26 @@ +.global __longjmp +__longjmp: + mov %rdi, %rax + mov 0x08(%rax), %rbx + mov 0x18(%rax), %rdx + mov 0x20(%rax), %rsp + mov 0x28(%rax), %rbp + mov 0x30(%rax), %rsi + mov 0x38(%rax), %rdi + mov 0x40(%rax), %r8 + mov 0x48(%rax), %r9 + mov 0x50(%rax), %r10 + mov 0x58(%rax), %r11 + mov 0x60(%rax), %r12 + mov 0x68(%rax), %r13 + mov 0x70(%rax), %r14 + mov 0x78(%rax), %r15 + mov 0x80(%rax), %rcx + mov %rcx, 0x00(%rbp) + mov 0x88(%rax), %rcx + mov %rcx, 0x08(%rbp) + mov 0x90(%rax), %rcx + mov %rcx, 0x00(%rsp) + mov 0x10(%rax), %rcx + mov 0x00(%rax), %rax + ret diff --git a/src/setjmp/__setjmp.x86-64.s b/src/setjmp/__setjmp.x86-64.s new file mode 100644 index 00000000..d5b095e1 --- /dev/null +++ b/src/setjmp/__setjmp.x86-64.s @@ -0,0 +1,26 @@ +.global __setjmp +__setjmp: + /* setjmp() in C sets env[0] to 0 */ + mov %rbx, 0x08(%rdi) + mov %rcx, 0x10(%rdi) + mov %rdx, 0x18(%rdi) + mov %rsp, 0x20(%rdi) + mov %rbp, 0x28(%rdi) + mov %rsi, 0x30(%rdi) + mov %rdi, 0x38(%rdi) + mov %r8, 0x40(%rdi) + mov %r9, 0x48(%rdi) + mov %r10, 0x50(%rdi) + mov %r11, 0x58(%rdi) + mov %r12, 0x60(%rdi) + mov %r13, 0x68(%rdi) + mov %r14, 0x70(%rdi) + mov %r15, 0x78(%rdi) + mov 0x00(%rbp), %rax + mov %rax, 0x80(%rdi) + mov 0x08(%rbp), %rax + mov %rax, 0x88(%rdi) + mov 0x00(%rsp), %rax + mov %rax, 0x90(%rdi) + xor %rax, %rax + ret |