Index: src/opts/SkPMFloat_neon.h |
diff --git a/src/opts/SkPMFloat_neon.h b/src/opts/SkPMFloat_neon.h |
index 780981bd9555192961950dec0813aa19fee3f69b..e5b16f5e6f25f352c217c972cdea5e982a660f30 100644 |
--- a/src/opts/SkPMFloat_neon.h |
+++ b/src/opts/SkPMFloat_neon.h |
@@ -26,10 +26,8 @@ inline SkPMFloat::SkPMFloat(SkPMColor c) { |
SkASSERT(this->isValid()); |
} |
-inline SkPMColor SkPMFloat::get() const { |
- SkASSERT(this->isValid()); |
- float32x4_t add_half = vaddq_f32(fColors, vdupq_n_f32(0.5f)); |
- uint32x4_t fix8_32 = vcvtq_u32_f32(add_half); // vcvtq_u32_f32 truncates, so round manually |
+inline SkPMColor SkPMFloat::trunc() const { |
+ uint32x4_t fix8_32 = vcvtq_u32_f32(fColors); // vcvtq_u32_f32 truncates |
uint16x4_t fix8_16 = vmovn_u32(fix8_32); |
uint8x8_t fix8 = vmovn_u16(vcombine_u16(fix8_16, vdup_n_u16(0))); |
SkPMColor c = vget_lane_u32((uint32x2_t)fix8, 0); |
@@ -37,6 +35,11 @@ inline SkPMColor SkPMFloat::get() const { |
return c; |
} |
+inline SkPMColor SkPMFloat::get() const { |
+ SkASSERT(this->isValid()); |
+ return SkPMFloat(Sk4f(0.5f) + *this).trunc(); |
+} |
+ |
inline SkPMColor SkPMFloat::clamped() const { |
float32x4_t add_half = vaddq_f32(fColors, vdupq_n_f32(0.5f)); |
uint32x4_t fix8_32 = vcvtq_u32_f32(add_half); // vcvtq_u32_f32 truncates, so round manually |