diff --git a/rtl/i8086/i8086.inc b/rtl/i8086/i8086.inc index 5b9451ca60..cf5ca8e780 100644 --- a/rtl/i8086/i8086.inc +++ b/rtl/i8086/i8086.inc @@ -20,12 +20,11 @@ procedure fpc_cpuinit; {$ifndef FPC_SYSTEM_HAS_FILLCHAR} {$define FPC_SYSTEM_HAS_FILLCHAR} -procedure FillChar(var x;count:SizeInt;value:byte);assembler;nostackframe; +procedure FillChar(var x;count:SizeUInt;value:byte);assembler;nostackframe; asm mov bx, sp mov cx, ss:[bx + 4 + extra_param_offset] // count - or cx, cx - jle @@Done + jcxz @@Done {$ifdef FPC_X86_DATA_NEAR} mov di, ss:[bx + 6 + extra_param_offset] // @x mov ax, ds @@ -112,12 +111,11 @@ end; {$ifndef FPC_SYSTEM_HAS_MOVE} {$define FPC_SYSTEM_HAS_MOVE} -procedure Move(const source;var dest;count:SizeInt);[public, alias: 'FPC_MOVE'];assembler;nostackframe; +procedure Move(const source;var dest;count:SizeUInt);[public, alias: 'FPC_MOVE'];assembler;nostackframe; asm mov bx, sp mov cx, ss:[bx + 2 + extra_param_offset] // count - or cx, cx - jle @@Done + jcxz @@Done mov ax, ds // for far data models, backup ds; for near data models, use to initialize es {$ifdef FPC_X86_DATA_NEAR} diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc index b832f6c51d..4c003a3523 100644 --- a/rtl/inc/system.inc +++ b/rtl/inc/system.inc @@ -272,19 +272,19 @@ function do_isdevice(handle:thandle):boolean;forward; {$Error Can't determine processor type !} {$endif} -procedure fillchar(var x;count : SizeInt;value : boolean); +procedure fillchar(var x;count : {$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};value : boolean); begin fillchar(x,count,byte(value)); end; -procedure fillchar(var x;count : SizeInt;value : char); +procedure fillchar(var x;count : {$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};value : char); begin fillchar(x,count,byte(value)); end; -procedure FillByte (var x;count : SizeInt;value : byte ); +procedure FillByte (var x;count : {$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};value : byte ); begin FillChar (X,Count,VALUE); end; diff --git a/rtl/inc/systemh.inc b/rtl/inc/systemh.inc index ca4896d9ce..48454a0e28 100644 --- a/rtl/inc/systemh.inc +++ b/rtl/inc/systemh.inc @@ -153,6 +153,9 @@ Type ValReal = Extended; {$endif} + {$define MOVE_HAS_SIZEUINT_COUNT} + {$define FILLCHAR_HAS_SIZEUINT_COUNT} + {$if defined(FPC_MM_TINY)} {$define FPC_X86_CODE_NEAR} {$define FPC_X86_DATA_NEAR} @@ -774,11 +777,11 @@ function StackTop: Pointer; {$endif} {$endif} -Procedure Move(const source;var dest;count:SizeInt); -Procedure FillChar(var x;count:SizeInt;Value:Byte); -Procedure FillChar(var x;count:SizeInt;Value:Boolean); -Procedure FillChar(var x;count:SizeInt;Value:Char); -procedure FillByte(var x;count:SizeInt;value:byte); +Procedure Move(const source;var dest;count:{$ifdef MOVE_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif}); +Procedure FillChar(var x;count:{$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};Value:Byte); +Procedure FillChar(var x;count:{$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};Value:Boolean); +Procedure FillChar(var x;count:{$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};Value:Char); +procedure FillByte(var x;count:{$ifdef FILLCHAR_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif};value:byte); Procedure FillWord(var x;count:SizeInt;Value:Word); procedure FillDWord(var x;count:SizeInt;value:DWord); procedure FillQWord(var x;count:SizeInt;value:QWord);