From 0c36da0b59bd3d5aeb6f7bd7f75913695a1dd366 Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 8 Mar 2014 15:24:39 +0000 Subject: Implement ROMable modules. Add math module. mp_module_obj_t can now be put in ROM. Configuration of float type is now similar to longint: can now choose none, float or double as the implementation. math module has basic math functions. For STM port, these are not yet implemented (they are just stub functions). --- stm/math.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 stm/math.c (limited to 'stm/math.c') diff --git a/stm/math.c b/stm/math.c new file mode 100644 index 000000000..ac680f6b7 --- /dev/null +++ b/stm/math.c @@ -0,0 +1,48 @@ +#include + +// these 2 functions seem to actually work... no idea why +// replacing with libgcc does not work (probably due to wrong calling conventions) +double __aeabi_f2d(float x) { + // TODO + return 0.0; +} + +float __aeabi_d2f(double x) { + // TODO + return 0.0; +} + +/* +double sqrt(double x) { + // TODO + return 0.0; +} +*/ + +float sqrtf(float x) { + asm volatile ( + "vsqrt.f32 %[r], %[x]\n" + : [r] "=t" (x) + : [x] "t" (x)); + return x; +} + +// TODO we need import these functions from some library (eg musl or newlib) +float powf(float x, float y) { return 0.0; } +float expf(float x) { return 0.0; } +float logf(float x) { return 0.0; } +float log2f(float x) { return 0.0; } +float log10f(float x) { return 0.0; } +float coshf(float x) { return 0.0; } +float sinhf(float x) { return 0.0; } +float tanhf(float x) { return 0.0; } +float acoshf(float x) { return 0.0; } +float asinhf(float x) { return 0.0; } +float atanhf(float x) { return 0.0; } +float cosf(float x) { return 0.0; } +float sinf(float x) { return 0.0; } +float tanf(float x) { return 0.0; } +float acosf(float x) { return 0.0; } +float asinf(float x) { return 0.0; } +float atanf(float x) { return 0.0; } +float atan2f(float x, float y) { return 0.0; } -- cgit v1.2.3