diff options
author | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-10-18 20:11:45 +0000 |
---|---|---|
committer | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2012-10-18 20:11:45 +0000 |
commit | 4472f6f74bb4273f34bfccb93675a0083a503984 (patch) | |
tree | b72eec56e8bd2d48685ae49aa3ab5b78c59f4f89 /rtl/m68k | |
parent | 55c380ed37592d08e577d847f0fbf8be313e0e60 (diff) | |
download | fpc-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.inc | 25 |
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']; |