54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
#ifndef FIXMATH_H
|
|
#define FIXMATH_H
|
|
|
|
// Multiply two unsinged 16bit numbers and return a 32bit result
|
|
__native unsigned long lmul16u(unsigned x, unsigned y);
|
|
|
|
// Multiply two signed 16bit numbers and return a signed 32bit result
|
|
__native long lmul16s(int x, int y)
|
|
|
|
// Multiply two 12.4 fixpoint numbers and return a 12.4 fixpoint result
|
|
inline int lmul12f4s(int x, int y);
|
|
|
|
|
|
// Multiply two 8.8 fixpoint numbers and return an 8.8 fixpoint result
|
|
inline int lmul8f8s(int x, int y);
|
|
|
|
// Multiply two 4.12 fixpoint numbers and return a 12.4 fixpoint result
|
|
__native int lmul4f12s(int x, int y)
|
|
|
|
// Square of a 4.12 sigend fixpoint number and return an 8.24 fixpoint result
|
|
inline unsigned long lsqr4f12s(int x);
|
|
|
|
// Divide a 32bit unsigned number by a 16bit number and return a 16bit number
|
|
__native unsigned ldiv16u(unsigned long x, unsigned y)
|
|
|
|
// Divide a signed 32bit number by a signed 16bit number and return a signed 16bit number
|
|
__native int ldiv16s(long x, int y)
|
|
|
|
// Divide a 12.4 fixed point number by a 12.4 fixpoint number
|
|
inline int ldiv12f4s(int x, int y)
|
|
|
|
// Divide a 8.8 fixed point number by an 8.8 fixpoint number
|
|
inline int ldiv8f8s(int x, int y)
|
|
|
|
// Divide a 4.12 fixed point number by a 4.12 fixpoint number
|
|
inline int ldiv4f12s(int x, int y)
|
|
|
|
// Multiply two unsigned 16bit numbers and divide the result by another 16bit number a * b / c
|
|
__native unsigned lmuldiv16u(unsigned a, unsigned b, unsigned c)
|
|
|
|
// Multiply two signed 16bit numbers and divide the result by another signed 16bit number a * b / c
|
|
__native int lmuldiv16s(int a, int b, int c)
|
|
|
|
|
|
__native unsigned lmuldiv16by8(unsigned a, char b, char c);
|
|
|
|
inline int lmuldiv16sby8(int a, char b, char c);
|
|
|
|
__native unsigned lmuldiv8by8(char a, char b, char c);
|
|
|
|
#pragma compile("fixmath.c")
|
|
|
|
#endif
|