otopp / libfixmath

Automatically exported from code.google.com/p/libfixmath
0 stars 0 forks source link

libfixmath for cortex m0 #25

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. keil uvision
2. #define FIXMATH_NO_64BIT
3. code does not use the available 32 x 32 HW 1cycle multiply

Cortex M0+ does not have the M3 4 multipy, however it has a 32bit HW multiply

Windows 7

In reality the FIXMATH_NO_64BIT does not compile with Keil uVusuib. It's OK 
with std 64 mul (after a few changes to make the compiler happy)
I was thinking of maybe changing fix16_mul, although I'm not sure how.
But are there other places where the same thing happens?
Thanks!

Original issue reported on code.google.com by AGorge2...@gmail.com on 7 Sep 2013 at 11:33

GoogleCodeExporter commented 9 years ago
I think the above message was confusing, basically when compiling with 
FIXMATH_NO_64BIT,
I get 2 errors on this line (and all the similar ones):

static __inline __int64_t int64_const(int32_t hi, uint32_t lo) { return 
(__int64_t){ hi, lo }; }

int64.h(40): error:  #119: cast to type "__int64_t" is not allowed
int64.h(40): error:  #29: expected an expression

any ideas how to get his to work?

Thanks!

Original comment by AGorge2...@gmail.com on 8 Sep 2013 at 12:19

GoogleCodeExporter commented 9 years ago
Yeah, the problem is that you're using a compiler which doesn't support the 
same features as gcc or that I didn't realize that this way of initializing a 
struct was not standard C. To fix that problem just change it to:

static __inline __int64_t int64_const(int32_t hi, uint32_t lo) { __int64_t r; 
r.hi = hi; r.lo = lo; return r; }

Original comment by Flatmush@googlemail.com on 8 Sep 2013 at 1:06