+++ /dev/null
-From 940c62bd51d498d5cdc7d8b1b8aecd750d1094ef Mon Sep 17 00:00:00 2001
-From: Jonathan Morton <jonathan.morton@movial.com>
-Date: Wed, 2 Jun 2010 13:58:31 +0300
-Subject: [PATCH] Rely less on DP FPU for common matrix funcs.
-
----
- src/cairo-matrix.c | 20 ++++++++++----------
- 1 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/src/cairo-matrix.c b/src/cairo-matrix.c
-index de1c6ed..7519852 100644
---- a/src/cairo-matrix.c
-+++ b/src/cairo-matrix.c
-@@ -43,6 +43,13 @@
- #define ISFINITE(x) ((x) * (x) >= 0.) /* check for NaNs */
- #endif
-
-+static const cairo_matrix_t
-+_cairo_matrix_identity = {
-+ .xx = 1, .xy = 0,
-+ .yx = 0, .yy = 1,
-+ .x0 = 0, .y0 = 0
-+};
-+
- static void
- _cairo_matrix_scalar_multiply (cairo_matrix_t *matrix, double scalar);
-
-@@ -58,10 +65,8 @@ _cairo_matrix_compute_adjoint (cairo_matrix_t *matrix);
- void
- cairo_matrix_init_identity (cairo_matrix_t *matrix)
- {
-- cairo_matrix_init (matrix,
-- 1, 0,
-- 0, 1,
-- 0, 0);
-+ matrix->xx = matrix->yy = 1;
-+ matrix->xy = matrix->yx = matrix->x0 = matrix->y0 = 0;
- }
- slim_hidden_def(cairo_matrix_init_identity);
-
-@@ -86,7 +91,6 @@ slim_hidden_def(cairo_matrix_init_identity);
- void
- cairo_matrix_init (cairo_matrix_t *matrix,
- double xx, double yx,
--
- double xy, double yy,
- double x0, double y0)
- {
-@@ -650,19 +654,32 @@ _cairo_matrix_compute_basis_scale_factors (const cairo_matrix_t *matrix,
- return CAIRO_STATUS_SUCCESS;
- }
-
-+static inline cairo_bool_t
-+_cairo_compare_matrix (const cairo_matrix_t *a, const cairo_matrix_t *b, const int n)
-+{
-+ uint64_t *ia = (uint64_t*) a;
-+ uint64_t *ib = (uint64_t*) b;
-+ uint64_t x = 0;
-+ int i;
-+
-+ assert(sizeof(double) == sizeof(uint64_t));
-+
-+ for(i=0; i < n; i++)
-+ x |= ia[i] ^ ib[i];
-+
-+ return !x;
-+}
-+
- cairo_bool_t
- _cairo_matrix_is_identity (const cairo_matrix_t *matrix)
- {
-- return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
-- matrix->xy == 0.0 && matrix->yy == 1.0 &&
-- matrix->x0 == 0.0 && matrix->y0 == 0.0);
-+ return _cairo_compare_matrix(matrix, &_cairo_matrix_identity, 6);
- }
-
- cairo_bool_t
- _cairo_matrix_is_translation (const cairo_matrix_t *matrix)
- {
-- return (matrix->xx == 1.0 && matrix->yx == 0.0 &&
-- matrix->xy == 0.0 && matrix->yy == 1.0);
-+ return _cairo_compare_matrix(matrix, &_cairo_matrix_identity, 4);
- }
-
- cairo_bool_t