diff options
Diffstat (limited to 'recipes/cairo/files/0001-Rely-less-on-DP-FPU-for-common-matrix-test-funcs.patch')
-rw-r--r-- | recipes/cairo/files/0001-Rely-less-on-DP-FPU-for-common-matrix-test-funcs.patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/recipes/cairo/files/0001-Rely-less-on-DP-FPU-for-common-matrix-test-funcs.patch b/recipes/cairo/files/0001-Rely-less-on-DP-FPU-for-common-matrix-test-funcs.patch new file mode 100644 index 0000000000..c82b3d9373 --- /dev/null +++ b/recipes/cairo/files/0001-Rely-less-on-DP-FPU-for-common-matrix-test-funcs.patch @@ -0,0 +1,86 @@ +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 |