SDValue Pointer = DAG.getNode(SPUISD::IndirectAddr, dl, PtrVT,
DAG.getRegister(SPU::R1, PtrVT),
DAG.getConstant(Idx, PtrVT));
- SDValue ShufMask = DAG.getNode(SPUISD::SHUFFLE_MASK, dl, VT, Pointer);
+ // widen the mask when dealing with half vectors
+ EVT maskVT = EVT::getVectorVT(*(DAG.getContext()), VT.getVectorElementType(),
+ 128/ VT.getVectorElementType().getSizeInBits());
+ SDValue ShufMask = DAG.getNode(SPUISD::SHUFFLE_MASK, dl, maskVT, Pointer);
SDValue result =
DAG.getNode(SPUISD::SHUFB, dl, VT,
def v2f64: LoadDFormVec<v2f64>;
def v2i32: LoadDFormVec<v2i32>;
+ def v2f32: LoadDFormVec<v2f32>;
def r128: LoadDForm<GPRC>;
def r64: LoadDForm<R64C>;
def v2f64: LoadAFormVec<v2f64>;
def v2i32: LoadAFormVec<v2i32>;
+ def v2f32: LoadAFormVec<v2f32>;
def r128: LoadAForm<GPRC>;
def r64: LoadAForm<R64C>;
def v2f64: LoadXFormVec<v2f64>;
def v2i32: LoadXFormVec<v2i32>;
+ def v2f32: LoadXFormVec<v2f32>;
def r128: LoadXForm<GPRC>;
def r64: LoadXForm<R64C>;
def v2f64: StoreDFormVec<v2f64>;
def v2i32: StoreDFormVec<v2i32>;
+ def v2f32: StoreDFormVec<v2f32>;
def r128: StoreDForm<GPRC>;
def r64: StoreDForm<R64C>;
def v2f64: StoreAFormVec<v2f64>;
def v2i32: StoreAFormVec<v2i32>;
+ def v2f32: StoreAFormVec<v2f32>;
def r128: StoreAForm<GPRC>;
def r64: StoreAForm<R64C>;
def v2f64: StoreXFormVec<v2f64>;
def v2i32: StoreXFormVec<v2i32>;
+ def v2f32: StoreXFormVec<v2f32>;
def r128: StoreXForm<GPRC>;
def r64: StoreXForm<R64C>;
ret %vec %rv
}
+define void @test_store(%vec %val, %vec* %ptr){
+
+;CHECK: stqd
+ store %vec undef, %vec* null
+
+;CHECK: stqd $3, 0($4)
+;CHECK: bi $lr
+ store %vec %val, %vec* %ptr
+ ret void
+}
+
+define %vec @test_insert(){
+;CHECK: cwd
+;CHECK: shufb $3
+ %rv = insertelement %vec undef, float 0.0e+00, i32 undef
+;CHECK: bi $lr
+ ret %vec %rv
+}