summaryrefslogtreecommitdiff
path: root/rtl/xtensa
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-08-21 21:15:36 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-08-21 21:15:36 +0000
commit63066b36d1805092109febe0160bac118c1e86eb (patch)
treec1f4512f7dbb2ecea72d4606258393d184eb3826 /rtl/xtensa
parent73af5a2e09fa279e024b486c272eb803c1d306e0 (diff)
downloadfpc-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.inc35
-rw-r--r--rtl/xtensa/setjumph.inc9
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'];