Implement dph opcode

This commit is contained in:
Zack Rusin 2007-10-17 13:38:53 -04:00
parent 7abe3364b2
commit 3c558e17f0
3 changed files with 31 additions and 1 deletions

View file

@ -253,3 +253,30 @@ llvm::Value * Instructions::dp4(llvm::Value *in1, llvm::Value *in2)
return vectorFromVals(dot4, dot4, dot4, dot4);
}
llvm::Value * Instructions::dph(llvm::Value *in1, llvm::Value *in2)
{
Value *mulRes = mul(in1, in2);
ExtractElementInst *x = new ExtractElementInst(mulRes, unsigned(0),
name("extractx"),
m_block);
ExtractElementInst *y = new ExtractElementInst(mulRes, unsigned(1),
name("extracty"),
m_block);
ExtractElementInst *z = new ExtractElementInst(mulRes, unsigned(2),
name("extractz"),
m_block);
ExtractElementInst *w = new ExtractElementInst(in2, unsigned(3),
name("val2w"),
m_block);
BinaryOperator *xy = BinaryOperator::create(Instruction::Add, x, y,
name("xy"),
m_block);
BinaryOperator *xyz = BinaryOperator::create(Instruction::Add, xy, z,
name("xyz"),
m_block);
BinaryOperator *dph = BinaryOperator::create(Instruction::Add, xyz, w,
name("dph"),
m_block);
return vectorFromVals(dph, dph, dph, dph);
}

View file

@ -17,6 +17,7 @@ public:
llvm::Value *add(llvm::Value *in1, llvm::Value *in2);
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 *lit(llvm::Value *in1);
llvm::Value *madd(llvm::Value *in1, llvm::Value *in2,
llvm::Value *in2);

View file

@ -263,7 +263,9 @@ translate_instruction(llvm::Module *module,
break;
case TGSI_OPCODE_RCC:
break;
case TGSI_OPCODE_DPH:
case TGSI_OPCODE_DPH: {
out = instr->dph(inputs[0], inputs[1]);
}
break;
case TGSI_OPCODE_COS:
break;