瀏覽代碼

rtl/m68k/m68k.inc:
* fillchar & fillword: check whether the count is 0 before filling anything

This fixes cases like "Writeln('')" which is used inside InternalExit if an unhandled exception happened.

git-svn-id: trunk@23431 -

svenbarth 12 年之前
父節點
當前提交
f5e94a02cd
共有 1 個文件被更改,包括 8 次插入3 次删除
  1. 8 3
      rtl/m68k/m68k.inc

+ 8 - 3
rtl/m68k/m68k.inc

@@ -92,6 +92,8 @@ procedure FillChar(var x;count:longint;value:byte); assembler;
      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
      cmpi.l #65535, d1     { check, if this is a word move }
      ble    @LMEMSET3      { use fast dbra mode            }
      bra @LMEMSET2
@@ -318,9 +320,11 @@ end;
 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               }
+     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)+
@@ -328,6 +332,7 @@ procedure fillword(var x;count : longint;value : word);
      subq.l #1,d1
      cmp.b #-1,d1
      bne  @LMEMSET11
+   @LMEMSET3:
     end ['d0','d1','a0'];
   end;