From bf4299bf588f6216722d89e38947ed25397a6f30 Mon Sep 17 00:00:00 2001 From: PetteriAimonen Date: Mon, 28 Jan 2013 15:52:08 +0000 Subject: Fix error in fix16_lerp16 on platforms with sizeof(int) == 2. Patch by georgjohann. Closes issue 20. --- libfixmath/fix16.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libfixmath/fix16.c b/libfixmath/fix16.c index d5ff8a5..2994905 100644 --- a/libfixmath/fix16.c +++ b/libfixmath/fix16.c @@ -481,6 +481,7 @@ fix16_t fix16_mod(fix16_t x, fix16_t y) } +#ifndef FIXMATH_NO_64BIT fix16_t fix16_lerp8(fix16_t inArg0, fix16_t inArg1, uint8_t inFract) { @@ -492,13 +493,12 @@ fix16_t fix16_lerp8(fix16_t inArg0, fix16_t inArg1, uint8_t inFract) fix16_t fix16_lerp16(fix16_t inArg0, fix16_t inArg1, uint16_t inFract) { - int64_t tempOut = int64_mul_i32_i32(inArg0, ((1 << 16) - inFract)); + int64_t tempOut = int64_mul_i32_i32(inArg0, (((int32_t)1 << 16) - inFract)); tempOut = int64_add(tempOut, int64_mul_i32_i32(inArg1, inFract)); tempOut = int64_shift(tempOut, -16); return (fix16_t)int64_lo(tempOut); } -#ifndef FIXMATH_NO_64BIT fix16_t fix16_lerp32(fix16_t inArg0, fix16_t inArg1, uint32_t inFract) { int64_t tempOut; -- cgit v1.2.3