mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 18:29:28 +02:00
+ initial implementation of setjmp/longjmp
git-svn-id: trunk@46537 -
This commit is contained in:
parent
1f073818ba
commit
8a36e63a56
@ -14,12 +14,43 @@
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; compilerproc;
|
||||
|
||||
function fpc_setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP']; compilerproc; nostackframe;
|
||||
{$ifdef fpc_abi_call0}
|
||||
asm
|
||||
s32i.n a0,S.a0
|
||||
s32i.n a1,S.a1
|
||||
s32i.n a8,S.a8
|
||||
s32i.n a12,S.a12
|
||||
s32i.n a13,S.a13
|
||||
s32i.n a14,S.a14
|
||||
s32i.n a15,S.a15
|
||||
movi.n a2,0
|
||||
end;
|
||||
{$endif fpc_abi_call0}
|
||||
{$ifdef fpc_abi_windowed}
|
||||
asm
|
||||
movi a2,0
|
||||
end;
|
||||
{$endif fpc_abi_windowed}
|
||||
|
||||
|
||||
procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc;
|
||||
procedure fpc_longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP']; compilerproc; nostackframe;
|
||||
{$ifdef fpc_abi_call0}
|
||||
asm
|
||||
l32i.n a0,S.a0
|
||||
l32i.n a1,S.a1
|
||||
l32i.n a8,S.a8
|
||||
l32i.n a12,S.a12
|
||||
l32i.n a13,S.a13
|
||||
l32i.n a14,S.a14
|
||||
l32i.n a15,S.a15
|
||||
movi.n a2,1
|
||||
movnez a2,value,value
|
||||
end;
|
||||
{$endif fpc_abi_call0}
|
||||
{$ifdef fpc_abi_windowed}
|
||||
asm
|
||||
end;
|
||||
{$endif fpc_abi_windowed}
|
||||
|
||||
|
@ -15,8 +15,15 @@
|
||||
**********************************************************************}
|
||||
|
||||
type
|
||||
jmp_buf = packed record
|
||||
{$ifdef fpc_abi_call0}
|
||||
jmp_buf = record
|
||||
a0,a1,a8,a12,a13,a14,a15 : DWord;
|
||||
end;
|
||||
{$endif fpc_abi_call0}
|
||||
{$ifdef fpc_abi_windowed}
|
||||
jmp_buf = record
|
||||
end;
|
||||
{$endif fpc_abi_windowed}
|
||||
pjmp_buf = ^jmp_buf;
|
||||
|
||||
function setjmp(var S : jmp_buf) : longint;[external name 'FPC_SETJMP'];
|
||||
|
Loading…
Reference in New Issue
Block a user