target/s390x: Use TCG_COND_TSTNE for CC_OP_{TM,ICM}

These are all test-and-compare type instructions.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2023-11-06 14:07:14 -08:00
parent 50280618d9
commit 7da3601e62
1 changed files with 7 additions and 11 deletions

View File

@ -754,10 +754,10 @@ static void disas_jcc(DisasContext *s, DisasCompare *c, uint32_t mask)
case CC_OP_TM_64: case CC_OP_TM_64:
switch (mask) { switch (mask) {
case 8: case 8:
cond = TCG_COND_EQ; cond = TCG_COND_TSTEQ;
break; break;
case 4 | 2 | 1: case 4 | 2 | 1:
cond = TCG_COND_NE; cond = TCG_COND_TSTNE;
break; break;
default: default:
goto do_dynamic; goto do_dynamic;
@ -768,11 +768,11 @@ static void disas_jcc(DisasContext *s, DisasCompare *c, uint32_t mask)
case CC_OP_ICM: case CC_OP_ICM:
switch (mask) { switch (mask) {
case 8: case 8:
cond = TCG_COND_EQ; cond = TCG_COND_TSTEQ;
break; break;
case 4 | 2 | 1: case 4 | 2 | 1:
case 4 | 2: case 4 | 2:
cond = TCG_COND_NE; cond = TCG_COND_TSTNE;
break; break;
default: default:
goto do_dynamic; goto do_dynamic;
@ -854,18 +854,14 @@ static void disas_jcc(DisasContext *s, DisasCompare *c, uint32_t mask)
c->u.s64.a = cc_dst; c->u.s64.a = cc_dst;
c->u.s64.b = tcg_constant_i64(0); c->u.s64.b = tcg_constant_i64(0);
break; break;
case CC_OP_LTGT_64: case CC_OP_LTGT_64:
case CC_OP_LTUGTU_64: case CC_OP_LTUGTU_64:
c->u.s64.a = cc_src;
c->u.s64.b = cc_dst;
break;
case CC_OP_TM_32: case CC_OP_TM_32:
case CC_OP_TM_64: case CC_OP_TM_64:
case CC_OP_ICM: case CC_OP_ICM:
c->u.s64.a = tcg_temp_new_i64(); c->u.s64.a = cc_src;
c->u.s64.b = tcg_constant_i64(0); c->u.s64.b = cc_dst;
tcg_gen_and_i64(c->u.s64.a, cc_src, cc_dst);
break; break;
case CC_OP_ADDU: case CC_OP_ADDU: