Open
Description
https://godbolt.org/z/dchq7rxe7
C code:
#include <fenv.h>
#include <stdio.h>
_Float16 bar(float x) {
return (_Float16)x;
}
int main() {
volatile float x = 0x1.0p-25f;
fesetround(FE_UPWARD);
printf("%a\n", (double)bar(x));
fesetround(FE_DOWNWARD);
printf("%a\n", (double)bar(x));
}
Output with libgcc:
0x1p-24
0x0p+0
Output with compiler-rt:
0x0p+0
0x0p+0
Relevant compiler-rt source:
llvm-project/compiler-rt/lib/builtins/truncsfhf2.c
Lines 15 to 17 in 046a177
llvm-project/compiler-rt/lib/builtins/fp_trunc_impl.inc
Lines 9 to 12 in 046a177
cc @lntue