Implement dst opcode

This commit is contained in:
Zack Rusin 2007-10-17 13:46:00 -04:00
parent 3c558e17f0
commit bd38f4d921
3 changed files with 26 additions and 1 deletions

View file

@ -280,3 +280,25 @@ llvm::Value * Instructions::dph(llvm::Value *in1, llvm::Value *in2)
return vectorFromVals(dph, dph, dph, dph);
}
llvm::Value * Instructions::dst(llvm::Value *in1, llvm::Value *in2)
{
ExtractElementInst *y1 = new ExtractElementInst(in1, unsigned(1),
name("y1"),
m_block);
ExtractElementInst *z = new ExtractElementInst(in1, unsigned(2),
name("z"),
m_block);
ExtractElementInst *y2 = new ExtractElementInst(in2, unsigned(1),
name("y2"),
m_block);
ExtractElementInst *w = new ExtractElementInst(in2, unsigned(3),
name("w"),
m_block);
BinaryOperator *ry = BinaryOperator::create(Instruction::Mul,
y1, y2,
name("tyuy"),
m_block);
return vectorFromVals(ConstantFP::get(Type::FloatTy, APFloat(1.f)),
ry, z, w);
}

View file

@ -18,6 +18,7 @@ public:
llvm::Value *dp3(llvm::Value *in1, llvm::Value *in2);
llvm::Value *dp4(llvm::Value *in1, llvm::Value *in2);
llvm::Value *dph(llvm::Value *in1, llvm::Value *in2);
llvm::Value *dst(llvm::Value *in1, llvm::Value *in2);
llvm::Value *lit(llvm::Value *in1);
llvm::Value *madd(llvm::Value *in1, llvm::Value *in2,
llvm::Value *in2);

View file

@ -209,7 +209,9 @@ translate_instruction(llvm::Module *module,
out = instr->dp4(inputs[0], inputs[1]);
}
break;
case TGSI_OPCODE_DST:
case TGSI_OPCODE_DST: {
out = instr->dst(inputs[0], inputs[1]);
}
break;
case TGSI_OPCODE_MIN:
break;