From 822b46009626d3893cf23c2159d3a632f2c1168a Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 25 Apr 2021 19:24:18 +0000 Subject: [PATCH] * fix bootstrapping on aarch64-linux with 3.2.x git-svn-id: trunk@49264 - --- rtl/aarch64/math.inc | 56 ++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/rtl/aarch64/math.inc b/rtl/aarch64/math.inc index a526128870..6bdaebbcff 100644 --- a/rtl/aarch64/math.inc +++ b/rtl/aarch64/math.inc @@ -51,27 +51,6 @@ {$endif FPC_SYSTEM_HAS_SQRT} - {$ifndef FPC_SYSTEM_HAS_INT} - {$define FPC_SYSTEM_HAS_INT} - function fpc_int_real(d : ValReal) : ValReal;compilerproc; - begin - { Function is handled internal in the compiler } - runerror(207); - result:=0; - 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; - end; - {$endif FPC_SYSTEM_HAS_TRUNC} - {$ifndef VER3_2} {$ifndef FPC_SYSTEM_HAS_FRAC} {$define FPC_SYSTEM_HAS_FRAC} @@ -84,14 +63,35 @@ {$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;assembler;nostackframe;compilerproc; + asm + // { round to signed integer towards zero } + fcvtzs x0,d0 + end; + {$endif FPC_SYSTEM_HAS_TRUNC} + + {$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} - -