Implement bitcast between i32 and (emulated) v4i8.

BUG=swiftshader:15

Change-Id: Ic795def8a914508ab0d850c846b73b343ace45de
diff --git a/src/IceTargetLoweringX86BaseImpl.h b/src/IceTargetLoweringX86BaseImpl.h
index e7d3100..a038c43 100644
--- a/src/IceTargetLoweringX86BaseImpl.h
+++ b/src/IceTargetLoweringX86BaseImpl.h
@@ -3212,7 +3212,14 @@
     case IceType_v16i8:
     case IceType_v4i32:
     case IceType_v4f32: {
-      _movp(Dest, legalizeToReg(Src0));
+      if (Src0->getType() == IceType_i32) {
+        // Bitcast requires equal type sizes, which isn't strictly the case
+        // between scalars and vectors, but to emulate v4i8 vectors one has to
+        // use v16i8 vectors.
+        _movd(Dest, legalize(Src0, Legal_Reg | Legal_Mem));
+      } else {
+        _movp(Dest, legalizeToReg(Src0));
+      }
     } break;
     }
     break;