summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2007-10-18 05:51:01 -0400
committerZack Rusin <[email protected]>2007-10-24 11:21:04 -0400
commit1c955171c84f5d062f5f0be983de636a1817c6f7 (patch)
tree889721ce994dc41c0968f5c7016e59e9101e888e
parentbd38f4d92125e648b276344ebb2ab9d517b3e7a5 (diff)
Implement ex2 opcode
-rw-r--r--src/mesa/pipe/llvm/instructions.cpp9
-rw-r--r--src/mesa/pipe/llvm/instructions.h1
-rw-r--r--src/mesa/pipe/llvm/llvmtgsi.cpp4
3 files changed, 13 insertions, 1 deletions
diff --git a/src/mesa/pipe/llvm/instructions.cpp b/src/mesa/pipe/llvm/instructions.cpp
index ee67ae0eeda..1e6b74eac62 100644
--- a/src/mesa/pipe/llvm/instructions.cpp
+++ b/src/mesa/pipe/llvm/instructions.cpp
@@ -302,3 +302,12 @@ llvm::Value * Instructions::dst(llvm::Value *in1, llvm::Value *in2)
ry, z, w);
}
+llvm::Value * Instructions::ex2(llvm::Value *in)
+{
+ llvm::Value *val = callPow(ConstantFP::get(Type::FloatTy, APFloat(2.f)),
+ new ExtractElementInst(in, unsigned(0),
+ name("x1"),
+ m_block));
+ return vectorFromVals(val, val, val, val);
+}
+
diff --git a/src/mesa/pipe/llvm/instructions.h b/src/mesa/pipe/llvm/instructions.h
index 0ca9bd25a76..de33b79e378 100644
--- a/src/mesa/pipe/llvm/instructions.h
+++ b/src/mesa/pipe/llvm/instructions.h
@@ -19,6 +19,7 @@ public:
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 *ex2(llvm::Value *in1);
llvm::Value *lit(llvm::Value *in1);
llvm::Value *madd(llvm::Value *in1, llvm::Value *in2,
llvm::Value *in2);
diff --git a/src/mesa/pipe/llvm/llvmtgsi.cpp b/src/mesa/pipe/llvm/llvmtgsi.cpp
index 91c2d9beb8e..5ad45ff6ccf 100644
--- a/src/mesa/pipe/llvm/llvmtgsi.cpp
+++ b/src/mesa/pipe/llvm/llvmtgsi.cpp
@@ -249,7 +249,9 @@ translate_instruction(llvm::Module *module,
break;
case TGSI_OPCODE_ROUND:
break;
- case TGSI_OPCODE_EXPBASE2:
+ case TGSI_OPCODE_EXPBASE2: {
+ out = instr->ex2(inputs[0]);
+ }
break;
case TGSI_OPCODE_LOGBASE2:
break;