Implement dst opcode
authorZack Rusin <zack@tungstengraphics.com>
Wed, 17 Oct 2007 17:46:00 +0000 (13:46 -0400)
committerZack Rusin <zack@tungstengraphics.com>
Wed, 24 Oct 2007 15:21:04 +0000 (11:21 -0400)
src/mesa/pipe/llvm/instructions.cpp
src/mesa/pipe/llvm/instructions.h
src/mesa/pipe/llvm/llvmtgsi.cpp

index 62289ba..ee67ae0 100644 (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);
+}
+
index fb8ac9b..0ca9bd2 100644 (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);
index 9a5d3b8..91c2d9b 100644 (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;