From e27db65085c24e4ff88b1cddbe097c0f647557a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Balogh?= Date: Wed, 2 Oct 2013 12:33:52 +0000 Subject: [PATCH] really fixed FillChar and fixed FillWord. fixes 8 tests. git-svn-id: trunk@25621 - --- rtl/m68k/m68k.inc | 85 ++++++++++++++++++++++++----------------------- 1 file 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}