[Beignet] [PATCH] Backend: Fix printf bug for simd8
Xiuli Pan
xiuli.pan at intel.com
Fri Aug 19 09:45:24 UTC 2016
From: Pan Xiuli <xiuli.pan at intel.com>
The tmp0 and tmp1 for simd8 should be half size of the simd16 mode.
Otherwise the send message will use wrong reg and wrong message length.
Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
---
backend/src/backend/gen_context.cpp | 3 ++-
backend/src/backend/gen_insn_selection.cpp | 9 ++-------
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp
index b429ec3..f1c58eb 100644
--- a/backend/src/backend/gen_context.cpp
+++ b/backend/src/backend/gen_context.cpp
@@ -3411,13 +3411,14 @@ namespace gbe
void GenContext::emitPrintfInstruction(const SelectionInstruction &insn) {
const GenRegister dst = ra->genReg(insn.dst(0));
const GenRegister tmp0 = ra->genReg(insn.dst(1));
+ const GenRegister tmp1 = ra->genReg(insn.dst(2));
GenRegister src;
uint32_t srcNum = insn.srcNum;
if (insn.extra.continueFlag)
srcNum--;
GenRegister addr = GenRegister::retype(tmp0, GEN_TYPE_UD);
- GenRegister data = GenRegister::offset(addr, 2);
+ GenRegister data = GenRegister::retype(tmp1, GEN_TYPE_UD);
if (!insn.extra.continueFlag) {
p->push(); {
diff --git a/backend/src/backend/gen_insn_selection.cpp b/backend/src/backend/gen_insn_selection.cpp
index 6cfa87f..c4e2934 100644
--- a/backend/src/backend/gen_insn_selection.cpp
+++ b/backend/src/backend/gen_insn_selection.cpp
@@ -6166,13 +6166,8 @@ extern bool OCL_DEBUGINFO; // first defined by calling BVAR in program.cpp
uint32_t totalSize = 0;
bool isContinue = false;
GBE_ASSERT(sel.ctx.getSimdWidth() == 16 || sel.ctx.getSimdWidth() == 8);
- if (sel.ctx.getSimdWidth() == 16) {
- tmp0 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_DWORD)), GEN_TYPE_UD);
- tmp1 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_DWORD)), GEN_TYPE_UD);
- } else {
- tmp0 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_QWORD)), GEN_TYPE_UD);
- tmp1 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_QWORD)), GEN_TYPE_UD);
- }
+ tmp0 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_DWORD)), GEN_TYPE_UD);
+ tmp1 = GenRegister::retype(sel.selReg(sel.reg(FAMILY_DWORD)), GEN_TYPE_UD);
/* Get the total size for one printf statement. */
for (i = 0; i < srcNum; i++) {
--
2.7.4
More information about the Beignet
mailing list