| @@ -95,13 +95,13 @@ static inline double lol_fctid(double x) INLINEATTR; | |||
| static inline double lol_fctidz(double x) INLINEATTR; | |||
| static inline double lol_fcfid(double x) INLINEATTR; | |||
| static inline double lol_frsqrte(double x) INLINEATTR; | |||
| #endif | |||
| static inline double lol_fsel(double c, double gte, double lt) INLINEATTR; | |||
| static inline double lol_fres(double x) INLINEATTR; | |||
| static inline double lol_fdiv(double a, double b) INLINEATTR; | |||
| #endif | |||
| static inline double lol_fabs(double x) INLINEATTR; | |||
| static inline double lol_round(double x) INLINEATTR; | |||
| static inline double lol_trunc(double x) INLINEATTR; | |||
| static inline double lol_round(double x) INLINEATTR; | |||
| static inline double lol_trunc(double x) INLINEATTR; | |||
| #if defined __CELLOS_LV2__ | |||
| static inline double lol_fctid(double x) | |||
| @@ -111,7 +111,7 @@ static inline double lol_fctid(double x) | |||
| r = __builtin_fctid(x); | |||
| #else | |||
| __asm__ ("fctid %0, %1" | |||
| : "=f"(r) : "f"(x)); | |||
| : "=f" (r) : "f" (x)); | |||
| #endif | |||
| return r; | |||
| } | |||
| @@ -123,7 +123,7 @@ static double lol_fctidz(double x) | |||
| r = __builtin_fctidz(x); | |||
| #else | |||
| __asm__ ("fctidz %0, %1" | |||
| : "=f"(r) : "f"(x)); | |||
| : "=f" (r) : "f" (x)); | |||
| #endif | |||
| return r; | |||
| } | |||
| @@ -135,7 +135,7 @@ static double lol_fcfid(double x) | |||
| r = __builtin_fcfid(x); | |||
| #else | |||
| __asm__ ("fcfid %0, %1" | |||
| : "=f"(r) : "f"(x)); | |||
| : "=f" (r) : "f" (x)); | |||
| #endif | |||
| return r; | |||
| } | |||
| @@ -147,11 +147,10 @@ static double lol_frsqrte(double x) | |||
| #else | |||
| double r; | |||
| __asm__ ("frsqrte %0, %1" | |||
| : "=f"(r) : "f"(x)); | |||
| : "=f" (r) : "f" (x)); | |||
| return r; | |||
| #endif | |||
| } | |||
| #endif /* __CELLOS_LV2__ */ | |||
| static inline double lol_fsel(double c, double gte, double lt) | |||
| { | |||
| @@ -160,13 +159,38 @@ static inline double lol_fsel(double c, double gte, double lt) | |||
| #elif defined __CELLOS_LV2__ | |||
| double r; | |||
| __asm__ ("fsel %0, %1, %2, %3" | |||
| : "=f"(r) : "f"(c), "f"(gte), "f"(lt)); | |||
| : "=f" (r) : "f" (c), "f" (gte), "f" (lt)); | |||
| return r; | |||
| #else | |||
| return (c >= 0) ? gte : lt; | |||
| #endif | |||
| } | |||
| static inline double lol_fres(double x) | |||
| { | |||
| double ret; | |||
| #if defined __SNC__ | |||
| ret = __builtin_fre(x); | |||
| #else | |||
| __asm__ ("fres %0, %1" | |||
| : "=f" (ret) : "f" (x)); | |||
| #endif | |||
| return ret; | |||
| } | |||
| static inline double lol_fdiv(double a, double b) | |||
| { | |||
| /* Estimate */ | |||
| double x0 = lol_fres(b); | |||
| /* Two steps of Newton-Raphson */ | |||
| x0 = (b * x0 - ONE) * -x0 + x0; | |||
| x0 = (b * x0 - ONE) * -x0 + x0; | |||
| return a * x0; | |||
| } | |||
| #endif /* __CELLOS_LV2__ */ | |||
| static inline double lol_fabs(double x) | |||
| { | |||
| #if defined __CELLOS_LV2__ && defined __SNC__ | |||
| @@ -174,7 +198,7 @@ static inline double lol_fabs(double x) | |||
| #elif defined __CELLOS_LV2__ | |||
| double r; | |||
| __asm__ ("fabs %0, %1" | |||
| : "=f"(r) : "f"(x)); | |||
| : "=f" (r) : "f" (x)); | |||
| return r; | |||
| #else | |||
| return __builtin_fabs(x); | |||
| @@ -470,7 +494,7 @@ double lol_tan(double x) | |||
| #if defined __CELLOS_LV2__ | |||
| double is_cos_not_zero = absc - VERY_SMALL_NUMBER; | |||
| cosx = lol_fsel(is_cos_not_zero, cosx, VERY_SMALL_NUMBER); | |||
| return __fdiv(sinx, cosx); | |||
| return lol_fdiv(sinx, cosx); | |||
| #else | |||
| if (__unlikely(absc < VERY_SMALL_NUMBER)) | |||
| cosx = VERY_SMALL_NUMBER; | |||