[Beignet] [PATCH] support sends for long write
Guo, Yejun
yejun.guo at intel.com
Tue Nov 29 07:55:44 UTC 2016
Signed-off-by: Guo, Yejun <yejun.guo at intel.com>
---
backend/src/backend/gen_insn_selection.cpp | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
index 8090250..9722423 100644
--- a/backend/src/backend/gen_insn_selection.cpp
+++ b/backend/src/backend/gen_insn_selection.cpp
@@ -1594,7 +1594,6 @@ namespace gbe
// dst: srcNum, (flagTemp)
// src: srcNum, addr, srcNum, bti.
insn = this->appendInsn(SEL_OP_WRITE64, dstNum, srcNum*2 + 2);
- vector = this->appendVector();
for (uint32_t elemID = 0; elemID < srcNum; ++elemID)
insn->src(elemID) = src[elemID];
@@ -1615,10 +1614,29 @@ namespace gbe
}
insn->extra.elem = srcNum;
- vector->regNum = srcNum + 1;
- vector->offsetID = srcNum;
- vector->reg = &insn->src(srcNum);
- vector->isSrc = 1;
+ if (hasSends()) {
+ insn->extra.splitSend = 1;
+
+ //addr regs
+ vector = this->appendVector();
+ vector->regNum = 1;
+ vector->offsetID = srcNum;
+ vector->reg = &insn->src(srcNum);
+ vector->isSrc = 1;
+
+ //data regs
+ vector = this->appendVector();
+ vector->regNum = srcNum;
+ vector->offsetID = srcNum+1;
+ vector->reg = &insn->src(srcNum+1);
+ vector->isSrc = 1;
+ } else {
+ vector = this->appendVector();
+ vector->regNum = srcNum + 1;
+ vector->offsetID = srcNum;
+ vector->reg = &insn->src(srcNum);
+ vector->isSrc = 1;
+ }
}
if (bti.file != GEN_IMMEDIATE_VALUE) {
--
1.9.1
More information about the Beignet
mailing list