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;