Cygwin: access: Fix X_OK behaviour for backup operators and admins
[newlib-cygwin.git] / newlib / libc / machine / d10v / setjmp.S
blob22287dd1e02736c7708f3fc6a7509105438ec796
1 ; setjmp/longjmp for D10V.  The jmpbuf looks like this:
3 ; Register              jmpbuf offset
4 ; R6                    0x00
5 ; R7                    0x02
6 ; R8                    0x04
7 ; R9                    0x06
8 ; R10                   0x08
9 ; R11                   0x0a
10 ; R13 (return address)  0x0c
11 ; R15 (SP)              0x0E
13         .text
14         .globl  setjmp
15         .type   setjmp,@function
16         .stabs  "setjmp.S",100,0,0,setjmp
17         .stabs  "int:t(0,1)=r(0,1);-65536;65535;",128,0,0,0
18         .stabs  "setjmp:F(0,1)",36,0,1,setjmp
20 setjmp:
21 ; Address of jmpbuf is passed in R0.  Save the appropriate registers.
22         st2w    r6, @r0+
23         st2w    r8, @r0+
24         st2w    r10, @r0+
25         st      r13, @r0+
26         st      r15, @r0+
28 ; Return 0 to caller
29         ldi     r0, 0
30         jmp     r13
31 .Lsetjmp:
32         .size   setjmp,.Lsetjmp-setjmp
33         .stabs  "",36,0,0,.Lsetjmp-setjmp
35         .globl  longjmp
36         .type   longjmp,@function
37         .stabs  "longjmp:F(0,1)",36,0,1,longjmp
38 longjmp:
39 ; Address of jmpbuf is in R0.  Restore the registers.
40         ld2w    r6, @r0+
41         ld2w    r8, @r0+
42         ld2w    r10, @r0+
43         ld      r13, @r0+
44         ld      r15, @r0+
46 ; Value to return to caller is in R1.  If caller attemped to return 0,
47 ; return 1 instead.
49         mv      r0, r1
50         cmpeqi  r0, 0
51         exef0t || ldi r0,1
52         jmp     r13
53 .Llongjmp:
54         .size   longjmp,.Llongjmp-longjmp
55         .stabs  "",36,0,0,.Llongjmp-longjmp