Linux 4.13.16
[linux/fpc-iii.git] / arch / x86 / um / setjmp_64.S
blobc56942e1a38caccb006119b50de77053459fb8c4
2 # arch/x86_64/setjmp.S
4 # setjmp/longjmp for the x86-64 architecture
8 # The jmp_buf is assumed to contain the following, in order:
9 #       %rbx
10 #       %rsp (post-return)
11 #       %rbp
12 #       %r12
13 #       %r13
14 #       %r14
15 #       %r15
16 #       <return address>
19         .text
20         .align 4
21         .globl kernel_setjmp
22         .type kernel_setjmp, @function
23 kernel_setjmp:
24         pop  %rsi                       # Return address, and adjust the stack
25         xorl %eax,%eax                  # Return value
26         movq %rbx,(%rdi)
27         movq %rsp,8(%rdi)               # Post-return %rsp!
28         push %rsi                       # Make the call/return stack happy
29         movq %rbp,16(%rdi)
30         movq %r12,24(%rdi)
31         movq %r13,32(%rdi)
32         movq %r14,40(%rdi)
33         movq %r15,48(%rdi)
34         movq %rsi,56(%rdi)              # Return address
35         ret
37         .size kernel_setjmp,.-kernel_setjmp
39         .text
40         .align 4
41         .globl kernel_longjmp
42         .type kernel_longjmp, @function
43 kernel_longjmp:
44         movl %esi,%eax                  # Return value (int)
45         movq (%rdi),%rbx
46         movq 8(%rdi),%rsp
47         movq 16(%rdi),%rbp
48         movq 24(%rdi),%r12
49         movq 32(%rdi),%r13
50         movq 40(%rdi),%r14
51         movq 48(%rdi),%r15
52         jmp *56(%rdi)
54         .size kernel_longjmp,.-kernel_longjmp