GBE: add scalar register support in loadImmInstruction.
authorZhigang Gong <zhigang.gong@linux.intel.com>
Thu, 9 May 2013 11:30:58 +0000 (19:30 +0800)
committerZhigang Gong <zhigang.gong@linux.intel.com>
Wed, 15 May 2013 09:09:51 +0000 (17:09 +0800)
There is a slight possibility that the destination register
is a scalar register. We need to check it here.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Tested-by: Lv, Meng <meng.lv@intel.com>
backend/src/backend/gen_insn_selection.cpp

index 2bd9aca..7280d7a 100644 (file)
@@ -1546,6 +1546,13 @@ namespace gbe
       const Immediate imm = insn.getImmediate();
       const GenRegister dst = sel.selReg(insn.getDst(0), type);
 
+      sel.push();
+      if (sel.isScalarOrBool(insn.getDst(0)) == true) {
+        sel.curr.execWidth = 1;
+        sel.curr.predicate = GEN_PREDICATE_NONE;
+        sel.curr.noMask = 1;
+      }
+
       switch (type) {
         case TYPE_U32:
         case TYPE_S32:
@@ -1559,6 +1566,7 @@ namespace gbe
         case TYPE_S8:  sel.MOV(dst, GenRegister::immw(imm.data.s8)); break;
         default: NOT_SUPPORTED;
       }
+      sel.pop();
       return true;
     }