From a3b7632e61981a730a8883a13f36f19be75647f1 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sun, 23 Nov 2008 09:58:48 +0000 Subject: All numerical values are represented in 22:10 fixed point. svn path=/trunk/libcss/; revision=5762 --- src/utils/fpmath.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/utils/fpmath.h (limited to 'src/utils/fpmath.h') diff --git a/src/utils/fpmath.h b/src/utils/fpmath.h new file mode 100644 index 0000000..edf6471 --- /dev/null +++ b/src/utils/fpmath.h @@ -0,0 +1,45 @@ +/* + * This file is part of LibCSS. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2008 John-Mark Bell + */ + +#ifndef css_utils_fpmath_h_ +#define css_utils_fpmath_h_ + +#include + +/* 22:10 fixed point math */ +typedef int32_t fixed; + +/* Add two fixed point values */ +#define FADD(a, b) ((a) + (b)) +/* Subtract two fixed point values */ +#define FSUB(a, b) ((a) - (b)) +/* Multiply two fixed point values */ +#define FMUL(a, b) (((a) * (b)) >> 10) +/* Divide two fixed point values */ +#define FDIV(a, b) (((a) << 10) / (b)) + +/* Add an integer to a fixed point value */ +#define FADDI(a, b) ((a) + ((b) << 10)) +/* Subtract an integer from a fixed point value */ +#define FSUBI(a, b) ((a) - ((b) << 10)) +/* Multiply a fixed point value by an integer */ +#define FMULI(a, b) ((a) * (b)) +/* Divide a fixed point value by an integer */ +#define FDIVI(a, b) ((a) / (b)) + +/* Convert a floating point value to fixed point */ +#define FLTTOFIX(a) ((fixed) ((a) * (float) (1 << 10))) +/* Convert a fixed point value to floating point */ +#define FIXTOFLT(a) ((float) (a) / (float) (1 << 10)) + +/* Convert an integer to a fixed point value */ +#define INTTOFIX(a) ((a) << 10) +/* Convert a fixed point value to an integer */ +#define FIXTOINT(a) ((a) >> 10) + +#endif + -- cgit v1.2.3