#include <9pm/u.h>
#include <9pm/libc.h>
__declspec(naked)
void
pm_longjmp(pm_jmp_buf jb, int val)
{
_asm {
mov ebx, [esp+4]
mov eax, [esp+8]
cmp eax, 0
jne nofix
mov eax, 1
nofix:
mov ebp, [ebx]
mov edi, [ebx+8]
mov esi, [ebx+12]
mov esp, [ebx+16]
mov ecx, [ebx+20]
mov [esp], ecx
mov ebx, [ebx+4]
ret
}
}
__declspec(naked)
int
pm_setjmp(pm_jmp_buf jb)
{
_asm {
mov eax, [esp+4]
mov [eax], ebp
mov [eax+4], ebx
mov [eax+8], edi
mov [eax+12], esi
mov [eax+16], esp
mov ebx, [esp] /* return pc */
mov [eax+20], ebx
xor eax, eax
ret
}
}
syntax highlighted by Code2HTML, v. 0.9.1