OLD | NEW |
1 #ifndef Sk4x_DEFINED | 1 #ifndef Sk4x_DEFINED |
2 #define Sk4x_DEFINED | 2 #define Sk4x_DEFINED |
3 | 3 |
4 #include "SkTypes.h" | 4 #include "SkTypes.h" |
5 | 5 |
6 #define SK4X_PREAMBLE 1 | 6 #define SK4X_PREAMBLE 1 |
7 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 | 7 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 |
8 #include "../opts/Sk4x_sse.h" | 8 #include "../opts/Sk4x_sse.h" |
9 #elif defined(SK_ARM_HAS_NEON) | 9 #elif defined(SK_ARM_HAS_NEON) |
10 #include "../opts/Sk4x_neon.h" | 10 #include "../opts/Sk4x_neon.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 | 45 |
46 Sk4x bitNot() const; | 46 Sk4x bitNot() const; |
47 Sk4x bitAnd(const Sk4x&) const; | 47 Sk4x bitAnd(const Sk4x&) const; |
48 Sk4x bitOr(const Sk4x&) const; | 48 Sk4x bitOr(const Sk4x&) const; |
49 // TODO: Sk4x bitAndNot(const Sk4x&) const; is efficient in SSE. | 49 // TODO: Sk4x bitAndNot(const Sk4x&) const; is efficient in SSE. |
50 Sk4x add(const Sk4x&) const; | 50 Sk4x add(const Sk4x&) const; |
51 Sk4x subtract(const Sk4x&) const; | 51 Sk4x subtract(const Sk4x&) const; |
52 Sk4x multiply(const Sk4x&) const; | 52 Sk4x multiply(const Sk4x&) const; |
53 Sk4x divide(const Sk4x&) const; | 53 Sk4x divide(const Sk4x&) const; |
54 | 54 |
| 55 // TODO: why doesn't MSVC like operator~() ? |
| 56 //Sk4x operator ~() const { return this->bitNot(); } |
| 57 Sk4x operator &(const Sk4x& o) const { return this->bitAnd(o); } |
| 58 Sk4x operator |(const Sk4x& o) const { return this->bitOr (o); } |
| 59 Sk4x operator +(const Sk4x& o) const { return this->add(o); } |
| 60 Sk4x operator -(const Sk4x& o) const { return this->subtract(o); } |
| 61 Sk4x operator *(const Sk4x& o) const { return this->multiply(o); } |
| 62 Sk4x operator /(const Sk4x& o) const { return this->divide(o); } |
| 63 |
| 64 Sk4x& operator &=(const Sk4x& o) { return (*this = *this & o); } |
| 65 Sk4x& operator |=(const Sk4x& o) { return (*this = *this | o); } |
| 66 Sk4x& operator +=(const Sk4x& o) { return (*this = *this + o); } |
| 67 Sk4x& operator -=(const Sk4x& o) { return (*this = *this - o); } |
| 68 Sk4x& operator *=(const Sk4x& o) { return (*this = *this * o); } |
| 69 Sk4x& operator /=(const Sk4x& o) { return (*this = *this / o); } |
| 70 |
55 Sk4x rsqrt() const; // Approximate reciprocal sqrt(). | 71 Sk4x rsqrt() const; // Approximate reciprocal sqrt(). |
56 Sk4x sqrt() const; // this->multiply(this->rsqrt()) may be faster, but le
ss precise. | 72 Sk4x sqrt() const; // this->multiply(this->rsqrt()) may be faster, but le
ss precise. |
57 | 73 |
58 Sk4i equal(const Sk4x&) const; | 74 Sk4i equal(const Sk4x&) const; |
59 Sk4i notEqual(const Sk4x&) const; | 75 Sk4i notEqual(const Sk4x&) const; |
60 Sk4i lessThan(const Sk4x&) const; | 76 Sk4i lessThan(const Sk4x&) const; |
61 Sk4i greaterThan(const Sk4x&) const; | 77 Sk4i greaterThan(const Sk4x&) const; |
62 Sk4i lessThanEqual(const Sk4x&) const; | 78 Sk4i lessThanEqual(const Sk4x&) const; |
63 Sk4i greaterThanEqual(const Sk4x&) const; | 79 Sk4i greaterThanEqual(const Sk4x&) const; |
64 | 80 |
| 81 Sk4i operator ==(const Sk4x& o) const { return this->equal(o); } |
| 82 Sk4i operator !=(const Sk4x& o) const { return this->notEqual(o); } |
| 83 Sk4i operator <(const Sk4x& o) const { return this->lessThan(o); } |
| 84 Sk4i operator >(const Sk4x& o) const { return this->greaterThan(o); } |
| 85 Sk4i operator <=(const Sk4x& o) const { return this->lessThanEqual(o); } |
| 86 Sk4i operator >=(const Sk4x& o) const { return this->greaterThanEqual(o); } |
| 87 |
65 static Sk4x Min(const Sk4x& a, const Sk4x& b); | 88 static Sk4x Min(const Sk4x& a, const Sk4x& b); |
66 static Sk4x Max(const Sk4x& a, const Sk4x& b); | 89 static Sk4x Max(const Sk4x& a, const Sk4x& b); |
67 | 90 |
68 // Swizzles follow OpenCL xyzw convention. | 91 // Swizzles follow OpenCL xyzw convention. |
69 Sk4x zwxy() const; | 92 Sk4x zwxy() const; |
70 | 93 |
71 // When there's a second argument, it's abcd. | 94 // When there's a second argument, it's abcd. |
72 static Sk4x XYAB(const Sk4x& xyzw, const Sk4x& abcd); | 95 static Sk4x XYAB(const Sk4x& xyzw, const Sk4x& abcd); |
73 static Sk4x ZWCD(const Sk4x& xyzw, const Sk4x& abcd); | 96 static Sk4x ZWCD(const Sk4x& xyzw, const Sk4x& abcd); |
74 | 97 |
(...skipping 18 matching lines...) Expand all Loading... |
93 | 116 |
94 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 | 117 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 |
95 #include "../opts/Sk4x_sse.h" | 118 #include "../opts/Sk4x_sse.h" |
96 #elif defined(SK_ARM_HAS_NEON) | 119 #elif defined(SK_ARM_HAS_NEON) |
97 #include "../opts/Sk4x_neon.h" | 120 #include "../opts/Sk4x_neon.h" |
98 #else | 121 #else |
99 #include "../opts/Sk4x_none.h" | 122 #include "../opts/Sk4x_none.h" |
100 #endif | 123 #endif |
101 | 124 |
102 #endif//Sk4x_DEFINED | 125 #endif//Sk4x_DEFINED |
OLD | NEW |