summaryrefslogtreecommitdiff
path: root/rtl/m68k
diff options
context:
space:
mode:
authorkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-10-02 12:33:52 +0000
committerkaroly <karoly@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-10-02 12:33:52 +0000
commitc4ada71f42eaa2ea1534e72e4308baccc268a26b (patch)
tree4e6526de41562f192d269f9fac38cef9a1394352 /rtl/m68k
parent3b940dc8d09e16e7ed2311d003f5efefe3f38270 (diff)
downloadfpc-c4ada71f42eaa2ea1534e72e4308baccc268a26b.tar.gz
really fixed FillChar and fixed FillWord. fixes 8 tests.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@25621 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/m68k')
-rw-r--r--rtl/m68k/m68k.inc85
1 files changed, 43 insertions, 42 deletions
diff --git a/rtl/m68k/m68k.inc b/rtl/m68k/m68k.inc
index 1cbbde2c23..06c1f1ab9d 100644
--- a/rtl/m68k/m68k.inc
+++ b/rtl/m68k/m68k.inc
@@ -87,34 +87,36 @@ end;
{$define FPC_SYSTEM_HAS_FILLCHAR}
-procedure FillChar(var x;count:longint;value:byte); assembler;
- asm
- move.l x, a0 { destination }
- move.l count, d1 { number of bytes to fill }
- move.b value, d0 { fill data }
- tst.l d1 { anything to fill at all? }
- beq @LMEMSET5
+procedure FillChar(var x; count : longint; value : byte); assembler;
+asm
+ move.l x, a0 { destination }
+ move.l count, d1 { number of bytes to fill }
+{ FIXME: this should be move.b, but everything is pushed as long on
+ the stack ATM (KB) }
+ move.l value, d0 { fill data }
+ tst.l d1 { anything to fill at all? }
+ beq @LMEMSET5
{$ifdef CPUM68K_HAS_DBRA}
- cmpi.l #65535, d1 { check, if this is a word move }
- ble @LMEMSET3 { use fast dbra mode }
+{ FIXME: Any reason why not always just use DBRA mode on
+ CPUs which support it? (KB) }
+ cmpi.l #65535, d1 { check, if this is a word move }
+ ble @LMEMSET3 { use fast dbra mode }
{$endif CPUM68K_HAS_DBRA}
- bra @LMEMSET2
- @LMEMSET1:
- move.b d0,(a0)+
- @LMEMSET2:
- subq.l #1,d1
- bpl @LMEMSET1
- bra @LMEMSET5 { finished slow mode , exit }
-
+ bra @LMEMSET2
+@LMEMSET1:
+ move.b d0,(a0)+
+@LMEMSET2:
+ subq.l #1,d1
+ bpl @LMEMSET1
+ bra @LMEMSET5 { finished slow mode , exit }
{$ifdef CPUM68K_HAS_DBRA}
- @LMEMSET4: { fast loop mode section 68010+ }
- move.b d0,(a0)+
- @LMEMSET3:
- dbra d1,@LMEMSET4
+@LMEMSET4: { fast loop mode section 68010+ }
+ move.b d0,(a0)+
+@LMEMSET3:
+ dbra d1,@LMEMSET4
{$endif CPUM68K_HAS_DBRA}
-
- @LMEMSET5:
- end ['d0','d1','a0'];
+@LMEMSET5:
+end;
{$ifdef dummy}
@@ -315,24 +317,23 @@ end;
{$define FPC_SYSTEM_HAS_FILLWORD}
-procedure fillword(var x;count : longint;value : word);
- begin
- asm
- move.l x, a0 { destination }
- move.l count, d1 { number of bytes to fill }
- move.w value, d0 { fill data }
- tst.l d1 { anything to fill at all? }
- beq @LMEMSET3
- bra @LMEMSET21
- @LMEMSET11:
- move.w d0,(a0)+
- @LMEMSET21:
- subq.l #1,d1
- cmp.b #-1,d1
- bne @LMEMSET11
- @LMEMSET3:
- end ['d0','d1','a0'];
- end;
+procedure FillWord(var x; count : longint; value : word); assembler;
+asm
+ move.l x, a0 { destination }
+ move.l count, d1 { number of bytes to fill }
+{ FIXME: this should be move.w, but everything is pushed as long on
+ the stack ATM (KB) }
+ move.l value, d0 { fill data }
+ tst.l d1 { anything to fill at all? }
+ beq @LMEMSET3
+ bra @LMEMSET21
+@LMEMSET11:
+ move.w d0,(a0)+
+@LMEMSET21:
+ subq.l #1,d1
+ bpl @LMEMSET11
+@LMEMSET3:
+end;
{$define FPC_SYSTEM_HAS_ABS_LONGINT}