1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
// vim: ft=arm64asm
.extern __sigsetjmp
.type __setjmp, "function"
__setjmp:
stp x19, x20, [x0, #0]
stp x21, x22, [x0, #16]
stp x23, x24, [x0, #24]
stp x25, x26, [x0, #32]
stp x27, x28, [x0, #48]
stp x29, x30, [x0, #64]
stp x29, x30, [x0, #80]
mov x4, sp
str x4, [x0, #96]
stp d8, d9, [x0, #112]
stp d10, d11, [x0, #128]
stp d12, d13, [x0, #144]
stp d14, d15, [x0, #160]
cbnz x2, 1f
mov x0, xzr
ret
1:
b __sigsetjmp
.global setjmp
.type setjmp, "function"
setjmp:
mov x2, xzr
b __setjmp
.global sigsetjmp
.type sigsetjmp, "function"
sigsetjmp:
mov x2, #1
b __setjmp
.global longjmp
.type longjmp, "function"
longjmp:
ldp x19, x20, [x0, #0]
ldp x21, x22, [x0, #16]
ldp x23, x24, [x0, #24]
ldp x25, x26, [x0, #32]
ldp x27, x28, [x0, #48]
ldp x29, x30, [x0, #64]
ldp x29, x30, [x0, #80]
ldr x4, [x0, #96]
mov sp, x4
ldp d8, d9, [x0, #112]
ldp d10, d11, [x0, #128]
ldp d12, d13, [x0, #144]
ldp d14, d15, [x0, #160]
cmp w1, 0
csinc w0, w1, wzr, ne
br x30
.section .note.GNU-stack,"",%progbits
|