mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-28 21:00: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
|
asm
|
||||||
movi a2,0
|
movi a2,0
|
||||||
end;
|
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
|
asm
|
||||||
end;
|
end;
|
||||||
|
{$endif fpc_abi_windowed}
|
||||||
|
|
||||||
|
@ -15,8 +15,15 @@
|
|||||||
**********************************************************************}
|
**********************************************************************}
|
||||||
|
|
||||||
type
|
type
|
||||||
jmp_buf = packed record
|
{$ifdef fpc_abi_call0}
|
||||||
|
jmp_buf = record
|
||||||
|
a0,a1,a8,a12,a13,a14,a15 : DWord;
|
||||||
end;
|
end;
|
||||||
|
{$endif fpc_abi_call0}
|
||||||
|
{$ifdef fpc_abi_windowed}
|
||||||
|
jmp_buf = record
|
||||||
|
end;
|
||||||
|
{$endif fpc_abi_windowed}
|
||||||
pjmp_buf = ^jmp_buf;
|
pjmp_buf = ^jmp_buf;
|
||||||
|
|
||||||
function setjmp(var S : jmp_buf) : longint;[external name 'FPC_SETJMP'];
|
function setjmp(var S : jmp_buf) : longint;[external name 'FPC_SETJMP'];
|
||||||
|
Loading…
Reference in New Issue
Block a user