Re: [PATCH] newlib: libm: skip "long double" complex functions if long double != double

Jeff Johnston <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAOox84tA2=sPEuFf6rvxukgUZrdL5fhvCBGpWYQy8p3cQqxvkQ@mail.gmail.com>
Thanks Pietro for the patch and Joel for testing it.  The patch has been
pushed.

-- Jeff J.

On Wed, Jun 5, 2024 at 1:01 PM Joel Sherrill <[email protected]>
wrote:

> Thanks. I can confirm that the m68k, sh, and nios2 build with this patch
> applied.
>
> Hopefully Corinna or Jeff can confirm this patch can be committed.
>
> I don't know what would be the ideal solution since long double support can
> disappear within an architecture based on a multilib variable. The initial
> addition of support didn't address below the architecture level.
>
> --joel
>
> On Mon, Jun 3, 2024 at 8:36 PM Pietro Monteiro <[email protected]>
> wrote:
>
>> The rest of "long double" functions aren't compiled with long double
>> and double are not the same.  Do the same for all complex functions.
>>
>> Signed-off-by: Pietro Monteiro <[email protected]>
>> ---
>>  newlib/libm/complex/cargl.c        | 9 ++++-----
>>  newlib/libm/complex/catanl.c       | 4 +++-
>>  newlib/libm/complex/ccoshl.c       | 3 +++
>>  newlib/libm/complex/ccosl.c        | 3 +++
>>  newlib/libm/complex/cephes_subrl.c | 6 ++++++
>>  newlib/libm/complex/cexpl.c        | 3 +++
>>  newlib/libm/complex/clogl.c        | 3 +++
>>  newlib/libm/complex/cpowl.c        | 3 +++
>>  newlib/libm/complex/cprojl.c       | 4 ++++
>>  newlib/libm/complex/csinhl.c       | 3 +++
>>  newlib/libm/complex/csinl.c        | 3 +++
>>  newlib/libm/complex/csqrtl.c       | 3 +++
>>  newlib/libm/complex/ctanhl.c       | 3 +++
>>  newlib/libm/complex/ctanl.c        | 3 +++
>>  14 files changed, 47 insertions(+), 6 deletions(-)
>>
>> diff --git a/newlib/libm/complex/cargl.c b/newlib/libm/complex/cargl.c
>> index 790cffe8f..9560cce6e 100644
>> --- a/newlib/libm/complex/cargl.c
>> +++ b/newlib/libm/complex/cargl.c
>> @@ -7,12 +7,11 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double
>>  cargl(long double complex z)
>> -{
>> -       #ifdef _LDBL_EQ_DBL
>> +{
>>           return carg (z);
>> -       #else
>> -         return atan2l (cimagl (z), creall (z));
>> -       #endif
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/catanl.c b/newlib/libm/complex/catanl.c
>> index 13839ac73..4575623c2 100644
>> --- a/newlib/libm/complex/catanl.c
>> +++ b/newlib/libm/complex/catanl.c
>> @@ -33,6 +33,8 @@
>>  #include <math.h>
>>  #include "cephes_subrl.h"
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  #ifdef __weak_alias
>>  __weak_alias(catanl, _catanl)
>>  #endif
>> @@ -72,4 +74,4 @@ ovrf:
>>         w = HUGE_VALL + HUGE_VALL * I;
>>         return w;
>>  }
>> -
>> +#endif
>> diff --git a/newlib/libm/complex/ccoshl.c b/newlib/libm/complex/ccoshl.c
>> index f59fadf7a..0c54fd1b3 100644
>> --- a/newlib/libm/complex/ccoshl.c
>> +++ b/newlib/libm/complex/ccoshl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  ccoshl(long double complex z)
>>  {
>> @@ -43,3 +45,4 @@ ccoshl(long double complex z)
>>         w = coshl(x) * cosl(y) + (sinhl(x) * sinl(y)) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/ccosl.c b/newlib/libm/complex/ccosl.c
>> index c310f4024..a7619f3ec 100644
>> --- a/newlib/libm/complex/ccosl.c
>> +++ b/newlib/libm/complex/ccosl.c
>> @@ -33,6 +33,8 @@
>>  #include <math.h>
>>  #include "cephes_subrl.h"
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  ccosl(long double complex z)
>>  {
>> @@ -43,3 +45,4 @@ ccosl(long double complex z)
>>         w = cosl(creall(z)) * ch - (sinl(creall(z)) * sh) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/cephes_subrl.c
>> b/newlib/libm/complex/cephes_subrl.c
>> index 8af11df76..1d6d1b527 100644
>> --- a/newlib/libm/complex/cephes_subrl.c
>> +++ b/newlib/libm/complex/cephes_subrl.c
>> @@ -35,6 +35,8 @@
>>
>>  /* calculate cosh and sinh */
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  void
>>  _cchshl(long double x, long double *c, long double *s)
>>  {
>> @@ -51,6 +53,7 @@ _cchshl(long double x, long double *c, long double *s)
>>                 *c = e + ei;
>>         }
>>  }
>> +#endif
>>
>>  /* Program to subtract nearest integer multiple of PI */
>>
>> @@ -85,6 +88,8 @@ _redupil(long double x)
>>
>>  /* Taylor series expansion for cosh(2y) - cos(2x) */
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double
>>  _ctansl(long double complex z)
>>  {
>> @@ -126,3 +131,4 @@ _ctansl(long double complex z)
>>         } while (fabsl(t/d) > MACHEPL);
>>         return d;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/cexpl.c b/newlib/libm/complex/cexpl.c
>> index 8b56634ba..24fb40af0 100644
>> --- a/newlib/libm/complex/cexpl.c
>> +++ b/newlib/libm/complex/cexpl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  cexpl(long double complex z)
>>  {
>> @@ -44,3 +46,4 @@ cexpl(long double complex z)
>>         w = r * cosl(y) + r * sinl(y) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/clogl.c b/newlib/libm/complex/clogl.c
>> index 3644a44fc..9befec9ba 100644
>> --- a/newlib/libm/complex/clogl.c
>> +++ b/newlib/libm/complex/clogl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  clogl(long double complex z)
>>  {
>> @@ -44,3 +46,4 @@ clogl(long double complex z)
>>         w = p + rr * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/cpowl.c b/newlib/libm/complex/cpowl.c
>> index 85c2c20f2..46dfd1386 100644
>> --- a/newlib/libm/complex/cpowl.c
>> +++ b/newlib/libm/complex/cpowl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  cpowl(long double complex a, long double complex z)
>>  {
>> @@ -54,3 +56,4 @@ cpowl(long double complex a, long double complex z)
>>         w = r * cosl(theta) + (r * sinl(theta)) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/cprojl.c b/newlib/libm/complex/cprojl.c
>> index e71c77353..28e43ed6d 100644
>> --- a/newlib/libm/complex/cprojl.c
>> +++ b/newlib/libm/complex/cprojl.c
>> @@ -45,6 +45,9 @@ __RCSID("$NetBSD: cprojl.c,v 1.7 2014/10/10 00:48:18
>> christos Exp $");
>>   *
>>   * INFINITY + I * copysign(0.0, cimag(z))
>>   */
>> +
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  cprojl(long double complex z)
>>  {
>> @@ -62,3 +65,4 @@ cprojl(long double complex z)
>>
>>         return (w.z);
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/csinhl.c b/newlib/libm/complex/csinhl.c
>> index 44ed05037..3187739a0 100644
>> --- a/newlib/libm/complex/csinhl.c
>> +++ b/newlib/libm/complex/csinhl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  csinhl(long double complex z)
>>  {
>> @@ -43,3 +45,4 @@ csinhl(long double complex z)
>>         w = sinhl(x) * cosl(y) + (coshl(x) * sinl(y)) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/csinl.c b/newlib/libm/complex/csinl.c
>> index 2b96c7225..2c087d5d3 100644
>> --- a/newlib/libm/complex/csinl.c
>> +++ b/newlib/libm/complex/csinl.c
>> @@ -33,6 +33,8 @@
>>  #include <math.h>
>>  #include "cephes_subrl.h"
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  csinl(long double complex z)
>>  {
>> @@ -43,3 +45,4 @@ csinl(long double complex z)
>>         w = sinl(creall(z)) * ch + (cosl(creall(z)) * sh) * I;
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/csqrtl.c b/newlib/libm/complex/csqrtl.c
>> index c10a1264a..cf9adf873 100644
>> --- a/newlib/libm/complex/csqrtl.c
>> +++ b/newlib/libm/complex/csqrtl.c
>> @@ -49,6 +49,8 @@ __RCSID("$NetBSD: csqrtl.c,v 1.2 2014/10/11 00:43:51
>> christos Exp $");
>>
>>  #define cpackl(r, i) ((r) + (i) * I)
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  csqrtl(long double complex z)
>>  {
>> @@ -110,3 +112,4 @@ csqrtl(long double complex z)
>>         else
>>                 return (result);
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/ctanhl.c b/newlib/libm/complex/ctanhl.c
>> index 1db886f63..bbc47467b 100644
>> --- a/newlib/libm/complex/ctanhl.c
>> +++ b/newlib/libm/complex/ctanhl.c
>> @@ -32,6 +32,8 @@
>>  #include <complex.h>
>>  #include <math.h>
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  ctanhl(long double complex z)
>>  {
>> @@ -45,3 +47,4 @@ ctanhl(long double complex z)
>>
>>         return w;
>>  }
>> +#endif
>> diff --git a/newlib/libm/complex/ctanl.c b/newlib/libm/complex/ctanl.c
>> index c5c887c74..9c09ca3cd 100644
>> --- a/newlib/libm/complex/ctanl.c
>> +++ b/newlib/libm/complex/ctanl.c
>> @@ -34,6 +34,8 @@
>>  #include <math.h>
>>  #include "cephes_subrl.h"
>>
>> +/* On platforms where long double is as wide as double.  */
>> +#ifdef _LDBL_EQ_DBL
>>  long double complex
>>  ctanl(long double complex z)
>>  {
>> @@ -54,3 +56,4 @@ ctanl(long double complex z)
>>         w = sinl(2.0L * creall(z)) / d + (sinhl(2.0L * cimagl(z)) / d) *
>> I;
>>         return w;
>>  }
>> +#endif
>> --
>> 2.39.2
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.