<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">