tab[cc_op][cond]++;
n_calc_cond++;
- if (0 == ((n_calc_all+n_calc_c) & 0xFF)) showCounts();
+ if (0 == ((n_calc_all+n_calc_c) & 0xFFFF)) showCounts();
# endif
switch (cond) {
return unop(Iop_1Uto32,binop(Iop_CmpEQ32, cc_dst, mkU32(0)));
}
+ if (isU32(cc_op, CC_OP_LOGICL) && isU32(cond, CondS)) {
+ /* long and/or/xor, then S --> test dst <s 0 */
+ return unop(Iop_1Uto32,binop(Iop_CmpLT32S, cc_dst, mkU32(0)));
+ }
+
if (isU32(cc_op, CC_OP_LOGICL) && isU32(cond, CondLE)) {
/* long and/or/xor, then LE
This is pretty subtle. LOGIC sets SF and ZF according to the
return unop(Iop_1Uto32,binop(Iop_CmpEQ32, cc_dst, mkU32(0)));
}
+ if (isU32(cc_op, CC_OP_DECL) && isU32(cond, CondS)) {
+ /* dec L, then S --> compare DST <s 0 */
+ return unop(Iop_1Uto32,binop(Iop_CmpLT32S, cc_dst, mkU32(0)));
+ }
+
return NULL;
}