dbd3f15168
2. Add flag INTERNAL_LIBM to mpconfigboard.mk files to signal using lib/libm. 3. Fix floating-point warnings in lib/libm 4. Turn off -finline-limit, no longer needed due to 1. 5. Add explicit flags for SPI_FLASH_FILESYSTEM and INTERNAL_FLASH_FILESYSTEM to mpconfigboard.mk files, so they don't need to know the name of the .c file that implements those. Makefile takes care of checking the flags and including the right files.
25 lines
455 B
C
25 lines
455 B
C
// adapted from the rintf() function from musl-1.1.16
|
|
|
|
#include "libm.h"
|
|
|
|
float nearbyintf(float x)
|
|
{
|
|
union {float f; uint32_t i;} u = {x};
|
|
int e = u.i>>23 & 0xff;
|
|
int s = u.i>>31;
|
|
float_t y;
|
|
|
|
if (e >= 0x7f+23)
|
|
return x;
|
|
if (s)
|
|
y = x - 0x1p23f + 0x1p23f;
|
|
else
|
|
y = x + 0x1p23f - 0x1p23f;
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
|
if (y == 0)
|
|
#pragma GCC diagnostic pop
|
|
return s ? -0.0f : 0.0f;
|
|
return y;
|
|
}
|