Browse Source

+ round/trunc/int for AArch64

git-svn-id: trunk@29881 -
Jonas Maebe 10 years ago
parent
commit
4c7f75c93b
2 changed files with 87 additions and 0 deletions
  1. 1 0
      .gitattributes
  2. 86 0
      rtl/aarch64/math.inc

+ 1 - 0
.gitattributes

@@ -7869,6 +7869,7 @@ rtl/Makefile svneol=native#text/plain
 rtl/Makefile.fpc svneol=native#text/plain
 rtl/README.txt svneol=native#text/plain
 rtl/aarch64/int64p.inc svneol=native#text/plain
+rtl/aarch64/math.inc svneol=native#text/plain
 rtl/aarch64/mathu.inc svneol=native#text/plain
 rtl/aix/Makefile svneol=native#text/plain
 rtl/aix/Makefile.fpc svneol=native#text/plain

+ 86 - 0
rtl/aarch64/math.inc

@@ -0,0 +1,86 @@
+{
+    Implementation of mathematical routines for x86_64
+
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2005 by the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+
+{****************************************************************************
+                       Floating point type routines
+ ****************************************************************************}
+
+    {$ifndef FPC_SYSTEM_HAS_ABS}
+    {$define FPC_SYSTEM_HAS_ABS}
+    function fpc_abs_real(d : ValReal) : ValReal;compilerproc;
+    begin
+      { Function is handled internal in the compiler }
+      runerror(207);
+      result:=0;
+    end;
+    {$endif FPC_SYSTEM_HAS_ABS}
+
+
+    {$ifndef FPC_SYSTEM_HAS_SQR}
+    {$define FPC_SYSTEM_HAS_SQR}
+    function fpc_sqr_real(d : ValReal) : ValReal;compilerproc;
+    begin
+      { Function is handled internal in the compiler }
+      runerror(207);
+      result:=0;
+    end;
+    {$endif FPC_SYSTEM_HAS_SQR}
+
+
+    {$ifndef FPC_SYSTEM_HAS_SQRT}
+    {$define FPC_SYSTEM_HAS_SQRT}
+    function fpc_sqrt_real(d : ValReal) : ValReal;compilerproc;
+    begin
+      { Function is handled internal in the compiler }
+      runerror(207);
+      result:=0;
+    end;
+    {$endif FPC_SYSTEM_HAS_SQRT}
+
+
+    {$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;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}
+
+