toaruos/libc/setjmp.S

65 lines
879 B
ArmAsm

.global setjmp
.type setjmp, STT_FUNC
setjmp:
pushl %ebp
movl %esp,%ebp
pushl %edi
movl 8(%ebp),%edi
movl %eax,0 (%edi)
movl %ebx,4 (%edi)
movl %ecx,8 (%edi)
movl %edx,12 (%edi)
movl %esi,16 (%edi)
movl -4 (%ebp),%eax
movl %eax,20 (%edi)
movl 0 (%ebp),%eax
movl %eax,24 (%edi)
movl %esp,%eax
addl $12,%eax
movl %eax,28 (%edi)
movl 4 (%ebp),%eax
movl %eax,32 (%edi)
popl %edi
movl $0,%eax
leave
ret
.global longjmp
.type longjmp, STT_FUNC
longjmp:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%edi /* get jmp_buf */
movl 12(%ebp),%eax /* store retval in j->eax */
testl %eax,%eax
jne 0f
incl %eax
0:
movl %eax,0(%edi)
movl 24(%edi),%ebp
/*__CLI */
movl 28(%edi),%esp
pushl 32(%edi)
movl 0 (%edi),%eax
movl 4 (%edi),%ebx
movl 8 (%edi),%ecx
movl 12(%edi),%edx
movl 16(%edi),%esi
movl 20(%edi),%edi
/*__STI */
ret