slight bugfix for shr_i16x2 in the interpreter

It's doing an arithmetic shift at head,
but we want a logical shift there...

Change-Id: I82eba87ccc3fba6a9511bf3a4d3ff88d90c29585
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/220855
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/src/opts/SkVM_opts.h b/src/opts/SkVM_opts.h
index 713b5d4..f814eae 100644
--- a/src/opts/SkVM_opts.h
+++ b/src/opts/SkVM_opts.h
@@ -28,7 +28,8 @@
         using U32 = skvx::Vec<K, uint32_t>;
         using  U8 = skvx::Vec<K, uint8_t>;
 
-        using I16x2 = skvx::Vec<2*K, int16_t>;
+        using I16x2 = skvx::Vec<2*K,  int16_t>;
+        using U16x2 = skvx::Vec<2*K, uint16_t>;
 
         union Slot {
             I32 i32;
@@ -133,7 +134,7 @@
                         r(d).i32 = skvx::bit_pun<I32>(skvx::bit_pun<I16x2>(r(x   ).i32) *
                                                       skvx::bit_pun<I16x2>(r(y.id).i32) ); break;
                     CASE(Op::shr_i16x2):
-                        r(d).i32 = skvx::bit_pun<I32>(skvx::bit_pun<I16x2>(r(x).i32) >> y.imm);
+                        r(d).i32 = skvx::bit_pun<I32>(skvx::bit_pun<U16x2>(r(x).i32) >> y.imm);
                         break;
 
                     CASE(Op::bit_and): r(d).i32 = r(x).i32 & r(y.id).i32; break;