add TupleDstPolicy for instructions
authorLu Guanqun <guanqun.lu@intel.com>
Tue, 15 Jan 2013 06:22:52 +0000 (14:22 +0800)
committerZhigang Gong <zhigang.gong@linux.intel.com>
Wed, 10 Apr 2013 06:51:31 +0000 (14:51 +0800)
Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
backend/src/ir/instruction.cpp

index 7146f93..5a6859f 100644 (file)
@@ -99,6 +99,22 @@ namespace ir {
       }
     };
 
+    /*! For instructions that use a tuple for destination */
+    template <typename T>
+    struct TupleDstPolicy {
+      INLINE uint32_t getDstNum(void) const {
+        return static_cast<const T*>(this)->dstNum;
+      }
+      INLINE Register getDst(const Function &fn, uint32_t ID) const {
+        GBE_ASSERTM(ID < static_cast<const T*>(this)->dstNum, "Out-of-bound source register");
+        return fn.getRegister(static_cast<const T*>(this)->dst, ID);
+      }
+      INLINE void setDst(Function &fn, uint32_t ID, Register reg) {
+        GBE_ASSERTM(ID < static_cast<const T*>(this)->dstNum, "Out-of-bound source register");
+        return fn.setRegister(static_cast<T*>(this)->dst, ID, reg);
+      }
+    };
+
     /*! All unary and binary arithmetic instructions */
     template <uint32_t srcNum> // 1 or 2
     class ALIGNED_INSTRUCTION NaryInstruction :