[Beignet] [PATCH 01/13] Backend: Add sr0 reg helper function and add subnr to notification reg.
He Junyan
junyan.he at inbox.com
Mon Nov 23 00:52:28 PST 2015
This patch implement reduce max/min/add for uint and float.
It needs to base on the previous workgroup broadcast patchset(5 patches).
On Mon, Nov 23, 2015 at 04:48:38PM +0800, junyan.he at inbox.com wrote:
> Date: Mon, 23 Nov 2015 16:48:38 +0800
> From: junyan.he at inbox.com
> To: beignet at lists.freedesktop.org
> Subject: [Beignet] [PATCH 01/13] Backend: Add sr0 reg helper function and
> add subnr to notification reg.
> X-Mailer: git-send-email 1.7.9.5
>
> From: Junyan He <junyan.he at 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.he at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list