Squash commits for public release
This commit is contained in:
25
libs/libc/setjmp/arm32/setjmp.S
Normal file
25
libs/libc/setjmp/arm32/setjmp.S
Normal file
@@ -0,0 +1,25 @@
|
||||
.global setjmp
|
||||
setjmp:
|
||||
stm r0!, {r4-r12,lr}
|
||||
mov r1, sp
|
||||
ldm r0!, {r1}
|
||||
#ifdef __ARM_NEON__
|
||||
vstm r0!, {d8-d15}
|
||||
#endif // __ARM_NEON__
|
||||
mov r0, #0
|
||||
bx lr
|
||||
|
||||
.global longjmp
|
||||
longjmp:
|
||||
ldm r0!, {r4-r12,lr}
|
||||
ldm r0!, {r1}
|
||||
mov sp, r1
|
||||
#ifdef __ARM_NEON__
|
||||
vldm r0!, {d8-d15}
|
||||
#endif // __ARM_NEON__
|
||||
mov r0, r1
|
||||
cmp r0, #0
|
||||
bne 1f
|
||||
mov r0, #1
|
||||
1:
|
||||
bx lr
|
||||
39
libs/libc/setjmp/arm64/setjmp.S
Normal file
39
libs/libc/setjmp/arm64/setjmp.S
Normal file
@@ -0,0 +1,39 @@
|
||||
.global setjmp
|
||||
setjmp:
|
||||
stp x19, x20, [x0,#0x0]
|
||||
stp x21, x22, [x0,#0x10]
|
||||
stp x23, x24, [x0,#0x20]
|
||||
stp x25, x26, [x0,#0x30]
|
||||
stp x27, x28, [x0,#0x40]
|
||||
stp x29, x4, [x0,#0x50]
|
||||
mov x2, lr
|
||||
mov x3, sp
|
||||
stp x2, x3, [x0,#0x60]
|
||||
stp d8, d9, [x0,#0x70]
|
||||
stp d10, d11, [x0,#0x80]
|
||||
stp d12, d13, [x0,#0x90]
|
||||
stp d14, d15, [x0,#0xa0]
|
||||
mov x0, #0
|
||||
ret
|
||||
|
||||
.global longjmp
|
||||
longjmp:
|
||||
ldp x19, x20, [x0,#0x0]
|
||||
ldp x21, x22, [x0,#0x10]
|
||||
ldp x23, x24, [x0,#0x20]
|
||||
ldp x25, x26, [x0,#0x30]
|
||||
ldp x27, x28, [x0,#0x40]
|
||||
ldp x29, x4, [x0,#0x50]
|
||||
ldp x2, x3, [x0,#0x60]
|
||||
ldp d8, d9, [x0,#0x70]
|
||||
ldp d10, d11, [x0,#0x80]
|
||||
ldp d12, d13, [x0,#0x90]
|
||||
ldp d14, d15, [x0,#0xa0]
|
||||
mov lr, x2
|
||||
mov sp, x3
|
||||
mov x0, x1
|
||||
cmp x0, #0
|
||||
bne 1f
|
||||
mov x0, #1
|
||||
1:
|
||||
ret
|
||||
55
libs/libc/setjmp/riscv64/setjmp.S
Normal file
55
libs/libc/setjmp/riscv64/setjmp.S
Normal file
@@ -0,0 +1,55 @@
|
||||
.global setjmp
|
||||
setjmp:
|
||||
sd s0, 0(a0)
|
||||
sd s1, 8(a0)
|
||||
sd s2, 16(a0)
|
||||
sd s3, 24(a0)
|
||||
sd s4, 32(a0)
|
||||
sd s5, 40(a0)
|
||||
sd s6, 48(a0)
|
||||
sd s7, 56(a0)
|
||||
sd s8, 64(a0)
|
||||
sd s9, 72(a0)
|
||||
sd s10, 80(a0)
|
||||
sd s11, 88(a0)
|
||||
sd ra, 96(a0)
|
||||
sd sp, 104(a0)
|
||||
|
||||
mv a0, zero
|
||||
ret
|
||||
// stp x19, x20, [x0,#0x0]
|
||||
// stp x21, x22, [x0,#0x10]
|
||||
// stp x23, x24, [x0,#0x20]
|
||||
// stp x25, x26, [x0,#0x30]
|
||||
// stp x27, x28, [x0,#0x40]
|
||||
// stp x29, x4, [x0,#0x50]
|
||||
// mov x2, lr
|
||||
// mov x3, sp
|
||||
// stp x2, x3, [x0,#0x60]
|
||||
// stp d8, d9, [x0,#0x70]
|
||||
// stp d10, d11, [x0,#0x80]
|
||||
// stp d12, d13, [x0,#0x90]
|
||||
// stp d14, d15, [x0,#0xa0]
|
||||
// mov x0, #0
|
||||
ret
|
||||
|
||||
.global longjmp
|
||||
longjmp:
|
||||
ld s0, 0(a0)
|
||||
ld s1, 8(a0)
|
||||
ld s2, 16(a0)
|
||||
ld s3, 24(a0)
|
||||
ld s4, 32(a0)
|
||||
ld s5, 40(a0)
|
||||
ld s6, 48(a0)
|
||||
ld s7, 56(a0)
|
||||
ld s8, 64(a0)
|
||||
ld s9, 72(a0)
|
||||
ld s10, 80(a0)
|
||||
ld s11, 88(a0)
|
||||
ld ra, 96(a0)
|
||||
ld sp, 104(a0)
|
||||
bne a0, zero, 1f
|
||||
li a0, 1
|
||||
1:
|
||||
ret
|
||||
29
libs/libc/setjmp/x86/setjmp.S
Normal file
29
libs/libc/setjmp/x86/setjmp.S
Normal file
@@ -0,0 +1,29 @@
|
||||
global setjmp
|
||||
setjmp:
|
||||
mov eax, [esp+4]
|
||||
mov [eax], ebx
|
||||
mov [eax+4], esi
|
||||
mov [eax+8], edi
|
||||
mov [eax+12], ebp
|
||||
lea ecx, [esp+4]
|
||||
mov [eax+16], ecx
|
||||
mov ecx, [esp]
|
||||
mov [eax+20], ecx
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
global longjmp
|
||||
longjmp:
|
||||
mov edx, [esp+4]
|
||||
mov eax, [esp+8]
|
||||
mov ebx, [edx]
|
||||
mov esi, [edx+4]
|
||||
mov edi, [edx+8]
|
||||
mov ebp, [edx+12]
|
||||
mov esp, [edx+16]
|
||||
mov ecx, [edx+20]
|
||||
test eax, eax
|
||||
jnz success
|
||||
mov eax, 1
|
||||
success:
|
||||
jmp ecx
|
||||
35
libs/libc/setjmp/x86_64/setjmp.S
Normal file
35
libs/libc/setjmp/x86_64/setjmp.S
Normal file
@@ -0,0 +1,35 @@
|
||||
[bits 64]
|
||||
|
||||
global setjmp
|
||||
setjmp:
|
||||
mov [rdi], rbx
|
||||
mov [rdi+8], r12
|
||||
mov [rdi+16], r13
|
||||
mov [rdi+24], r14
|
||||
mov [rdi+32], r15
|
||||
mov [rdi+40], rbp
|
||||
mov [rdi+48], rsp
|
||||
|
||||
mov rax, [rsp]
|
||||
mov [rdi+56], rax
|
||||
|
||||
xor rax, rax
|
||||
ret
|
||||
|
||||
global longjmp
|
||||
longjmp:
|
||||
mov rbx, [rdi]
|
||||
mov r12, [rdi+8]
|
||||
mov r13, [rdi+16]
|
||||
mov r14, [rdi+24]
|
||||
mov r15, [rdi+32]
|
||||
mov rbp, [rdi+40]
|
||||
mov rsp, [rdi+48]
|
||||
mov rcx, [rdi+56]
|
||||
|
||||
mov rax, rsi
|
||||
test rax, rax
|
||||
jnz success
|
||||
mov rax, 1
|
||||
success:
|
||||
jmp rcx
|
||||
Reference in New Issue
Block a user