| Index: src/core/SkRect.cpp
|
| diff --git a/src/core/SkRect.cpp b/src/core/SkRect.cpp
|
| index 97de0a6a4a65b1b0633fde32d38a7096134641a0..bb51ede7573dbe95eace7faf1437d4bf7631f3b2 100644
|
| --- a/src/core/SkRect.cpp
|
| +++ b/src/core/SkRect.cpp
|
| @@ -55,21 +55,6 @@ void SkRect::toQuad(SkPoint quad[4]) const {
|
| quad[3].set(fLeft, fBottom);
|
| }
|
|
|
| -#ifdef SK_SCALAR_IS_FLOAT
|
| - #define SkFLOATCODE(code) code
|
| -#else
|
| - #define SkFLOATCODE(code)
|
| -#endif
|
| -
|
| -// For float compares (at least on x86, by removing the else from the min/max
|
| -// computation, we get MAXSS and MINSS instructions, and no branches.
|
| -// Fixed point has no such opportunity (afaik), so we leave the else in that case
|
| -#ifdef SK_SCALAR_IS_FLOAT
|
| - #define MINMAX_ELSE
|
| -#else
|
| - #define MINMAX_ELSE else
|
| -#endif
|
| -
|
| bool SkRect::setBoundsCheck(const SkPoint pts[], int count) {
|
| SkASSERT((pts && count > 0) || count == 0);
|
|
|
| @@ -85,17 +70,22 @@ bool SkRect::setBoundsCheck(const SkPoint pts[], int count) {
|
|
|
| // If all of the points are finite, accum should stay 0. If we encounter
|
| // a NaN or infinity, then accum should become NaN.
|
| - SkFLOATCODE(float accum = 0;)
|
| - SkFLOATCODE(accum *= l; accum *= t;)
|
| + float accum = 0;
|
| + accum *= l; accum *= t;
|
|
|
| for (int i = 1; i < count; i++) {
|
| SkScalar x = pts[i].fX;
|
| SkScalar y = pts[i].fY;
|
|
|
| - SkFLOATCODE(accum *= x; accum *= y;)
|
| + accum *= x; accum *= y;
|
| +
|
| + // we use if instead of if/else, so we can generate min/max
|
| + // float instructions (at least on SSE)
|
| + if (x < l) l = x;
|
| + if (x > r) r = x;
|
|
|
| - if (x < l) l = x; MINMAX_ELSE if (x > r) r = x;
|
| - if (y < t) t = y; MINMAX_ELSE if (y > b) b = y;
|
| + if (y < t) t = y;
|
| + if (y > b) b = y;
|
| }
|
|
|
| SkASSERT(!accum || !SkScalarIsFinite(accum));
|
|
|