summaryrefslogtreecommitdiff
path: root/rtl/m68k
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-10-18 20:11:45 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2012-10-18 20:11:45 +0000
commit4472f6f74bb4273f34bfccb93675a0083a503984 (patch)
treeb72eec56e8bd2d48685ae49aa3ab5b78c59f4f89 /rtl/m68k
parent55c380ed37592d08e577d847f0fbf8be313e0e60 (diff)
downloadfpc-4472f6f74bb4273f34bfccb93675a0083a503984.tar.gz
Replace DBRA instruction for Coldfire with a SUB/BRA combination in the for-loop-code-
generation and the assembly helpers in the RTL as DBRA is not supported by Coldfire. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@22740 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/m68k')
-rw-r--r--rtl/m68k/m68k.inc25
1 files changed, 25 insertions, 0 deletions
diff --git a/rtl/m68k/m68k.inc b/rtl/m68k/m68k.inc
index d007587ab5..8a28cc3590 100644
--- a/rtl/m68k/m68k.inc
+++ b/rtl/m68k/m68k.inc
@@ -95,7 +95,12 @@ procedure FillChar(var x;count:longint;value:byte); assembler;
@LMEMSET4: { fast loop mode section 68010+ }
move.b d0,(a0)+
@LMEMSET3:
+{$ifdef CPUCOLDFIRE}
+ sub.l #1,d1
+ bmi @LMEMSET4
+{$else}
dbra d1,@LMEMSET4
+{$endif}
@LMEMSET5:
end ['d0','d1','a0'];
@@ -137,7 +142,12 @@ asm
@LMSTRCOPY56: { 68010 Fast loop mode }
move.b (a0)+,(a1)+
@LMSTRCOPY55:
+{$ifdef CPUCOLDFIRE}
+ sub.l #1,d1
+ bmi @LMSTRCOPY56
+{$else}
dbra d1,@LMSTRCOPY56
+{$endif}
@Lend:
end;
@@ -172,7 +182,12 @@ procedure strconcat(s1,s2 : pointer);[public,alias: 'STRCONCAT'];
@Loop:
move.b (a1)+,(a0)+ { s1[i] := s2[i]; }
@ALoop:
+{$ifdef CPUCOLDFIRE}
+ sub.l #1,d6
+ bmi @Loop
+{$else}
dbra d6,@Loop
+{$endif}
move.l s1,a0
add.b d0,(a0) { change to new string length }
@Lend:
@@ -270,12 +285,22 @@ begin
@LMOVE01:
move.b -(a0),-(a1) { (s < d) copy loop }
@LMOVE02:
+{$ifdef CPUCOLDFIRE}
+ sub.l #1,d0
+ bmi @LMOVE01
+{$else}
dbra d0,@LMOVE01
+{$endif}
bra @LMOVE5
@LMOVE03:
move.b (a0)+,(a1)+ { (s >= d) copy loop }
@LMOVE04:
+{$ifdef CPUCOLDFIRE}
+ sub.l #1,d0
+ bmi @LMOVE03
+{$else}
dbra d0,@LMOVE03
+{$endif}
{ end fast loop mode }
@LMOVE5:
end ['d0','a0','a1'];