summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/llvm/instructions.h
diff options
context:
space:
mode:
authorZack Rusin <zack@tungstengraphics.com>2007-10-17 11:27:46 -0400
committerZack Rusin <zack@tungstengraphics.com>2007-10-24 11:21:03 -0400
commit3975f34fd36f8b04d499bb6b3d48eaeef5cab24e (patch)
tree1d162709572e7880be73993723ff79bab8caefd9 /src/mesa/pipe/llvm/instructions.h
parentfa2962d14833480e154e8478e57758f18cc1442e (diff)
Implement basic opcode translation and storage translation.
Diffstat (limited to 'src/mesa/pipe/llvm/instructions.h')
-rw-r--r--src/mesa/pipe/llvm/instructions.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/mesa/pipe/llvm/instructions.h b/src/mesa/pipe/llvm/instructions.h
new file mode 100644
index 0000000000..c6e77710ea
--- /dev/null
+++ b/src/mesa/pipe/llvm/instructions.h
@@ -0,0 +1,43 @@
+#ifndef INSTRUCTIONS_H
+#define INSTRUCTIONS_H
+
+#include <llvm/BasicBlock.h>
+#include <llvm/Module.h>
+#include <llvm/Value.h>
+
+namespace llvm {
+ class VectorType;
+}
+
+class Instructions
+{
+public:
+ Instructions(llvm::Module *mod, llvm::BasicBlock *block);
+
+ llvm::Value *add(llvm::Value *in1, llvm::Value *in2);
+ llvm::Value *dp3(llvm::Value *in1, llvm::Value *in2);
+ llvm::Value *lit(llvm::Value *in1);
+ llvm::Value *madd(llvm::Value *in1, llvm::Value *in2,
+ llvm::Value *in2);
+ llvm::Value *mul(llvm::Value *in1, llvm::Value *in2);
+ llvm::Value *rsq(llvm::Value *in1);
+private:
+ const char *name(const char *prefix);
+
+ llvm::Value *callFSqrt(llvm::Value *val);
+ llvm::Value *callFAbs(llvm::Value *val);
+
+ llvm::Value *vectorFromVals(llvm::Value *x, llvm::Value *y,
+ llvm::Value *z, llvm::Value *w=0);
+private:
+ llvm::Module *m_mod;
+ char m_name[32];
+ llvm::BasicBlock *m_block;
+ int m_idx;
+ llvm::Function *m_llvmFSqrt;
+ llvm::Function *m_llvmFAbs;
+
+ llvm::VectorType *m_floatVecType;
+};
+
+#endif