Good catch, will push latter, thanks. I also found some JMPI in other long instructions in gen_context.cpp which are using ALL16/ALL8. Could you also check those use cases? I believe they also need to be fixed. Thanks.
On Fri, Feb 21, 2014 at 04:54:39PM +0800, Yang Rong wrote: > There is a jumpi in long DIV/REM, with predication is any16/any8. So > MUST AND the predication register with emask, otherwise may dead loop. > > Signed-off-by: Yang Rong <[email protected]> > --- > backend/src/backend/gen_context.cpp | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/backend/src/backend/gen_context.cpp > b/backend/src/backend/gen_context.cpp > index 7a74856..44dbee2 100644 > --- a/backend/src/backend/gen_context.cpp > +++ b/backend/src/backend/gen_context.cpp > @@ -1364,6 +1364,7 @@ namespace gbe > GenRegister l = ra->genReg(insn.dst(12)); > GenRegister m = ra->genReg(insn.dst(13)); > GenRegister flagReg = checkFlagRegister(ra->genReg(insn.dst(14))); > + GenRegister emaskReg = ra->genReg(GenRegister::uw1grf(ir::ocl::emask)); > GenRegister zero = GenRegister::immud(0), > one = GenRegister::immud(1), > imm31 = GenRegister::immud(31); > @@ -1445,6 +1446,11 @@ namespace gbe > p->curr.predicate = GEN_PREDICATE_NONE; > p->curr.useFlag(flagReg.flag_nr(), flagReg.flag_subnr()); > p->CMP(GEN_CONDITIONAL_L, m, GenRegister::immud(64)); > + > + p->curr.execWidth = 1; > + p->curr.noMask = 1; > + p->AND(flagReg, flagReg, emaskReg); > + > p->curr.predicate = GEN_PREDICATE_NORMAL; > // under condition, jump back to start point > if (simdWidth == 8) > @@ -1453,8 +1459,6 @@ namespace gbe > p->curr.predicate = GEN_PREDICATE_ALIGN1_ANY16H; > else > NOT_IMPLEMENTED; > - p->curr.execWidth = 1; > - p->curr.noMask = 1; > int jip = -(int)(p->n_instruction() - loop_start + 1) * 2; > p->JMPI(zero); > p->patchJMPI(p->n_instruction()-2, jip); > -- > 1.8.3.2 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
