diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-21 21:15:36 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-08-21 21:15:36 +0000 |
commit | 63066b36d1805092109febe0160bac118c1e86eb (patch) | |
tree | c1f4512f7dbb2ecea72d4606258393d184eb3826 /rtl/xtensa | |
parent | 73af5a2e09fa279e024b486c272eb803c1d306e0 (diff) | |
download | fpc-63066b36d1805092109febe0160bac118c1e86eb.tar.gz |
+ initial implementation of setjmp/longjmp
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46537 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/xtensa')
-rw-r--r-- | rtl/xtensa/setjump.inc | 35 | ||||
-rw-r--r-- | rtl/xtensa/setjumph.inc | 9 |
2 files changed, 41 insertions, 3 deletions
diff --git a/rtl/xtensa/setjump.inc b/rtl/xtensa/setjump.inc index aff9a3cfce..72af33fe35 100644 --- a/rtl/xtensa/setjump.inc +++ b/rtl/xtensa/setjump.inc @@ -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} + diff --git a/rtl/xtensa/setjumph.inc b/rtl/xtensa/setjumph.inc index 3f289800de..e55a5da5c5 100644 --- a/rtl/xtensa/setjumph.inc +++ b/rtl/xtensa/setjumph.inc @@ -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']; |