OSDN Git Service

Replace FSF snail mail address with URLs
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / x86_64 / __longjmp.S
1 /* Copyright (C) 2001, 2004 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <http://www.gnu.org/licenses/>.  */
17
18 #include <jmpbuf-offsets.h>
19
20 /* Jump to the position specified by ENV, causing the
21    setjmp call there to return VAL, or 1 if VAL is 0.
22    void __longjmp (__jmp_buf env, int val).  */
23 .global __longjmp
24 .type   __longjmp,%function
25 __longjmp:
26         /* Restore registers.  */
27         movq (JB_RBX*8)(%rdi),%rbx
28         movq (JB_RBP*8)(%rdi),%rbp
29         movq (JB_R12*8)(%rdi),%r12
30         movq (JB_R13*8)(%rdi),%r13
31         movq (JB_R14*8)(%rdi),%r14
32         movq (JB_R15*8)(%rdi),%r15
33         /* Set return value for setjmp.  */
34         test %esi,%esi
35         mov $01,%eax
36         cmove %eax,%esi
37         mov %esi, %eax
38         movq (JB_PC*8)(%rdi),%rdx
39         movq (JB_RSP*8)(%rdi),%rsp
40         jmpq *%rdx
41 .size __longjmp,.-__longjmp
42 libc_hidden_def(__longjmp)