|
@@ -51,47 +51,47 @@
|
|
|
{$endif FPC_SYSTEM_HAS_SQRT}
|
|
|
|
|
|
|
|
|
- {$ifndef FPC_SYSTEM_HAS_INT}
|
|
|
- {$define FPC_SYSTEM_HAS_INT}
|
|
|
- function fpc_int_real(d : ValReal) : ValReal;compilerproc;
|
|
|
+{$ifndef VER3_2}
|
|
|
+ {$ifndef FPC_SYSTEM_HAS_FRAC}
|
|
|
+ {$define FPC_SYSTEM_HAS_FRAC}
|
|
|
+ function fpc_frac_real(d : ValReal) : ValReal;compilerproc;
|
|
|
begin
|
|
|
{ Function is handled internal in the compiler }
|
|
|
runerror(207);
|
|
|
result:=0;
|
|
|
end;
|
|
|
+ {$endif FPC_SYSTEM_HAS_FRAC}
|
|
|
+{$endif VER3_2}
|
|
|
+
|
|
|
+
|
|
|
+ {$ifndef FPC_SYSTEM_HAS_INT}
|
|
|
+ {$define FPC_SYSTEM_HAS_INT}
|
|
|
+ function fpc_int_real(d : ValReal) : ValReal;assembler;nostackframe;compilerproc;
|
|
|
+ asm
|
|
|
+ // { round as floating point towards zero }
|
|
|
+ frintz d0,d0
|
|
|
+ end;
|
|
|
{$endif FPC_SYSTEM_HAS_INT}
|
|
|
|
|
|
|
|
|
{$ifndef FPC_SYSTEM_HAS_TRUNC}
|
|
|
{$define FPC_SYSTEM_HAS_TRUNC}
|
|
|
- function fpc_trunc_real(d : ValReal) : int64;compilerproc;
|
|
|
- begin
|
|
|
- { Function is handled internal in the compiler }
|
|
|
- runerror(207);
|
|
|
- result:=0;
|
|
|
+ function fpc_trunc_real(d : ValReal) : int64;assembler;nostackframe;compilerproc;
|
|
|
+ asm
|
|
|
+ // { round to signed integer towards zero }
|
|
|
+ fcvtzs x0,d0
|
|
|
end;
|
|
|
{$endif FPC_SYSTEM_HAS_TRUNC}
|
|
|
|
|
|
-{$ifndef VER3_2}
|
|
|
- {$ifndef FPC_SYSTEM_HAS_FRAC}
|
|
|
- {$define FPC_SYSTEM_HAS_FRAC}
|
|
|
- function fpc_frac_real(d : ValReal) : ValReal;compilerproc;
|
|
|
- begin
|
|
|
- { Function is handled internal in the compiler }
|
|
|
- runerror(207);
|
|
|
- result:=0;
|
|
|
- end;
|
|
|
- {$endif FPC_SYSTEM_HAS_FRAC}
|
|
|
-{$endif VER3_2}
|
|
|
|
|
|
{$ifndef FPC_SYSTEM_HAS_ROUND}
|
|
|
{$define FPC_SYSTEM_HAS_ROUND}
|
|
|
- function fpc_round_real(d : ValReal) : int64;compilerproc;
|
|
|
- begin
|
|
|
- { Function is handled internal in the compiler }
|
|
|
- runerror(207);
|
|
|
- result:=0;
|
|
|
+ function fpc_round_real(d : ValReal) : int64;assembler;nostackframe;compilerproc;
|
|
|
+ asm
|
|
|
+ // { round as floating point using current rounding mode }
|
|
|
+ frintx d0,d0
|
|
|
+ // { convert to signed integer rounding towards zero (there's no "round to
|
|
|
+ // integer using current rounding mode") }
|
|
|
+ fcvtzs x0,d0
|
|
|
end;
|
|
|
{$endif FPC_SYSTEM_HAS_ROUND}
|
|
|
-
|
|
|
-
|