From 1e48c7c93095a2e3cac6367f1e8a6ea3acdf5e93 Mon Sep 17 00:00:00 2001 From: svenbarth Date: Sun, 16 Feb 2014 21:21:40 +0000 Subject: [PATCH] Now that spilling correctly works on m68k we definitely need to store/restore the registers inside the FpSyscall functions. Fixes quite some tests. * rtl/linux/m68k/syscall.inc: Remove "assembler" modifier and instead use an inline asm block with an accurate list of modified registers so that the compiler correctly stores/restores them git-svn-id: trunk@26804 - --- rtl/linux/m68k/syscall.inc | 43 +++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/rtl/linux/m68k/syscall.inc b/rtl/linux/m68k/syscall.inc index 881a8d3322..ef9831e95d 100644 --- a/rtl/linux/m68k/syscall.inc +++ b/rtl/linux/m68k/syscall.inc @@ -22,34 +22,41 @@ } -function FpSysCall(sysnr:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL0']; +function FpSysCall(sysnr:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL0']; +begin asm move.l sysnr, d0 trap #0 move.l d0, @Result - end; + end ['d0']; +end; -function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL1']; +function FpSysCall(sysnr,param1:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL1']; +begin asm move.l sysnr, d0 move.l param1, d1 trap #0 move.l d0, @Result - end; + end ['d0', 'd1']; +end; -function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL2']; +function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL2']; +begin asm move.l sysnr, d0 move.l param1, d1 move.l param2, d2 trap #0 move.l d0, @Result - end; + end ['d0', 'd1', 'd2']; +end; -function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL3']; +function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL3']; +begin asm move.l sysnr, d0 move.l param1, d1 @@ -57,10 +64,11 @@ function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; move.l param3, d3 trap #0 move.l d0, @Result - end; + end ['d0', 'd1', 'd2', 'd3']; +end; - -function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL4']; +function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL4']; +begin asm move.l sysnr, d0 move.l param1, d1 @@ -69,10 +77,12 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse move.l param4, d4 trap #0 move.l d0, @Result - end; + end ['d0', 'd1', 'd2', 'd3', 'd4']; +end; -function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL5']; +function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL5']; +begin asm move.l sysnr, d0 move.l param1, d1 @@ -82,10 +92,12 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResul move.l param5, d5 trap #0 move.l d0, @Result - end; + end ['d0', 'd1', 'd2', 'd3', 'd4', 'd5']; +end; -function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; assembler; [public,alias:'FPC_SYSCALL6']; +function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult; [public,alias:'FPC_SYSCALL6']; +begin asm move.l sysnr, d0 move.l param1, d1 @@ -96,5 +108,6 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS move.l param6, a0 trap #0 move.l d0, @Result - end; + end ['d0', 'd1', 'd2', 'd3', 'd4', 'd5', 'a0']; +end;