Jelajahi Sumber

* fix bootstrapping on aarch64-linux with 3.2.x

git-svn-id: trunk@49264 -
florian 4 tahun lalu
induk
melakukan
822b460096
1 mengubah file dengan 26 tambahan dan 26 penghapusan
  1. 26 26
      rtl/aarch64/math.inc

+ 26 - 26
rtl/aarch64/math.inc

@@ -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}
-
-