summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhigang Gong <zhigang.gong@intel.com>2015-04-13 10:36:37 +0800
committerZhigang Gong <zhigang.gong@intel.com>2015-04-13 16:12:09 +0800
commitad68ac93fb01be7e1bbfee77c675b8868e05a6e2 (patch)
tree04e192db774c22206f7ca4d6d3233da9a2d334ef
parent8853578ec6c479134131d03e2c7ec2761c6a71d2 (diff)
GBE: fix a bug in byte scatter write.
In uniform mode, we should set simd width to 1 and set noMask bit. Signed-off-by: Zhigang Gong <zhigang.gong@intel.com> Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
-rw-r--r--backend/src/backend/gen_insn_selection.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
index 68ca7610..3ac932bb 100644
--- a/backend/src/backend/gen_insn_selection.cpp
+++ b/backend/src/backend/gen_insn_selection.cpp
@@ -3525,11 +3525,17 @@ namespace gbe
const GenRegister value = sel.selReg(insn.getValue(0));
GBE_ASSERT(insn.getValueNum() == 1);
const GenRegister tmp = sel.selReg(sel.reg(FAMILY_DWORD, isUniform), ir::TYPE_U32);
- if (elemSize == GEN_BYTE_SCATTER_WORD) {
- sel.MOV(tmp, GenRegister::retype(value, GEN_TYPE_UW));
- } else if (elemSize == GEN_BYTE_SCATTER_BYTE) {
- sel.MOV(tmp, GenRegister::retype(value, GEN_TYPE_UB));
- }
+ sel.push();
+ if (isUniform) {
+ sel.curr.noMask = 1;
+ sel.curr.execWidth = 1;
+ }
+
+ if (elemSize == GEN_BYTE_SCATTER_WORD)
+ sel.MOV(tmp, GenRegister::retype(value, GEN_TYPE_UW));
+ else if (elemSize == GEN_BYTE_SCATTER_BYTE)
+ sel.MOV(tmp, GenRegister::retype(value, GEN_TYPE_UB));
+ sel.pop();
sel.BYTE_SCATTER(addr, tmp, elemSize, bti);
}
}