stmhal: Copy changes to math.c from stm port.

This commit is contained in:
Damien George 2014-03-23 00:34:49 +00:00
parent e43e27cf79
commit 5a16658b21

View File

@ -1,18 +1,49 @@
#include <stdint.h> #include <stdint.h>
#include <math.h> typedef float float_t;
typedef union {
float f;
struct {
uint64_t m : 23;
uint64_t e : 8;
uint64_t s : 1;
};
} float_s_t;
// these 2 functions seem to actually work... no idea why typedef union {
// replacing with libgcc does not work (probably due to wrong calling conventions) double d;
double __aeabi_f2d(float x) { struct {
// TODO uint64_t m : 52;
return 0.0; uint64_t e : 11;
uint64_t s : 1;
};
} double_s_t;
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 __aeabi_d2f(double x) { float __attribute__((pcs("aapcs"))) __aeabi_d2f(double x) {
// TODO float_s_t fx={0};
return 0.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;
}
/* /*
double sqrt(double x) { double sqrt(double x) {
// TODO // TODO