https://bugs.kde.org/show_bug.cgi?id=352364
--- Comment #3 from Julian Seward <jsew...@acm.org> --- In this example, "cmpld ; bne" translates to essentially this // the cmpld t54 = 64to8(CmpORD64U(t48,0xCD:I64)) // the bne if (CmpEQ32(Xor32(And32(8Uto32(t54),0x2:I32),0x2:I32),0x0:I32)) { PUT(1296) = 0x100003C4:I64; exit-Boring } CmpORD64U produces a value that is either 8, 4 or 2, with 8 meaning "<", 4 meaning ">" and 2 meaning "=". The bne translation then inspects t54 bit 1 (intel encoding) (hence the use of 0x2). This completely obscures the fact that what we really want is simply if (CmpNE64(t48,0xCD:I64) { PUT(1296) = 0x100003C4:I64; exit-Boring } The tricky part is to change the generated IR so that it directly exposes the condition on which the branch is based, yet make it possible for later instructions to recover a correct value for CR0 .. CR7 should they wish to. Maybe we should change the ppc front end to use a thunk-based representation as most of the other front ends do, since that does more or less facilitate all of the above. -- You are receiving this mail because: You are watching all bug changes.