Add missing methods to neon/sse SkNx implementations

Adds negate, abs, sqrt to Sk2f and/or Sk4f.

Bug: skia:
Change-Id: I0688dae45b32ff94abcc0525ef1f09d666f9c6e9
Reviewed-on: https://skia-review.googlesource.com/39642
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/tests/SkNxTest.cpp b/tests/SkNxTest.cpp
index e3f3cd6..240d7e0 100644
--- a/tests/SkNxTest.cpp
+++ b/tests/SkNxTest.cpp
@@ -210,6 +210,12 @@
     REPORTER_ASSERT(r, fs[1] == 0.0f);
     REPORTER_ASSERT(r, fs[2] == 2.0f);
     REPORTER_ASSERT(r, fs[3] == 4.0f);
+    auto fshi = Sk2f(0.0f, -0.0f).abs();
+    auto fslo = Sk2f(2.0f, -4.0f).abs();
+    REPORTER_ASSERT(r, fshi[0] == 0.0f);
+    REPORTER_ASSERT(r, fshi[1] == 0.0f);
+    REPORTER_ASSERT(r, fslo[0] == 2.0f);
+    REPORTER_ASSERT(r, fslo[1] == 4.0f);
 }
 
 DEF_TEST(Sk4i_abs, r) {
@@ -358,3 +364,31 @@
     Sk4f::Store4(dst, a, b, c, d);
     REPORTER_ASSERT(r, 0 == memcmp(dst, src, 16 * sizeof(float)));
 }
+
+DEF_TEST(SkNx_neg, r) {
+    auto fs = -Sk4f(0.0f, -0.0f, 2.0f, -4.0f);
+    REPORTER_ASSERT(r, fs[0] == 0.0f);
+    REPORTER_ASSERT(r, fs[1] == 0.0f);
+    REPORTER_ASSERT(r, fs[2] == -2.0f);
+    REPORTER_ASSERT(r, fs[3] == 4.0f);
+    auto fshi = -Sk2f(0.0f, -0.0f);
+    auto fslo = -Sk2f(2.0f, -4.0f);
+    REPORTER_ASSERT(r, fshi[0] == 0.0f);
+    REPORTER_ASSERT(r, fshi[1] == 0.0f);
+    REPORTER_ASSERT(r, fslo[0] == -2.0f);
+    REPORTER_ASSERT(r, fslo[1] == 4.0f);
+}
+
+DEF_TEST(SkNx_thenElse, r) {
+    auto fs = (Sk4f(0.0f, -0.0f, 2.0f, -4.0f) < 0).thenElse(-1, 1);
+    REPORTER_ASSERT(r, fs[0] == 1);
+    REPORTER_ASSERT(r, fs[1] == 1);
+    REPORTER_ASSERT(r, fs[2] == 1);
+    REPORTER_ASSERT(r, fs[3] == -1);
+    auto fshi = (Sk2f(0.0f, -0.0f) < 0).thenElse(-1, 1);
+    auto fslo = (Sk2f(2.0f, -4.0f) < 0).thenElse(-1, 1);
+    REPORTER_ASSERT(r, fshi[0] == 1);
+    REPORTER_ASSERT(r, fshi[1] == 1);
+    REPORTER_ASSERT(r, fslo[0] == 1);
+    REPORTER_ASSERT(r, fslo[1] == -1);
+}