From: Junyan He <junyan...@linux.intel.com> sr0 is used to specify the state reigster where we can get the state of each EU thread. We will use n0.2 to wait for the message forwarding, so add a subnr to notification register.
Signed-off-by: Junyan He <junyan...@linux.intel.com> --- backend/src/backend/gen75_context.cpp | 8 +------- backend/src/backend/gen_encoder.cpp | 4 ++-- backend/src/backend/gen_encoder.hpp | 2 +- backend/src/backend/gen_register.hpp | 14 ++++++++++++-- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/backend/src/backend/gen75_context.cpp b/backend/src/backend/gen75_context.cpp index 7d407c3..fa8b029 100644 --- a/backend/src/backend/gen75_context.cpp +++ b/backend/src/backend/gen75_context.cpp @@ -44,13 +44,7 @@ namespace gbe p->push(); p->curr.execWidth = 1; p->curr.predicate = GEN_PREDICATE_NONE; - GenRegister sr0 = GenRegister(GEN_ARCHITECTURE_REGISTER_FILE, - GEN_ARF_STATE, - 1, - GEN_TYPE_UD, - GEN_VERTICAL_STRIDE_8, - GEN_WIDTH_8, - GEN_HORIZONTAL_STRIDE_1); + GenRegister sr0 = GenRegister::sr(0, 1); p->SHR(sr0, slm_index, GenRegister::immud(16)); p->pop(); } diff --git a/backend/src/backend/gen_encoder.cpp b/backend/src/backend/gen_encoder.cpp index b153a2c..347bb19 100644 --- a/backend/src/backend/gen_encoder.cpp +++ b/backend/src/backend/gen_encoder.cpp @@ -994,9 +994,9 @@ namespace gbe this->setSrc1(insn, src1); } - void GenEncoder::WAIT(void) { + void GenEncoder::WAIT(uint32_t subnr) { GenNativeInstruction *insn = this->next(GEN_OPCODE_WAIT); - GenRegister src = GenRegister::notification1(); + GenRegister src = GenRegister::notification(subnr); this->setDst(insn, GenRegister::null()); this->setSrc0(insn, src); this->setSrc1(insn, GenRegister::null()); diff --git a/backend/src/backend/gen_encoder.hpp b/backend/src/backend/gen_encoder.hpp index e9945e8..5ea7202 100644 --- a/backend/src/backend/gen_encoder.hpp +++ b/backend/src/backend/gen_encoder.hpp @@ -162,7 +162,7 @@ namespace gbe /*! No-op */ void NOP(void); /*! Wait instruction (used for the barrier) */ - void WAIT(void); + void WAIT(uint32_t subnr = 0); /*! Atomic instructions */ virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister src, GenRegister bti, uint32_t srcNum); /*! Untyped read (upto 4 channels) */ diff --git a/backend/src/backend/gen_register.hpp b/backend/src/backend/gen_register.hpp index 0a077f2..ecd77f1 100644 --- a/backend/src/backend/gen_register.hpp +++ b/backend/src/backend/gen_register.hpp @@ -828,10 +828,20 @@ namespace gbe GEN_HORIZONTAL_STRIDE_0); } - static INLINE GenRegister notification1(void) { + static INLINE GenRegister sr(uint32_t nr, uint32_t subnr = 0) { + return GenRegister(GEN_ARCHITECTURE_REGISTER_FILE, + GEN_ARF_STATE | nr, + subnr, + GEN_TYPE_UD, + GEN_VERTICAL_STRIDE_8, + GEN_WIDTH_8, + GEN_HORIZONTAL_STRIDE_1); + } + + static INLINE GenRegister notification(uint32_t subnr = 0) { return GenRegister(GEN_ARCHITECTURE_REGISTER_FILE, GEN_ARF_NOTIFICATION_COUNT, - 0, + subnr, GEN_TYPE_UD, GEN_VERTICAL_STRIDE_0, GEN_WIDTH_1, -- 1.7.9.5 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet