The patch has been pushed and verified by QA yesterday. Thanks.
On Fri, Jan 30, 2015 at 02:17:44AM +0000, Yang, Rong R wrote: > Hi Junyan, > > Can't apply this patch, can you rebase it? > > > -----Original Message----- > > From: Beignet [mailto:[email protected]] On Behalf Of > > Zhigang Gong > > Sent: Tuesday, January 27, 2015 16:28 > > To: [email protected] > > Cc: Junyan He; [email protected] > > Subject: Re: [Beignet] [PATCH] Add the logic for pack/unpack long for > > scalar. > > > > Rong, could you review this patch and verify it on your BDW machine. Thanks. > > > > On Tue, Jan 27, 2015 at 10:53:22AM +0800, [email protected] wrote: > > > From: Junyan He <[email protected]> > > > > > > Sometimes, such as printf the kernel's long type parameter, the scalar > > > register will also need to be pack/unpack. > > > > > > Signed-off-by: Junyan He <[email protected]> > > > --- > > > backend/src/backend/gen8_context.cpp | 94 > > > ++++++++++++++++++++++-------------- > > > 1 file changed, 59 insertions(+), 35 deletions(-) > > > > > > diff --git a/backend/src/backend/gen8_context.cpp > > > b/backend/src/backend/gen8_context.cpp > > > index 07f8c47..cde87de 100644 > > > --- a/backend/src/backend/gen8_context.cpp > > > +++ b/backend/src/backend/gen8_context.cpp > > > @@ -618,60 +618,84 @@ namespace gbe > > > > > > void Gen8Context::packLongVec(GenRegister unpacked, GenRegister > > packed, uint32_t simd) > > > { > > > + bool isScalar = false; > > > + if (unpacked.hstride == GEN_HORIZONTAL_STRIDE_0) > > > + isScalar = true; > > > + > > > GBE_ASSERT(packed.subnr == 0); > > > - GBE_ASSERT(unpacked.subnr == 0); > > > + GBE_ASSERT(packed.hstride != GEN_HORIZONTAL_STRIDE_0); > > > + GBE_ASSERT(unpacked.subnr == 0 || isScalar); > > > > > > unpacked = GenRegister::retype(unpacked, GEN_TYPE_UD); > > > packed = GenRegister::retype(packed, GEN_TYPE_UD); > > > > > > - if (simd == 16) { > > > - p->push(); > > > - p->curr.execWidth = 8; > > > - p->MOV(GenRegister::h2(packed), unpacked); > > > - p->MOV(GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD))), > > > - GenRegister::offset(unpacked, 2)); > > > - p->curr.quarterControl = 1; > > > - p->MOV(GenRegister::h2(GenRegister::offset(packed, 2, 0)), > > GenRegister::offset(unpacked, 1)); > > > - p->MOV(GenRegister::h2(GenRegister::offset(packed, 2, > > typeSize(GEN_TYPE_UD))), > > > - GenRegister::offset(unpacked, 3)); > > > - p->pop(); > > > + if (isScalar) { > > > + p->MOV(packed, unpacked); > > > } else { > > > - GBE_ASSERT(simd == 8); > > > - p->MOV(GenRegister::h2(packed), unpacked); > > > - p->MOV(GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD))), > > > - GenRegister::offset(unpacked, 1)); > > > + if (simd == 16) { > > > + p->push(); > > > + p->curr.execWidth = 8; > > > + p->MOV(GenRegister::h2(packed), unpacked); > > > + p->MOV(GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD))), > > > + GenRegister::offset(unpacked, 2)); > > > + p->curr.quarterControl = 1; > > > + p->MOV(GenRegister::h2(GenRegister::offset(packed, 2, 0)), > > GenRegister::offset(unpacked, 1)); > > > + p->MOV(GenRegister::h2(GenRegister::offset(packed, 2, > > typeSize(GEN_TYPE_UD))), > > > + GenRegister::offset(unpacked, 3)); > > > + p->pop(); > > > + } else { > > > + GBE_ASSERT(simd == 8); > > > + p->MOV(GenRegister::h2(packed), unpacked); > > > + p->MOV(GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD))), > > > + GenRegister::offset(unpacked, 1)); > > > + } > > > } > > > } > > > > > > void Gen8Context::unpackLongVec(GenRegister packed, GenRegister > > unpacked, uint32_t simd) > > > { > > > - GBE_ASSERT(packed.subnr == 0); > > > + bool isScalar = false; > > > + if (packed.hstride == GEN_HORIZONTAL_STRIDE_0) > > > + isScalar = true; > > > + > > > + GBE_ASSERT(packed.subnr == 0 || isScalar); > > > + GBE_ASSERT(unpacked.hstride != GEN_HORIZONTAL_STRIDE_0); > > > GBE_ASSERT(unpacked.subnr == 0); > > > > > > unpacked = GenRegister::retype(unpacked, GEN_TYPE_UD); > > > packed = GenRegister::retype(packed, GEN_TYPE_UD); > > > > > > - packed.vstride = GEN_VERTICAL_STRIDE_8; > > > - packed.width = GEN_WIDTH_4; > > > - > > > - p->push(); > > > - p->curr.execWidth = 8; > > > - if (simd == 16) { > > > - p->MOV(unpacked, GenRegister::h2(packed)); > > > - p->MOV(GenRegister::offset(unpacked, 2), > > > - GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD)))); > > > + if (isScalar) { > > > + p->MOV(unpacked, packed); > > > > > > - p->curr.quarterControl = 1; > > > - p->MOV(GenRegister::offset(unpacked, 1), > > GenRegister::h2(GenRegister::offset(packed, 2))); > > > - p->MOV(GenRegister::offset(unpacked, 3), > > > - GenRegister::h2(GenRegister::offset(packed, 2, > > typeSize(GEN_TYPE_UD)))); > > > + if (simd == 16) { > > > + p->MOV(GenRegister::offset(unpacked, 2), > > GenRegister::offset(packed, 0, typeSize(GEN_TYPE_UD))); > > > + } else { > > > + p->MOV(GenRegister::offset(unpacked, 1), > > GenRegister::offset(packed, 0, typeSize(GEN_TYPE_UD))); > > > + } > > > } else { > > > - GBE_ASSERT(simd == 8); > > > - p->MOV(unpacked, GenRegister::h2(packed)); > > > - p->MOV(GenRegister::offset(unpacked, 1), > > > - GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD)))); > > > + packed.vstride = GEN_VERTICAL_STRIDE_8; > > > + packed.width = GEN_WIDTH_4; > > > + > > > + p->push(); > > > + p->curr.execWidth = 8; > > > + if (simd == 16) { > > > + p->MOV(unpacked, GenRegister::h2(packed)); > > > + p->MOV(GenRegister::offset(unpacked, 2), > > > + GenRegister::h2(GenRegister::offset(packed, 0, > > > + typeSize(GEN_TYPE_UD)))); > > > + > > > + p->curr.quarterControl = 1; > > > + p->MOV(GenRegister::offset(unpacked, 1), > > GenRegister::h2(GenRegister::offset(packed, 2))); > > > + p->MOV(GenRegister::offset(unpacked, 3), > > > + GenRegister::h2(GenRegister::offset(packed, 2, > > typeSize(GEN_TYPE_UD)))); > > > + } else { > > > + GBE_ASSERT(simd == 8); > > > + p->MOV(unpacked, GenRegister::h2(packed)); > > > + p->MOV(GenRegister::offset(unpacked, 1), > > > + GenRegister::h2(GenRegister::offset(packed, 0, > > typeSize(GEN_TYPE_UD)))); > > > + } > > > + p->pop(); > > > } > > > - p->pop(); > > > } > > > > > > void Gen8Context::emitRead64Instruction(const SelectionInstruction > > > &insn) > > > -- > > > 1.9.1 > > > > > > _______________________________________________ > > > Beignet mailing list > > > [email protected] > > > http://lists.freedesktop.org/mailman/listinfo/beignet > > _______________________________________________ > > Beignet mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/beignet > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
