Skip to content

Commit

Permalink
lib/libm/math: Remove implementations of float conversion functions.
Browse files Browse the repository at this point in the history
These implementations are incorrect (eg f2d and d2f don't handle special
values like 0.0) and proper versions can be provided by libgcc (or
equivalent depending on the toolchain).

libgcc is now linked with the stmhal port so that library will provide
these functions from now on.
  • Loading branch information
dpgeorge committed Jun 14, 2017
1 parent c064f0a commit 3bedff0
Showing 1 changed file with 0 additions and 50 deletions.
50 changes: 0 additions & 50 deletions lib/libm/math.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,56 +36,6 @@ typedef union {
};
} float_s_t;

typedef union {
double d;
struct {
uint64_t m : 52;
uint64_t e : 11;
uint64_t s : 1;
};
} double_s_t;

#if defined(__thumb__)

double __attribute__((pcs("aapcs"))) __aeabi_i2d(int32_t x) {
return (float)x;
}

// TODO
long long __attribute__((pcs("aapcs"))) __aeabi_f2lz(float x) {
return (long)x;
}

double __attribute__((pcs("aapcs"))) __aeabi_f2d(float x) {
float_s_t fx={0};
double_s_t dx={0};

fx.f = x;
dx.s = (fx.s);
dx.e = (fx.e-127+1023) & 0x7FF;
dx.m = fx.m;
dx.m <<=(52-23); // left justify
return dx.d;
}

float __attribute__((pcs("aapcs"))) __aeabi_d2f(double x) {
float_s_t fx={0};
double_s_t dx={0};

dx.d = x;
fx.s = (dx.s);
fx.e = (dx.e-1023+127) & 0xFF;
fx.m = (dx.m>>(52-23)); // right justify
return fx.f;
}

double __aeabi_dmul(double x , double y) {
return 0.0;

}

#endif // defined(__thumb__)

#ifndef NDEBUG
float copysignf(float x, float y) {
float_s_t fx={.f = x};
Expand Down

0 comments on commit 3bedff0

Please sign in to comment.