From 34622c257e18676082321200984c5f41061f9546 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 8 May 2021 20:29:41 +0300 Subject: [PATCH] Fix FSINCOS in non-softfloat mode --- fpp_native.cpp | 11 +++++++++++ fpp_softfloat.cpp | 2 +- od-win32/fpp_native_msvc_80bit.cpp | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/fpp_native.cpp b/fpp_native.cpp index 303cb10d..6ed472eb 100644 --- a/fpp_native.cpp +++ b/fpp_native.cpp @@ -916,6 +916,16 @@ static void fp_cos(fpdata *a, fpdata *b) fp_reset_normal_prec(); fp_round(a); } +static void fp_sincos(fpdata *a, fpdata *b, fpdata *c) +{ + fp_normal_prec(); + a->fp = cosl(b->fp); + c->fp = sinl(b->fp); + fp_reset_normal_prec(); + fp_round(a); + fp_round(c); +} + static void fp_sub(fpdata *a, fpdata *b, int prec) { fp_set_prec(prec); @@ -1341,6 +1351,7 @@ void fp_init_native(void) fpp_neg = fp_neg; fpp_acos = fp_acos; fpp_cos = fp_cos; + fpp_sincos = fp_sincos; fpp_getexp = fp_getexp; fpp_getman = fp_getman; fpp_div = fp_div; diff --git a/fpp_softfloat.cpp b/fpp_softfloat.cpp index f1253bb6..ea58bc15 100644 --- a/fpp_softfloat.cpp +++ b/fpp_softfloat.cpp @@ -511,7 +511,7 @@ static void fp_cos(fpdata *a, fpdata *b) { a->fpx = floatx80_cos(b->fpx, &fs); } -static void fp_sincos(fpdata * a, fpdata * b, fpdata * c) +static void fp_sincos(fpdata *a, fpdata *b, fpdata *c) { a->fpx = floatx80_sincos(b->fpx, &c->fpx, &fs); } diff --git a/od-win32/fpp_native_msvc_80bit.cpp b/od-win32/fpp_native_msvc_80bit.cpp index 80bfcc0f..d36f0775 100644 --- a/od-win32/fpp_native_msvc_80bit.cpp +++ b/od-win32/fpp_native_msvc_80bit.cpp @@ -676,6 +676,13 @@ static void fp_acos(fpdata *a, fpdata *b) xfp_acos(&a->rfp, &b->rfp); xfp_resetnormal(a); } +static void fp_sincos(fpdata *a, fpdata *b, fpdata *c) +{ + xfp_setnormal(); + xfp_cos(&a->rfp, &b->rfp); + xfp_sin(&c->rfp, &b->rfp); + xfp_resetnormal(a); +} static void fp_intrz(fpdata *a, fpdata *b) { @@ -1109,6 +1116,7 @@ void fp_init_native_80(void) fpp_neg = fp_neg; fpp_acos = fp_acos; fpp_cos = fp_cos; + fpp_sincos = fp_sincos; fpp_getexp = fp_getexp; fpp_getman = fp_getman; fpp_div = fp_div; -- 2.47.3