summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPan Xiuli <xiuli.pan@intel.com>2017-04-06 16:26:36 +0800
committerYang Rong <rong.r.yang@intel.com>2017-09-22 16:25:20 +0800
commit307e30b4f3f5682f0d5770f59454a66860b70e3c (patch)
treeda1812d78a40668d860ea10b68634524605e03c2
parentfa82b1d1161b3c96e45444af03d8b98a951875fc (diff)
Backend: Fix flag and subflag seting for src 3 instruction
Before gen8, src 3 instruction has different flag and subflag bits V2: Fix the sub flag bit. Signed-off-by: Pan Xiuli <xiuli.pan@intel.com> Reviewed-by: Yang Rong <rong.r.yang@intel.com>
-rw-r--r--backend/src/backend/gen75_encoder.cpp10
-rw-r--r--backend/src/backend/gen7_encoder.cpp10
-rw-r--r--backend/src/backend/gen7_instruction.hpp5
3 files changed, 19 insertions, 6 deletions
diff --git a/backend/src/backend/gen75_encoder.cpp b/backend/src/backend/gen75_encoder.cpp
index b82cc431..06cca3c9 100644
--- a/backend/src/backend/gen75_encoder.cpp
+++ b/backend/src/backend/gen75_encoder.cpp
@@ -53,8 +53,14 @@ namespace gbe
gen7_insn->header.quarter_control = this->curr.quarterControl;
gen7_insn->bits1.ia1.nib_ctrl = this->curr.nibControl;
gen7_insn->header.mask_control = this->curr.noMask;
- gen7_insn->bits2.ia1.flag_reg_nr = this->curr.flag;
- gen7_insn->bits2.ia1.flag_sub_reg_nr = this->curr.subFlag;
+ if (insn->header.opcode == GEN_OPCODE_MAD || insn->header.opcode == GEN_OPCODE_LRP)
+ {
+ gen7_insn->bits1.da3src.flag_reg_nr = this->curr.flag;
+ gen7_insn->bits1.da3src.flag_sub_reg_nr = this->curr.subFlag;
+ } else {
+ gen7_insn->bits2.ia1.flag_reg_nr = this->curr.flag;
+ gen7_insn->bits2.ia1.flag_sub_reg_nr = this->curr.subFlag;
+ }
if (this->curr.predicate != GEN_PREDICATE_NONE) {
gen7_insn->header.predicate_control = this->curr.predicate;
gen7_insn->header.predicate_inverse = this->curr.inversePredicate;
diff --git a/backend/src/backend/gen7_encoder.cpp b/backend/src/backend/gen7_encoder.cpp
index 4b2cd9ab..d526f5dd 100644
--- a/backend/src/backend/gen7_encoder.cpp
+++ b/backend/src/backend/gen7_encoder.cpp
@@ -46,8 +46,14 @@ namespace gbe
gen7_insn->header.quarter_control = this->curr.quarterControl;
gen7_insn->bits1.ia1.nib_ctrl = this->curr.nibControl;
gen7_insn->header.mask_control = this->curr.noMask;
- gen7_insn->bits2.ia1.flag_reg_nr = this->curr.flag;
- gen7_insn->bits2.ia1.flag_sub_reg_nr = this->curr.subFlag;
+ if (insn->header.opcode == GEN_OPCODE_MAD || insn->header.opcode == GEN_OPCODE_LRP)
+ {
+ gen7_insn->bits1.da3src.flag_reg_nr = this->curr.flag;
+ gen7_insn->bits1.da3src.flag_sub_reg_nr = this->curr.subFlag;
+ } else {
+ gen7_insn->bits2.ia1.flag_reg_nr = this->curr.flag;
+ gen7_insn->bits2.ia1.flag_sub_reg_nr = this->curr.subFlag;
+ }
if (this->curr.predicate != GEN_PREDICATE_NONE) {
gen7_insn->header.predicate_control = this->curr.predicate;
gen7_insn->header.predicate_inverse = this->curr.inversePredicate;
diff --git a/backend/src/backend/gen7_instruction.hpp b/backend/src/backend/gen7_instruction.hpp
index 7d7eadaa..c985fb81 100644
--- a/backend/src/backend/gen7_instruction.hpp
+++ b/backend/src/backend/gen7_instruction.hpp
@@ -142,8 +142,9 @@ union Gen7NativeInstruction
struct {
uint32_t dest_reg_file:1;
- uint32_t flag_subreg_num:1;
- uint32_t pad0:2;
+ uint32_t flag_sub_reg_nr:1;
+ uint32_t flag_reg_nr:1;
+ uint32_t pad0:1;
uint32_t src0_abs:1;
uint32_t src0_negate:1;
uint32_t src1_abs:1;