GBE: fix one double related bugs for post register scheduling.
[contrib/beignet.git] / backend / src / backend / gen8_encoder.cpp
index 6cb6e70..ae2d4eb 100644 (file)
@@ -70,7 +70,7 @@ namespace gbe
                                     uint32_t response_length)
   {
     Gen8NativeInstruction *gen8_insn = &insn->gen8_insn;
-    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA_CACHE;
+    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA;
     setMessageDescriptor(insn, sfid, msg_length, response_length);
     gen8_insn->bits3.gen7_untyped_rw.msg_type = msg_type;
     gen8_insn->bits3.gen7_untyped_rw.bti = bti;
@@ -87,7 +87,7 @@ namespace gbe
                                           unsigned char msg_type, uint32_t msg_length, bool header_present)
   {
     Gen8NativeInstruction *gen8_insn = &insn->gen8_insn;
-    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA_CACHE;
+    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA;
     setMessageDescriptor(insn, sfid, msg_length, 0, header_present);
     gen8_insn->bits3.gen7_typed_rw.bti = bti;
     gen8_insn->bits3.gen7_typed_rw.msg_type = msg_type;
@@ -96,6 +96,14 @@ namespace gbe
     gen8_insn->bits3.gen7_typed_rw.slot = 1;
   }
 
+  void Gen8Encoder::F16TO32(GenRegister dest, GenRegister src0) {
+    MOV(GenRegister::retype(dest, GEN_TYPE_F), GenRegister::retype(src0, GEN_TYPE_HF));
+  }
+
+  void Gen8Encoder::F32TO16(GenRegister dest, GenRegister src0) {
+    MOV(GenRegister::retype(dest, GEN_TYPE_HF), GenRegister::retype(src0, GEN_TYPE_F));
+  }
+
   void Gen8Encoder::ATOMIC(GenRegister dst, uint32_t function, GenRegister src, uint32_t bti, uint32_t srcNum) {
     GenNativeInstruction *insn = this->next(GEN_OPCODE_SEND);
     Gen8NativeInstruction *gen8_insn = &insn->gen8_insn;
@@ -116,7 +124,7 @@ namespace gbe
     this->setSrc0(insn, GenRegister::ud8grf(src.nr, 0));
     this->setSrc1(insn, GenRegister::immud(0));
 
-    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA_CACHE;
+    const GenMessageTarget sfid = GEN_SFID_DATAPORT1_DATA;
     setMessageDescriptor(insn, sfid, msg_length, response_length);
     gen8_insn->bits3.gen7_atomic_op.msg_type = GEN75_P1_UNTYPED_ATOMIC_OP;
     gen8_insn->bits3.gen7_atomic_op.bti = bti;
@@ -211,8 +219,9 @@ namespace gbe
     pop();
   }
 
-  void Gen8Encoder::MOV_DF(GenRegister dest, GenRegister src0, GenRegister r) {
+  void Gen8Encoder::MOV_DF(GenRegister dest, GenRegister src0, GenRegister tmp) {
     GBE_ASSERT((src0.type == GEN_TYPE_F && dest.isdf()) || (src0.isdf() && dest.type == GEN_TYPE_F));
+    GenRegister r = GenRegister::retype(tmp, GEN_TYPE_F);
     int w = curr.execWidth;
     GenRegister r0;
     r0 = GenRegister::h2(r);