Commit from zer0 on branch b_zer0 (2008-05-10 17:06 CEST) =================================
update fixed point lib to work with gcc 4.3 aversive modules/base/math/fixed_point/f16.h 1.6.4.3 aversive modules/base/math/fixed_point/f16_add.c 1.4.4.2 aversive modules/base/math/fixed_point/f16_div.c 1.3.4.2 aversive modules/base/math/fixed_point/f16_double.c 1.5.4.2 aversive modules/base/math/fixed_point/f16_int.c 1.5.4.2 aversive modules/base/math/fixed_point/f16_inv.c 1.5.4.2 aversive modules/base/math/fixed_point/f16_mul.c 1.5.4.2 aversive modules/base/math/fixed_point/f16_neg.c 1.4.4.2 aversive modules/base/math/fixed_point/f16_print.c 1.4.4.2 aversive modules/base/math/fixed_point/f16_sqrt.c 1.5.4.3 aversive modules/base/math/fixed_point/f16_sub.c 1.4.4.2 aversive modules/base/math/fixed_point/f16_to_s16.h 1.3.6.2 aversive modules/base/math/fixed_point/f32.h 1.6.4.3 aversive modules/base/math/fixed_point/f32_add.c 1.4.4.2 aversive modules/base/math/fixed_point/f32_div.c 1.3.4.2 aversive modules/base/math/fixed_point/f32_double.c 1.5.4.2 aversive modules/base/math/fixed_point/f32_int.c 1.5.4.2 aversive modules/base/math/fixed_point/f32_inv.c 1.5.4.2 aversive modules/base/math/fixed_point/f32_mul.c 1.5.4.2 aversive modules/base/math/fixed_point/f32_neg.c 1.4.4.2 aversive modules/base/math/fixed_point/f32_print.c 1.4.4.2 aversive modules/base/math/fixed_point/f32_sqrt.c 1.5.4.3 aversive modules/base/math/fixed_point/f32_sub.c 1.4.4.2 aversive modules/base/math/fixed_point/f32_to_s32.h 1.3.6.2 aversive modules/base/math/fixed_point/f64.h 1.6.4.3 aversive modules/base/math/fixed_point/f64_add.c 1.4.4.2 aversive modules/base/math/fixed_point/f64_div.c 1.3.4.2 aversive modules/base/math/fixed_point/f64_double.c 1.5.4.2 aversive modules/base/math/fixed_point/f64_int.c 1.5.4.2 aversive modules/base/math/fixed_point/f64_inv.c 1.5.4.2 aversive modules/base/math/fixed_point/f64_msb_mul.c 1.5.4.2 aversive modules/base/math/fixed_point/f64_mul.c 1.5.4.2 aversive modules/base/math/fixed_point/f64_neg.c 1.4.4.2 aversive modules/base/math/fixed_point/f64_print.c 1.4.4.2 aversive modules/base/math/fixed_point/f64_sqrt.c 1.5.4.3 aversive modules/base/math/fixed_point/f64_sub.c 1.4.4.2 aversive modules/base/math/fixed_point/f64_to_s64.h 1.3.6.3 aversive modules/base/math/fixed_point/s16_to_f16.h 1.3.6.2 aversive modules/base/math/fixed_point/s32_to_f32.h 1.3.6.2 aversive modules/base/math/fixed_point/s64_to_f64.h 1.3.6.3 ============================================ aversive/modules/base/math/fixed_point/f16.h (1.6.4.2 -> 1.6.4.3) ============================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16.h,v 1.6.4.2 2007-05-23 17:18:10 zer0 Exp $ + * Revision : $Id: f16.h,v 1.6.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -41,23 +41,28 @@ #include <aversive.h> typedef struct fixed_16 { - uint8_t decimal; - int8_t integer; + union { + struct { + uint8_t decimal; + int8_t integer; + } s; + int16_t s16; + } u; } f16; +#define f16_decimal u.s.decimal +#define f16_integer u.s.integer #define F16_ZERO ( \ { \ f16 __f; \ - __f.integer = 0; \ - __f.decimal = 0; \ + __f.u.s16 = 0; \ __f; \ }) #define F16_NAN ( \ { \ f16 __f; \ - __f.integer = 0xFF; \ - __f.decimal = 0xFF; \ + __f.u.s16 = 0xFFFF; \ __f; \ }) @@ -67,8 +72,8 @@ #define F16_IS_LE(x,y) (f16_to_s16(x) <= f16_to_s16(y)) #define F16_IS_EQ(x,y) (f16_to_s16(x) == f16_to_s16(y)) #define F16_IS_NE(x,y) (f16_to_s16(x) != f16_to_s16(y)) -#define F16_IS_NEG(x) ((x).integer < 0) -#define F16_IS_ZERO(x) ((x).integer == 0 && (x).decimal == 0) +#define F16_IS_NEG(x) ((x).f16_integer < 0) +#define F16_IS_ZERO(x) ((x).f16_integer == 0 && (x).f16_decimal == 0) /** convert a double to a f16 */ ================================================ aversive/modules/base/math/fixed_point/f16_add.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_add.c,v 1.4.4.1 2006-11-26 21:06:00 zer0 Exp $ + * Revision : $Id: f16_add.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,6 +27,6 @@ f16 f16_add(f16 a, f16 b) { - return s16_to_f16( f16_to_s16(a) + f16_to_s16(b) ); + return s16_to_f16( f16_to_s16(a) + f16_to_s16(b) ); } ================================================ aversive/modules/base/math/fixed_point/f16_div.c (1.3.4.1 -> 1.3.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_div.c,v 1.3.4.1 2006-11-26 21:06:00 zer0 Exp $ + * Revision : $Id: f16_div.c,v 1.3.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -25,8 +25,8 @@ f16 f16_div(f16 a, f16 b) { - if (F16_IS_ZERO(b)) - return F16_NAN; - return f16_mul(a,f16_inv(b)); + if (F16_IS_ZERO(b)) + return F16_NAN; + return f16_mul(a,f16_inv(b)); } =================================================== aversive/modules/base/math/fixed_point/f16_double.c (1.5.4.1 -> 1.5.4.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_double.c,v 1.5.4.1 2006-11-26 21:06:00 zer0 Exp $ + * Revision : $Id: f16_double.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -30,20 +30,19 @@ f16 f16_from_double(double d) { - f16 f; - f.decimal = (uint8_t) ((d - (int8_t)d) * POW2_8F); - f.integer = (d < 0 && f.decimal != 0 ? (int8_t)d-1 : (int8_t)d) ; - - return f; + f16 f; + f.f16_decimal = (uint8_t) ((d - (int8_t)d) * POW2_8F); + f.f16_integer = (d < 0 && f.f16_decimal != 0 ? (int8_t)d-1 : (int8_t)d) ; + + return f; } double f16_to_double(f16 f) { - double d; - - d = f.integer; - d += ((double)f.decimal / POW2_8F); - - return d; + double d; + + d = f.f16_integer; + d += ((double)f.f16_decimal / POW2_8F); + + return d; } - ================================================ aversive/modules/base/math/fixed_point/f16_int.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_int.c,v 1.5.4.1 2006-11-26 21:06:00 zer0 Exp $ + * Revision : $Id: f16_int.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,22 +27,22 @@ f16 f16_from_integer(int8_t i, uint8_t d) { - f16 f; - f.integer = i; - f.decimal = d; + f16 f; + f.f16_integer = i; + f.f16_decimal = d; - return f; + return f; } /**************** int8_t <-> f16 */ f16 f16_from_msb(int8_t i) { - f16 f; - f.integer = i; - f.decimal = 0; + f16 f; + f.f16_integer = i; + f.f16_decimal = 0; - return f; + return f; } @@ -50,14 +50,14 @@ f16 f16_from_lsb(int8_t i) { - f16 f; + f16 f; if ( i >= 0 ) { - f.integer = 0; - f.decimal = i; + f.f16_integer = 0; + f.f16_decimal = i; } - else { - f.integer = -1; - f.decimal = i; + else { + f.f16_integer = -1; + f.f16_decimal = i; } - return f; + return f; } ================================================ aversive/modules/base/math/fixed_point/f16_inv.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_inv.c,v 1.5.4.1 2006-11-26 21:06:00 zer0 Exp $ + * Revision : $Id: f16_inv.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,9 +27,9 @@ f16 f16_inv(f16 f) { - if (F16_IS_ZERO(f)) - return F16_NAN; + if (F16_IS_ZERO(f)) + return F16_NAN; - return s16_to_f16( ((int16_t)0x7fff) / (f16_to_s16(f)/2) ); + return s16_to_f16( ((int16_t)0x7fff) / (f16_to_s16(f)/2) ); } ================================================ aversive/modules/base/math/fixed_point/f16_mul.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_mul.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f16_mul.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,10 +26,8 @@ f16 f16_mul(f16 a, f16 b) { - return s16_to_f16( ( ((int16_t)(a.integer) * (int16_t)(b.integer)) << 8 ) + - (int16_t)(a.integer) * (int16_t)(b.decimal) + - (int16_t)(a.decimal) * (int16_t)(b.integer) + - ( ((int16_t)(a.decimal) * (int16_t)(b.decimal)) >> 8 ) ); + return s16_to_f16( ( ((int16_t)(a.f16_integer) * (int16_t)(b.f16_integer)) << 8 ) + + (int16_t)(a.f16_integer) * (int16_t)(b.f16_decimal) + + (int16_t)(a.f16_decimal) * (int16_t)(b.f16_integer) + + ( ((int16_t)(a.f16_decimal) * (int16_t)(b.f16_decimal)) >> 8 ) ); } - - ================================================ aversive/modules/base/math/fixed_point/f16_neg.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_neg.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f16_neg.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,5 +26,5 @@ f16 f16_neg(f16 f) { - return s16_to_f16( -f16_to_s16(f) ); + return s16_to_f16( -f16_to_s16(f) ); } ================================================== aversive/modules/base/math/fixed_point/f16_print.c (1.4.4.1 -> 1.4.4.2) ================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_print.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f16_print.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -25,9 +25,9 @@ void f16_print(f16 f) { - if(F16_IS_EQ(f, F16_NAN)) - printf("nan"); - else - printf("%f",f16_to_double(f)); + if(F16_IS_EQ(f, F16_NAN)) + printf("nan"); + else + printf("%f",f16_to_double(f)); } ================================================= aversive/modules/base/math/fixed_point/f16_sqrt.c (1.5.4.2 -> 1.5.4.3) ================================================= @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_sqrt.c,v 1.5.4.2 2007-06-12 16:18:43 zer0 Exp $ + * Revision : $Id: f16_sqrt.c,v 1.5.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -43,22 +43,21 @@ f16 f16_sqrt(f16 f) { - uint16_t a,b,c,d; + uint16_t a,b,c,d; - if (F16_IS_NEG(f)) - return F16_NAN; + if (F16_IS_NEG(f)) + return F16_NAN; - if(f.integer) { - /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ - a=(uint16_t)(f.integer) << 8 ; - b=(uint16_t)(f.decimal) << 8 ; - c=u16_sqrt(a); - d=u16_sqrt(0x100 + (b/a)); - return f16_mul(s16_to_f16( c<<4 ), s16_to_f16( d<<4 )); - } - else { - b=(uint16_t)(f.decimal) << 8 ; - return s16_to_f16(u16_sqrt(b)); - } + if(f.f16_integer) { + /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ + a=(uint16_t)(f.f16_integer) << 8 ; + b=(uint16_t)(f.f16_decimal) << 8 ; + c=u16_sqrt(a); + d=u16_sqrt(0x100 + (b/a)); + return f16_mul(s16_to_f16( c<<4 ), s16_to_f16( d<<4 )); + } + else { + b=(uint16_t)(f.f16_decimal) << 8 ; + return s16_to_f16(u16_sqrt(b)); + } } - ================================================ aversive/modules/base/math/fixed_point/f16_sub.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_sub.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f16_sub.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,6 +27,6 @@ f16 f16_sub(f16 a, f16 b) { - return s16_to_f16( f16_to_s16(a) - f16_to_s16(b) ); + return s16_to_f16( f16_to_s16(a) - f16_to_s16(b) ); } =================================================== aversive/modules/base/math/fixed_point/f16_to_s16.h (1.3.6.1 -> 1.3.6.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f16_to_s16.h,v 1.3.6.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f16_to_s16.h,v 1.3.6.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -24,16 +24,16 @@ #ifdef HOST_VERSION /* not optimized, but will work with any endianness */ -static int16_t f16_to_s16(f16 f) +static inline int16_t f16_to_s16(f16 f) { - return ( ((int16_t)(f.integer))<<8 ) | ((int16_t)(f.decimal)); + return ( ((int16_t)(f.f16_integer))<<8 ) | ((int16_t)(f.f16_decimal)); } #else /* only for AVR, faster */ -static int16_t f16_to_s16(f16 f) +static inline int16_t f16_to_s16(f16 f) { - return ( *(int16_t *)(void *)&f); + return f.u.s16; } #endif ============================================ aversive/modules/base/math/fixed_point/f32.h (1.6.4.2 -> 1.6.4.3) ============================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32.h,v 1.6.4.2 2007-05-23 17:18:11 zer0 Exp $ + * Revision : $Id: f32.h,v 1.6.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -41,23 +41,28 @@ #include <aversive.h> typedef struct fixed_32 { - uint16_t decimal; - int16_t integer; + union { + struct { + uint16_t decimal; + int16_t integer; + } s; + int32_t s32; + } u; } f32; +#define f32_decimal u.s.decimal +#define f32_integer u.s.integer #define F32_ZERO ( \ { \ f32 __f; \ - __f.integer = 0; \ - __f.decimal = 0; \ + __f.u.s32 = 0; \ __f; \ }) #define F32_NAN ( \ { \ f32 __f; \ - __f.integer = 0xFFFF; \ - __f.decimal = 0xFFFF; \ + __f.u.s32 = 0xFFFFFFFF; \ __f; \ }) @@ -67,8 +72,8 @@ #define F32_IS_LE(x,y) (f32_to_s32(x) <= f32_to_s32(y)) #define F32_IS_EQ(x,y) (f32_to_s32(x) == f32_to_s32(y)) #define F32_IS_NE(x,y) (f32_to_s32(x) != f32_to_s32(y)) -#define F32_IS_NEG(x) ((x).integer < 0) -#define F32_IS_ZERO(x) ((x).integer == 0 && (x).decimal == 0) +#define F32_IS_NEG(x) ((x).f32_integer < 0) +#define F32_IS_ZERO(x) ((x).f32_integer == 0 && (x).f32_decimal == 0) /** convert a double to a f32 */ f32 f32_from_double(double f); ================================================ aversive/modules/base/math/fixed_point/f32_add.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_add.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_add.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,6 +26,6 @@ f32 f32_add(f32 a, f32 b) { - return s32_to_f32( f32_to_s32(a) + f32_to_s32(b) ); + return s32_to_f32( f32_to_s32(a) + f32_to_s32(b) ); } ================================================ aversive/modules/base/math/fixed_point/f32_div.c (1.3.4.1 -> 1.3.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_div.c,v 1.3.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_div.c,v 1.3.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -24,8 +24,7 @@ f32 f32_div(f32 a, f32 b) { - if (F32_IS_ZERO(b)) - return F32_NAN; - return f32_mul(a,f32_inv(b)); + if (F32_IS_ZERO(b)) + return F32_NAN; + return f32_mul(a,f32_inv(b)); } - =================================================== aversive/modules/base/math/fixed_point/f32_double.c (1.5.4.1 -> 1.5.4.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_double.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_double.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -30,20 +30,19 @@ f32 f32_from_double(double d) { - f32 f; - f.decimal = (uint16_t) ((d - (int16_t)d) * POW2_16F); - f.integer = (d < 0 && f.decimal != 0 ? (int16_t)d-1 : (int16_t)d) ; - - return f; + f32 f; + f.f32_decimal = (uint16_t) ((d - (int16_t)d) * POW2_16F); + f.f32_integer = (d < 0 && f.f32_decimal != 0 ? (int16_t)d-1 : (int16_t)d) ; + + return f; } double f32_to_double(f32 f) { - double d; - - d = f.integer; - d += ((double)f.decimal / POW2_16F); - - return d; + double d; + + d = f.f32_integer; + d += ((double)f.f32_decimal / POW2_16F); + + return d; } - ================================================ aversive/modules/base/math/fixed_point/f32_int.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_int.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_int.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,22 +27,22 @@ f32 f32_from_integer(int16_t i, uint16_t d) { - f32 f; - f.integer = i; - f.decimal = d; + f32 f; + f.f32_integer = i; + f.f32_decimal = d; - return f; + return f; } /**************** int16_t <-> f32 */ f32 f32_from_msb(int16_t i) { - f32 f; - f.integer = i; - f.decimal = 0; + f32 f; + f.f32_integer = i; + f.f32_decimal = 0; - return f; + return f; } @@ -50,14 +50,14 @@ f32 f32_from_lsb(int16_t i) { - f32 f; + f32 f; if ( i >= 0 ) { - f.integer = 0; - f.decimal = i; + f.f32_integer = 0; + f.f32_decimal = i; } - else { - f.integer = -1; - f.decimal = i; + else { + f.f32_integer = -1; + f.f32_decimal = i; } - return f; + return f; } ================================================ aversive/modules/base/math/fixed_point/f32_inv.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_inv.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_inv.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,8 +27,8 @@ f32 f32_inv(f32 f) { - if (F32_IS_ZERO(f)) - return F32_NAN; + if (F32_IS_ZERO(f)) + return F32_NAN; - return s32_to_f32( ((int32_t)0x7fffffff) / (f32_to_s32(f)/2) ); + return s32_to_f32( ((int32_t)0x7fffffff) / (f32_to_s32(f)/2) ); } ================================================ aversive/modules/base/math/fixed_point/f32_mul.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_mul.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_mul.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,9 +26,8 @@ f32 f32_mul(f32 a, f32 b) { - return s32_to_f32( ( ((int32_t)(a.integer) * (int32_t)(b.integer)) << 16 ) + - (int32_t)(a.integer) * (int32_t)(b.decimal) + - (int32_t)(a.decimal) * (int32_t)(b.integer) + - ( ((int32_t)(a.decimal) * (int32_t)(b.decimal)) >> 16 ) ); + return s32_to_f32( ( ((int32_t)(a.f32_integer) * (int32_t)(b.f32_integer)) << 16 ) + + (int32_t)(a.f32_integer) * (int32_t)(b.f32_decimal) + + (int32_t)(a.f32_decimal) * (int32_t)(b.f32_integer) + + ( ((int32_t)(a.f32_decimal) * (int32_t)(b.f32_decimal)) >> 16 ) ); } - ================================================ aversive/modules/base/math/fixed_point/f32_neg.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_neg.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_neg.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,5 +26,5 @@ f32 f32_neg(f32 f) { - return s32_to_f32( -f32_to_s32(f) ); + return s32_to_f32( -f32_to_s32(f) ); } ================================================== aversive/modules/base/math/fixed_point/f32_print.c (1.4.4.1 -> 1.4.4.2) ================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_print.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_print.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,9 +26,8 @@ void f32_print(f32 f) { - if(F32_IS_EQ(f, F32_NAN)) - printf("nan"); - else - printf("%f",f32_to_double(f)); + if(F32_IS_EQ(f, F32_NAN)) + printf("nan"); + else + printf("%f",f32_to_double(f)); } - ================================================= aversive/modules/base/math/fixed_point/f32_sqrt.c (1.5.4.2 -> 1.5.4.3) ================================================= @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_sqrt.c,v 1.5.4.2 2007-06-12 16:18:43 zer0 Exp $ + * Revision : $Id: f32_sqrt.c,v 1.5.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -41,25 +41,25 @@ f32 f32_sqrt(f32 f) { - uint32_t a,b,c,d; + uint32_t a,b,c,d; - if (F32_IS_ZERO(f)) - return F32_ZERO; + if (F32_IS_ZERO(f)) + return F32_ZERO; - if (F32_IS_NEG(f)) - return F32_NAN; + if (F32_IS_NEG(f)) + return F32_NAN; - if(f.integer) { - /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ - a=(uint32_t)(f.integer) << 16 ; - b=(uint32_t)(f.decimal) << 16 ; - c=u32_sqrt(a); - d=u32_sqrt(0x10000 + (b/a)); - return f32_mul(s32_to_f32( c<<8 ), s32_to_f32( d<<8 )); - } - else { - b=(uint32_t)(f.decimal) << 16 ; - return s32_to_f32(u32_sqrt(b)); - } + if(f.f32_integer) { + /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ + a=(uint32_t)(f.f32_integer) << 16 ; + b=(uint32_t)(f.f32_decimal) << 16 ; + c=u32_sqrt(a); + d=u32_sqrt(0x10000 + (b/a)); + return f32_mul(s32_to_f32( c<<8 ), s32_to_f32( d<<8 )); + } + else { + b=(uint32_t)(f.f32_decimal) << 16 ; + return s32_to_f32(u32_sqrt(b)); + } } ================================================ aversive/modules/base/math/fixed_point/f32_sub.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_sub.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_sub.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,5 +26,5 @@ f32 f32_sub(f32 a, f32 b) { - return s32_to_f32( f32_to_s32(a) - f32_to_s32(b) ); + return s32_to_f32( f32_to_s32(a) - f32_to_s32(b) ); } =================================================== aversive/modules/base/math/fixed_point/f32_to_s32.h (1.3.6.1 -> 1.3.6.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f32_to_s32.h,v 1.3.6.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f32_to_s32.h,v 1.3.6.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -24,16 +24,16 @@ #ifdef HOST_VERSION /* not optimized, but will work with any endianness */ -static int32_t f32_to_s32(f32 f) +static inline int32_t f32_to_s32(f32 f) { - return ( ((int32_t)(f.integer))<<16 ) | ((int32_t)(f.decimal)); + return ( ((int32_t)(f.f32_integer))<<16 ) | ((int32_t)(f.f32_decimal)); } #else /* only for AVR, faster */ -static int32_t f32_to_s32(f32 f) +static inline int32_t f32_to_s32(f32 f) { - return ( *(int32_t *)(void *)&f); + return f.u.s32; } #endif ============================================ aversive/modules/base/math/fixed_point/f64.h (1.6.4.2 -> 1.6.4.3) ============================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64.h,v 1.6.4.2 2007-05-23 17:18:11 zer0 Exp $ + * Revision : $Id: f64.h,v 1.6.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -41,24 +41,29 @@ #define _F64_H_ typedef struct fixed_64 { - uint32_t decimal; - int32_t integer; + union { + struct { + uint32_t decimal; + int32_t integer; + } s; + int64_t s64; + } u; } f64; +#define f64_integer u.s.integer +#define f64_decimal u.s.decimal #define F64_ZERO ( \ { \ f64 __f; \ - __f.integer = 0; \ - __f.decimal = 0; \ + __f.u.s64 = 0; \ __f; \ }) -#define F64_NAN ( \ -{ \ - f64 __f; \ - __f.integer = 0xFFFFFFFF; \ - __f.decimal = 0xFFFFFFFF; \ - __f; \ +#define F64_NAN ( \ +{ \ + f64 __f; \ + __f.u.s64 = 0xFFFFFFFFFFFFFFFF; \ + __f; \ }) #define F64_IS_GT(x,y) (f64_to_s64(x) > f64_to_s64(y)) @@ -67,8 +72,8 @@ #define F64_IS_LE(x,y) (f64_to_s64(x) <= f64_to_s64(y)) #define F64_IS_EQ(x,y) (f64_to_s64(x) == f64_to_s64(y)) #define F64_IS_NE(x,y) (f64_to_s64(x) != f64_to_s64(y)) -#define F64_IS_NEG(x) ((x).integer < 0) -#define F64_IS_ZERO(x) ((x).integer == 0 && (x).decimal == 0) +#define F64_IS_NEG(x) ((x).f64_integer < 0) +#define F64_IS_ZERO(x) ((x).f64_integer == 0 && (x).f64_decimal == 0) /** convert a double to a f64 */ ================================================ aversive/modules/base/math/fixed_point/f64_add.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_add.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_add.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,7 +26,5 @@ f64 f64_add(f64 a, f64 b) { - return s64_to_f64( f64_to_s64(a) + f64_to_s64(b) ); + return s64_to_f64( f64_to_s64(a) + f64_to_s64(b) ); } - - ================================================ aversive/modules/base/math/fixed_point/f64_div.c (1.3.4.1 -> 1.3.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_div.c,v 1.3.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_div.c,v 1.3.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -24,8 +24,7 @@ f64 f64_div(f64 a, f64 b) { - if (F64_IS_ZERO(b)) - return F64_NAN; - return f64_mul(a,f64_inv(b)); + if (F64_IS_ZERO(b)) + return F64_NAN; + return f64_mul(a,f64_inv(b)); } - =================================================== aversive/modules/base/math/fixed_point/f64_double.c (1.5.4.1 -> 1.5.4.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_double.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_double.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -30,20 +30,19 @@ f64 f64_from_double(double d) { - f64 f; - f.decimal = (uint32_t) ((d - (int32_t)d) * POW2_32F); - f.integer = (d < 0 && f.decimal != 0 ? (int32_t)d-1 : (int32_t)d) ; + f64 f; + f.f64_decimal = (uint32_t) ((d - (int32_t)d) * POW2_32F); + f.f64_integer = (d < 0 && f.f64_decimal != 0 ? (int32_t)d-1 : (int32_t)d) ; - return f; + return f; } double f64_to_double(f64 f) { - double d; + double d; - d = f.integer; - d += ((double)f.decimal / POW2_32F); + d = f.f64_integer; + d += ((double)f.f64_decimal / POW2_32F); - return d; + return d; } - ================================================ aversive/modules/base/math/fixed_point/f64_int.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_int.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_int.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,22 +26,22 @@ f64 f64_from_integer(int32_t i, uint32_t d) { - f64 f; - f.integer = i; - f.decimal = d; + f64 f; + f.f64_integer = i; + f.f64_decimal = d; - return f; + return f; } /**************** int32_t <-> f64 */ f64 f64_from_msb(int32_t i) { - f64 f; - f.integer = i; - f.decimal = 0; + f64 f; + f.f64_integer = i; + f.f64_decimal = 0; - return f; + return f; } @@ -49,16 +49,14 @@ f64 f64_from_lsb(int32_t i) { - f64 f; + f64 f; if ( i >= 0 ) { - f.integer = 0; - f.decimal = i; + f.f64_integer = 0; + f.f64_decimal = i; } - else { - f.integer = -1; - f.decimal = i; + else { + f.f64_integer = -1; + f.f64_decimal = i; } - return f; + return f; } - - ================================================ aversive/modules/base/math/fixed_point/f64_inv.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_inv.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_inv.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,9 +26,8 @@ f64 f64_inv(f64 f) { - if (F64_IS_ZERO(f)) - return F64_NAN; + if (F64_IS_ZERO(f)) + return F64_NAN; - return s64_to_f64( ((int64_t)0x7fffffffffffffff) / (f64_to_s64(f)/2) ); + return s64_to_f64( ((int64_t)0x7fffffffffffffff) / (f64_to_s64(f)/2) ); } - ==================================================== aversive/modules/base/math/fixed_point/f64_msb_mul.c (1.5.4.1 -> 1.5.4.2) ==================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_msb_mul.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_msb_mul.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -29,4 +29,3 @@ { return (int32_t)(( f64_to_s64(a) * f64_to_s64(b)) >> 32); } - ================================================ aversive/modules/base/math/fixed_point/f64_mul.c (1.5.4.1 -> 1.5.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_mul.c,v 1.5.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_mul.c,v 1.5.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,8 +27,8 @@ /* about 300 us with a 16 Mhz quartz on an atm128 */ f64 f64_mul(f64 a, f64 b) { - return s64_to_f64( ( ((int64_t)(a.integer) * (int64_t)(b.integer)) << 32 ) + - (int64_t)(a.integer) * (int64_t)(b.decimal) + - (int64_t)(a.decimal) * (int64_t)(b.integer) + - ( ((int64_t)(a.decimal) * (int64_t)(b.decimal)) >> 32 ) ); + return s64_to_f64( ( ((int64_t)(a.f64_integer) * (int64_t)(b.f64_integer)) << 32 ) + + (int64_t)(a.f64_integer) * (int64_t)(b.f64_decimal) + + (int64_t)(a.f64_decimal) * (int64_t)(b.f64_integer) + + ( ((int64_t)(a.f64_decimal) * (int64_t)(b.f64_decimal)) >> 32 ) ); } ================================================ aversive/modules/base/math/fixed_point/f64_neg.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_neg.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_neg.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -27,5 +27,5 @@ f64 f64_neg(f64 f) { - return s64_to_f64( -f64_to_s64(f) ); + return s64_to_f64( -f64_to_s64(f) ); } ================================================== aversive/modules/base/math/fixed_point/f64_print.c (1.4.4.1 -> 1.4.4.2) ================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_print.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_print.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -25,9 +25,8 @@ void f64_print(f64 f) { - if(F64_IS_EQ(f, F64_NAN)) - printf("nan"); - else - printf("%f",f64_to_double(f)); + if(F64_IS_EQ(f, F64_NAN)) + printf("nan"); + else + printf("%f",f64_to_double(f)); } - ================================================= aversive/modules/base/math/fixed_point/f64_sqrt.c (1.5.4.2 -> 1.5.4.3) ================================================= @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_sqrt.c,v 1.5.4.2 2007-06-12 16:18:43 zer0 Exp $ + * Revision : $Id: f64_sqrt.c,v 1.5.4.3 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -41,24 +41,24 @@ f64 f64_sqrt(f64 f) { - uint64_t a,b,c,d; + uint64_t a,b,c,d; - if (F64_IS_ZERO(f)) - return F64_ZERO; + if (F64_IS_ZERO(f)) + return F64_ZERO; - if (F64_IS_NEG(f)) - return F64_NAN; + if (F64_IS_NEG(f)) + return F64_NAN; - if(f.integer) { - /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ - a=(uint64_t)(f.integer) << 32 ; - b=(uint64_t)(f.decimal) << 32 ; - c=u64_sqrt(a); - d=u64_sqrt(0x100000000 + (b/a)); - return f64_mul(s64_to_f64( c<<16 ), s64_to_f64( d<<16 )); - } - else { - b=(uint64_t)(f.decimal) << 32 ; - return s64_to_f64(u64_sqrt(b)); - } + if(f.f64_integer) { + /* sqrt(a+b) = sqrt(a)*sqrt(1+b/a) */ + a=(uint64_t)(f.f64_integer) << 32 ; + b=(uint64_t)(f.f64_decimal) << 32 ; + c=u64_sqrt(a); + d=u64_sqrt(0x100000000 + (b/a)); + return f64_mul(s64_to_f64( c<<16 ), s64_to_f64( d<<16 )); + } + else { + b=(uint64_t)(f.f64_decimal) << 32 ; + return s64_to_f64(u64_sqrt(b)); + } } ================================================ aversive/modules/base/math/fixed_point/f64_sub.c (1.4.4.1 -> 1.4.4.2) ================================================ @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_sub.c,v 1.4.4.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: f64_sub.c,v 1.4.4.2 2008-05-10 15:06:26 zer0 Exp $ * */ @@ -26,6 +26,5 @@ f64 f64_sub(f64 a, f64 b) { - return s64_to_f64( f64_to_s64(a) - f64_to_s64(b) ); + return s64_to_f64( f64_to_s64(a) - f64_to_s64(b) ); } - =================================================== aversive/modules/base/math/fixed_point/f64_to_s64.h (1.3.6.2 -> 1.3.6.3) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: f64_to_s64.h,v 1.3.6.2 2007-05-23 17:18:11 zer0 Exp $ + * Revision : $Id: f64_to_s64.h,v 1.3.6.3 2008-05-10 15:06:27 zer0 Exp $ * */ @@ -26,16 +26,16 @@ #if HOST_VERSION /* not optimized, but will work with any endianness */ -static int64_t f64_to_s64(f64 f) +static inline int64_t f64_to_s64(f64 f) { - return ( ((int64_t)(f.integer))<<32 ) | ((int64_t)(f.decimal)); + return ( ((int64_t)(f.f64_integer))<<32 ) | ((int64_t)(f.f64_decimal)); } #else /* only for AVR, faster */ -static int64_t f64_to_s64(f64 f) +static inline int64_t f64_to_s64(f64 f) { - return ( *(int64_t *)(void *)&f); + return f.u.s64; } #endif =================================================== aversive/modules/base/math/fixed_point/s16_to_f16.h (1.3.6.1 -> 1.3.6.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: s16_to_f16.h,v 1.3.6.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: s16_to_f16.h,v 1.3.6.2 2008-05-10 15:06:27 zer0 Exp $ * */ @@ -24,20 +24,21 @@ #ifdef HOST_VERSION /* not optimized, but will work with any endianness */ -static f16 s16_to_f16(int16_t i) +static inline f16 s16_to_f16(int16_t i) { - f16 f; - f.integer = ((i) >> 8); - f.decimal = (i); - return f; + f16 f; + f.f16_integer = ((i) >> 8); + f.f16_decimal = (i); + return f; } #else /* only for AVR, faster */ -static f16 s16_to_f16(int16_t i) +static inline f16 s16_to_f16(int16_t i) { - return ( *(f16 *)(void *)&i); + f16 f; + f.u.s16 = i; + return f; } #endif - #endif =================================================== aversive/modules/base/math/fixed_point/s32_to_f32.h (1.3.6.1 -> 1.3.6.2) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: s32_to_f32.h,v 1.3.6.1 2006-11-26 21:06:01 zer0 Exp $ + * Revision : $Id: s32_to_f32.h,v 1.3.6.2 2008-05-10 15:06:27 zer0 Exp $ * */ @@ -25,21 +25,22 @@ #ifdef HOST_VERSION /* not optimized, but will work with any endianness */ -static f32 s32_to_f32(int32_t i) +static inline f32 s32_to_f32(int32_t i) { - f32 f; - f.integer = ((i) >> 16); - f.decimal = (i); - return f; + f32 f; + f.f32_integer = ((i) >> 16); + f.f32_decimal = (i); + return f; } #else /* only for AVR, faster */ -static f32 s32_to_f32(int32_t i) +static inline f32 s32_to_f32(int32_t i) { - return ( *(f32 *)(void *)&i); + f32 f; + f.u.s32 = i; + return f; } #endif - #endif =================================================== aversive/modules/base/math/fixed_point/s64_to_f64.h (1.3.6.2 -> 1.3.6.3) =================================================== @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Revision : $Id: s64_to_f64.h,v 1.3.6.2 2007-05-23 17:18:11 zer0 Exp $ + * Revision : $Id: s64_to_f64.h,v 1.3.6.3 2008-05-10 15:06:27 zer0 Exp $ * */ @@ -27,19 +27,21 @@ #if HOST_VERSION /* not optimized, but will work with any endianness */ -static f64 s64_to_f64(int64_t i) +static inline f64 s64_to_f64(int64_t i) { - f64 f; - f.integer = ((i) >> 32); - f.decimal = (i); - return f; + f64 f; + f.f64_integer = ((i) >> 32); + f.f64_decimal = (i); + return f; } #else /* only for AVR, faster */ -static f64 s64_to_f64(int64_t i) +static inline f64 s64_to_f64(int64_t i) { - return ( *(f64 *)(void *)&i); + f64 f; + f.u.s64 = i; + return f; } #endif _______________________________________________ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog