<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61066>61066</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Update ldexp and similar functions to support other rounding modes.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            lntue
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          lntue
      </td>
    </tr>
</table>

<pre>
    The issue was found and reported by Fred J. Tydeman (tydeman@tybor.com) and Paul Zimmermann (Paul.Zimmermann@inria.fr):

For the test file:
```
#include <stdio.h>
#include <math.h>
#include <fenv.h>

int main()
{
  volatile double x = 1.0, y;
  while (x * 0.5 != 0)
 x = x * 0.5;
  fesetround (FE_TONEAREST);
  y = ldexp (x, -1);
 printf ("FE_TONEAREST:  y=%la\n", y);
  fesetround (FE_TOWARDZERO);
 y = ldexp (x, -1);
  printf ("FE_TOWARDZERO: y=%la\n", y);
 fesetround (FE_UPWARD);
  y = ldexp (x, -1);
  printf ("FE_UPWARD: y=%la\n", y);
  fesetround (FE_DOWNWARD);
  y = ldexp (x, -1);
 printf ("FE_DOWNWARD:   y=%la\n", y);
}
```

glibc output:
```
$ gcc -fno-builtin check_ldexp.c -lm
$ ./a.out
FE_TONEAREST:  y=0x0p+0
FE_TOWARDZERO: y=0x0p+0
FE_UPWARD: y=0x0.0000000000001p-1022
FE_DOWNWARD:   y=0x0p+0
```

LLVM 15.0.7:
```
$ gcc -fno-builtin check_ldexp.c libllvmlibc.a
$ ./a.out
FE_TONEAREST:  y=0x0p+0
FE_TOWARDZERO: y=0x0p+0
FE_UPWARD: y=0x0p+0
FE_DOWNWARD:   y=0x0p+0
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVU2P2zYQ_TXUZWCCGsn6OOjgXVuHIs0G200D5BJQEmWxpUiBpHbtf19IFrzr2EE37SGGQcucN4-PbzQY7pzcayEKsr4jiEr7URBEst4GfPSdscW8FVSmORZPnQDp3CjghTtozagb4LoBKwZjvWigOkJpRQO_UXg6NqLnGghm_vRIYuaPlbG0Nj3BfM78xEcFX2XfC9tzPaOnLfq6RWImtZWctpZgTqINYVvClrU0FnwnwAvnoZVKvMYTtnxPfzGSulZjI4BE98430tCORLtb0Z777ofBVujnt8F5ldpDz6UmmE0aT5H07vQA8GwU91IJaMxYKQEHINEWQsoI3sORRGfgSzehCGYHILgBRtdAMJzA7My7ZJ8Rb9Jb4YS3c1UIZuXu29PDx93mcffH0-zcGXecGVQjDsN82CRjFV5gBiu1b2G-EF4wRRMBibYE14qT9b2e3pb5Hhdn3NDyZfO4_bp7fLgAvkPLDTFnqmjzDjFXWj5_mgh-2pQrIQvPu0Rcq9g-fPn4n3R8L-NMNNXm36WQdHu7R-Z1r2RVgxn9MPofd1MM-7qGVavNqhql8lJD3Yn672-zcFrDSvWvWEqw5NSMfunaW-8TO7CB4B17A_m-yleQS__ZgVH25hMOq5AhntHXNl0S3rTjw4c_f4dwTRlN_4cbSlZKPfeTtZT_Al8uwz9pRNAUUZNHOQ9EESZpmoRxmEVBV2CY52mUNHUahayK65qzkGPFWSuSuMY4kAUyjBhiFubrBCOapFmeI89EGmKVNjGJmei5VHRyhxq7D-bxUiQhS5JA8Uoot0wmLV5Os2eZTraYclbVuHckZko6715ZvPRKFJ-Hhnux9NI0bZzspeIW2lHXXhrtwBtw4zBNLzC-ExbmBpV6D71phKPBaFXReT-4qfpYEiz30ndjdRpi5XTi8rMarPlL1J5gOet0BMv5Hv8EAAD__5FdCAw">