From f2f36334e3b5720731eb2204c2fe63c1e782777d Mon Sep 17 00:00:00 2001 From: John Voltz Date: Thu, 6 Mar 2008 17:56:30 +0000 Subject: updated cairo --- ..._double-to-use-the-magic-number-technique.patch | 79 ---------------------- 1 file changed, 79 deletions(-) delete mode 100644 package/cairo/0002-Change-_cairo_fixed_from_double-to-use-the-magic-number-technique.patch (limited to 'package/cairo/0002-Change-_cairo_fixed_from_double-to-use-the-magic-number-technique.patch') diff --git a/package/cairo/0002-Change-_cairo_fixed_from_double-to-use-the-magic-number-technique.patch b/package/cairo/0002-Change-_cairo_fixed_from_double-to-use-the-magic-number-technique.patch deleted file mode 100644 index 56d8b7e99..000000000 --- a/package/cairo/0002-Change-_cairo_fixed_from_double-to-use-the-magic-number-technique.patch +++ /dev/null @@ -1,79 +0,0 @@ -From nobody Mon Sep 17 00:00:00 2001 -From: Dan Amelang -Date: Sun Oct 29 21:31:23 2006 -0800 -Subject: [PATCH] Change _cairo_fixed_from_double to use the "magic number" technique - -See long thread here: -http://lists.freedesktop.org/archives/cairo/2006-October/008285.html - ---- - - src/cairo-fixed.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 47 insertions(+), 1 deletions(-) - -d88acddcabe770e17664b34a2d5f74d3926e1642 -diff --git a/src/cairo-fixed.c b/src/cairo-fixed.c -index 604c9e7..fe6c2dc 100644 ---- a/src/cairo-fixed.c -+++ b/src/cairo-fixed.c -@@ -42,10 +42,56 @@ _cairo_fixed_from_int (int i) - return i << 16; - } - -+/* This is the "magic number" approach to converting a double into fixed -+ * point as described here: -+ * -+ * http://www.stereopsis.com/sree/fpu2006.html (an overview) -+ * http://www.d6.com/users/checker/pdfs/gdmfp.pdf (in detail) -+ * -+ * The basic idea is to add a large enough number to the double that the -+ * literal floating point is moved up to the extent that it forces the -+ * double's value to be shifted down to the bottom of the mantissa (to make -+ * room for the large number being added in). Since the mantissa is, at a -+ * given moment in time, a fixed point integer itself, one can convert a -+ * float to various fixed point representations by moving around the point -+ * of a floating point number through arithmetic operations. This behavior -+ * is reliable on most modern platforms as it is mandated by the IEEE-754 -+ * standard for floating point arithmetic. -+ * -+ * For our purposes, a "magic number" must be carefully selected that is -+ * both large enough to produce the desired point-shifting effect, and also -+ * has no lower bits in its representation that would interfere with our -+ * value at the bottom of the mantissa. The magic number is calculated as -+ * follows: -+ * -+ * (2 ^ (MANTISSA_SIZE - FRACTIONAL_SIZE)) * 1.5 -+ * -+ * where in our case: -+ * - MANTISSA_SIZE for 64-bit doubles is 52 -+ * - FRACTIONAL_SIZE for 16.16 fixed point is 16 -+ * -+ * Although this approach provides a very large speedup of this function -+ * on a wide-array of systems, it does come with two caveats: -+ * -+ * 1) It uses banker's rounding as opposed to arithmetic rounding. -+ * 2) It doesn't function properly if the FPU is in single-precision -+ * mode. -+ */ -+#define CAIRO_MAGIC_NUMBER_FIXED_16_16 (103079215104.0) - cairo_fixed_t - _cairo_fixed_from_double (double d) - { -- return (cairo_fixed_t) floor (d * 65536 + 0.5); -+ union { -+ double d; -+ int32_t i[2]; -+ } u; -+ -+ u.d = d + CAIRO_MAGIC_NUMBER_FIXED_16_16; -+#ifdef FLOAT_WORDS_BIGENDIAN -+ return u.i[1]; -+#else -+ return u.i[0]; -+#endif - } - - cairo_fixed_t --- -1.2.6 - -- cgit v1.2.3