ExtractElementInst *w = new ExtractElementInst(in, unsigned(3),
name("extractw"),
m_block);
- llvm::Value *const_vec = vectorFromVals(
- ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
- ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
- ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
- ConstantFP::get(Type::FloatTy, APFloat(1.442695f))
- );
+ llvm::Value *const_vec = constVector(1.442695f, 1.442695f,
+ 1.442695f, 1.442695f);
return mul(vectorFromVals(callFLog(x), callFLog(y),
callFLog(z), callFLog(w)), const_vec);
}
llvm::Value *in3)
{
llvm::Value *m = mul(in1, in2);
- llvm::Value *vec1 = vectorFromVals(ConstantFP::get(Type::FloatTy,
- APFloat(1.f)),
- ConstantFP::get(Type::FloatTy,
- APFloat(1.f)),
- ConstantFP::get(Type::FloatTy,
- APFloat(1.f)),
- ConstantFP::get(Type::FloatTy,
- APFloat(1.f)));
+ llvm::Value *vec1 = constVector(1.f, 1.f, 1.f, 1.f);
llvm::Value *s = sub(vec1, in1);
return add(m, mul(s, in3));
}
return func;
}
+llvm::Value * Instructions::constVector(float x, float y, float z, float w)
+{
+ std::vector<Constant*> vec(4);
+ vec[0] = ConstantFP::get(Type::FloatTy, APFloat(x));
+ vec[1] = ConstantFP::get(Type::FloatTy, APFloat(y));
+ vec[2] = ConstantFP::get(Type::FloatTy, APFloat(z));
+ vec[3] = ConstantFP::get(Type::FloatTy, APFloat(w));
+ return ConstantVector::get(m_floatVecType, vec);
+}
+
#endif //MESA_LLVM
+
llvm::Constant *Storage::shuffleMask(int vec)
{
if (!m_extSwizzleVec) {
- Constant *const_vec = Constant::getNullValue(m_floatVecType);
- InsertElementInst *res = new InsertElementInst(const_vec,
- ConstantFP::get(Type::FloatTy, APFloat(0.f)),
- unsigned(0),
- name("extswx"), m_block);
- res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(1.f)),
- unsigned(1),
- name("extswy"),
- m_block);
- res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(0.f)),
- unsigned(2),
- name("extswz"),
- m_block);
- res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(1.f)),
- unsigned(3),
- name("extsww"),
- m_block);
- m_extSwizzleVec = res;
+ std::vector<Constant*> elems;
+ elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(0.f)));
+ elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(1.f)));
+ elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(0.f)));
+ elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(1.f)));
+ m_extSwizzleVec = ConstantVector::get(m_floatVecType, elems);
}
if (m_intVecs.find(vec) != m_intVecs.end()) {