https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107631

Iain Sandoe <iains at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-12-20
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Iain Sandoe <iains at gcc dot gnu.org> ---
as discussed on irc, these functions do no exist on Darwin (and the
significand* set will likely be missing on several other targets).

Posix has obsoleted scalb* which should be replaced with scalbn*

===

I hacked the implementation thus:
(with this, on x86_64 darwin, we have 11k passes and 33 fails)

[PATCH] gm2: hack the builtins for scalb and significand

---
 gcc/m2/gm2-libs/Builtins.mod | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/gcc/m2/gm2-libs/Builtins.mod b/gcc/m2/gm2-libs/Builtins.mod
index c679259dc3c..f4d4ded06b1 100644
--- a/gcc/m2/gm2-libs/Builtins.mod
+++ b/gcc/m2/gm2-libs/Builtins.mod
@@ -222,21 +222,23 @@ BEGIN
    RETURN cbuiltin.ilogbl (x)
 END ilogbl ;

+
 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_significand)) significand (r:
REAL) : REAL ;
 BEGIN
-   RETURN cbuiltin.significand (r)
+   RETURN cbuiltin.scalbn (r, -cbuiltin.ilogb (r))
 END significand ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_significandf)) significandf
(s: SHORTREAL) : SHORTREAL ;
 BEGIN
-   RETURN cbuiltin.significandf (s)
+   RETURN cbuiltin.scalbnf (s, -cbuiltin.ilogbf (s))
 END significandf ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_significandl)) significandl
(l: LONGREAL) : LONGREAL ;
 BEGIN
-   RETURN cbuiltin.significandl (l)
+   RETURN cbuiltin.scalbnl (l, -cbuiltin.ilogbl (l))
 END significandl ;

+
 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_modf)) modf (x: REAL; VAR y:
REAL) : REAL ;
 BEGIN
    RETURN cbuiltin.modf (x, y)
@@ -299,17 +301,17 @@ END nexttowardl ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_scalb)) scalb (x, n: REAL) :
REAL ;
 BEGIN
-   RETURN cbuiltin.scalb (x, n)
+   RETURN cbuiltin.scalbn (x, VAL (INTEGER, n))
 END scalb ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_scalbf)) scalbf (x, n:
SHORTREAL) : SHORTREAL ;
 BEGIN
-   RETURN cbuiltin.scalbf (x, n)
+   RETURN cbuiltin.scalbnf (x, VAL (INTEGER, n))
 END scalbf ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_scalbl)) scalbl (x, n:
LONGREAL) : LONGREAL ;
 BEGIN
-   RETURN cbuiltin.scalbl (x, n)
+   RETURN cbuiltin.scalbnl (x, VAL (INTEGER, n))
 END scalbl ;

 PROCEDURE __ATTRIBUTE__  __BUILTIN__ ((__builtin_scalbln)) scalbln (x: REAL;
n: LONGINT) : REAL ;
-- 
2.37.1 (Apple Git-137.1)

Reply via email to