stmhal: Copy changes to math.c from stm port.
This commit is contained in:
parent
e43e27cf79
commit
5a16658b21
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user