Explorar o código

WIP: Enable build on aarch64

Graham Inggs %!s(int64=8) %!d(string=hai) anos
pai
achega
019990ecb7
Modificáronse 4 ficheiros con 12 adicións e 6 borrados
  1. 3 0
      Make.inc
  2. 4 4
      bsdsrc/b_tgamma.c
  3. 1 1
      include/openlibm_fenv.h
  4. 4 1
      include/openlibm_fenv_arm.h

+ 3 - 0
Make.inc

@@ -73,6 +73,9 @@ REAL_ARCH := $(ARCH)
 ifeq ($(findstring arm,$(ARCH)),arm)
 override ARCH := arm
 endif
+ifeq ($(ARCH),aarch64)
+override ARCH := arm
+endif
 ifeq ($(findstring powerpc,$(ARCH)),powerpc)
 override ARCH := powerpc
 endif

+ 4 - 4
bsdsrc/b_tgamma.c

@@ -128,16 +128,16 @@ tgamma(x)
 {
 	struct Double u;
 
-	if (x >= 6) {
+	if (isgreaterequal(x, 6)) {
 		if(x > 171.63)
 			return (x / zero);
 		u = large_gam(x);
 		return(__exp__D(u.a, u.b));
-	} else if (x >= 1.0 + LEFT + x0)
+	} else if (isgreaterequal(x, 1.0 + LEFT + x0))
 		return (small_gam(x));
-	else if (x > 1.e-17)
+	else if (isgreater(x, 1.e-17))
 		return (smaller_gam(x));
-	else if (x > -1.e-17) {
+	else if (isgreater(x, -1.e-17)) {
 		if (x != 0.0)
 			u.a = one - tiny;	/* raise inexact */
 		return (one/x);

+ 1 - 1
include/openlibm_fenv.h

@@ -2,7 +2,7 @@
 #include <fenv.h>
 #else /* !OPENLIBM_USE_HOST_FENV_H */
 
-#if defined(__arm__)
+#if defined(__aarch64__) || defined(__arm__)
 #include <openlibm_fenv_arm.h>
 #elif defined(__x86_64__)
 #include <openlibm_fenv_amd64.h>

+ 4 - 1
include/openlibm_fenv_arm.h

@@ -64,7 +64,10 @@ extern const fenv_t	__fe_dfl_env;
 #define _FPUSW_SHIFT	16
 #define	_ENABLE_MASK	(FE_ALL_EXCEPT << _FPUSW_SHIFT)
 
-#ifdef	ARM_HARD_FLOAT
+#if defined(__aarch64__)
+#define __rfs(__fpsr)   __asm __volatile("mrs %0,fpsr" : "=r" (*(__fpsr)))
+#define __wfs(__fpsr)   __asm __volatile("msr fpsr,%0" : : "r" (__fpsr))
+#elif defined(ARM_HARD_FLOAT)
 #define	__rfs(__fpsr)	__asm __volatile("rfs %0" : "=r" (*(__fpsr)))
 #define	__wfs(__fpsr)	__asm __volatile("wfs %0" : : "r" (__fpsr))
 #else