From b3042047af9bf3a78783fcca39a0b005c7d9090a Mon Sep 17 00:00:00 2001 From: Zhigang Gong Date: Sun, 4 May 2014 08:59:41 +0800 Subject: [PATCH] GBE: fixed a regression at "Long" div/rem. If the GEN_PREDICATE_ALIGN1_ANY8H/ANY16H or ALL8H/ALL16H are used, we must make sure those inactive lanes are initialized correctly. For "ANY" condition, all the inactive lanes need to be clear to zero. For "ALL" condition, all the inactive lanes need to be set to 1s. Otherwise, it may cause infinite loop. Signed-off-by: Zhigang Gong Reviewed-by: "Song, Ruiling" --- backend/src/backend/gen_context.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp index 62b58bd..369c1bf 100644 --- a/backend/src/backend/gen_context.cpp +++ b/backend/src/backend/gen_context.cpp @@ -1525,9 +1525,16 @@ namespace gbe p->SHR(g, g, one); // condition: m < 64 p->ADD(m, m, one); + p->push(); - p->curr.predicate = GEN_PREDICATE_NONE; p->curr.noMask = 1; + p->curr.execWidth = 1; + p->MOV(flagReg, zero); + p->pop(); + + p->push(); + p->curr.predicate = GEN_PREDICATE_NONE; + p->curr.noMask = 0; p->curr.useFlag(flagReg.flag_nr(), flagReg.flag_subnr()); p->CMP(GEN_CONDITIONAL_L, m, GenRegister::immud(64)); -- 2.7.4