tcg/s390x: Split constraint A into J+U

Signed 33-bit == signed 32-bit + unsigned 32-bit.

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-10-28 04:57:06 +00:00
parent ad788aebba
commit cbaddf3094
3 changed files with 23 additions and 23 deletions

View File

@ -15,7 +15,7 @@
C_O0_I1(r) C_O0_I1(r)
C_O0_I2(r, r) C_O0_I2(r, r)
C_O0_I2(r, ri) C_O0_I2(r, ri)
C_O0_I2(r, rA) C_O0_I2(r, rJU)
C_O0_I2(v, r) C_O0_I2(v, r)
C_O0_I3(o, m, r) C_O0_I3(o, m, r)
C_O1_I1(r, r) C_O1_I1(r, r)
@ -27,7 +27,7 @@ C_O1_I2(r, 0, rI)
C_O1_I2(r, 0, rJ) C_O1_I2(r, 0, rJ)
C_O1_I2(r, r, r) C_O1_I2(r, r, r)
C_O1_I2(r, r, ri) C_O1_I2(r, r, ri)
C_O1_I2(r, r, rA) C_O1_I2(r, r, rJU)
C_O1_I2(r, r, rI) C_O1_I2(r, r, rI)
C_O1_I2(r, r, rJ) C_O1_I2(r, r, rJ)
C_O1_I2(r, r, rK) C_O1_I2(r, r, rK)
@ -39,10 +39,10 @@ C_O1_I2(v, v, r)
C_O1_I2(v, v, v) C_O1_I2(v, v, v)
C_O1_I3(v, v, v, v) C_O1_I3(v, v, v, v)
C_O1_I4(r, r, ri, rI, r) C_O1_I4(r, r, ri, rI, r)
C_O1_I4(r, r, rA, rI, r) C_O1_I4(r, r, rJU, rI, r)
C_O2_I1(o, m, r) C_O2_I1(o, m, r)
C_O2_I2(o, m, 0, r) C_O2_I2(o, m, 0, r)
C_O2_I2(o, m, r, r) C_O2_I2(o, m, r, r)
C_O2_I3(o, m, 0, 1, r) C_O2_I3(o, m, 0, 1, r)
C_N1_O1_I4(r, r, 0, 1, ri, r) C_N1_O1_I4(r, r, 0, 1, ri, r)
C_N1_O1_I4(r, r, 0, 1, rA, r) C_N1_O1_I4(r, r, 0, 1, rJU, r)

View File

@ -16,10 +16,10 @@ REGS('o', 0xaaaa) /* odd numbered general regs */
* Define constraint letters for constants: * Define constraint letters for constants:
* CONST(letter, TCG_CT_CONST_* bit set) * CONST(letter, TCG_CT_CONST_* bit set)
*/ */
CONST('A', TCG_CT_CONST_S33)
CONST('I', TCG_CT_CONST_S16) CONST('I', TCG_CT_CONST_S16)
CONST('J', TCG_CT_CONST_S32) CONST('J', TCG_CT_CONST_S32)
CONST('K', TCG_CT_CONST_P32) CONST('K', TCG_CT_CONST_P32)
CONST('N', TCG_CT_CONST_INV) CONST('N', TCG_CT_CONST_INV)
CONST('R', TCG_CT_CONST_INVRISBG) CONST('R', TCG_CT_CONST_INVRISBG)
CONST('U', TCG_CT_CONST_U32)
CONST('Z', TCG_CT_CONST_ZERO) CONST('Z', TCG_CT_CONST_ZERO)

View File

@ -30,7 +30,7 @@
#define TCG_CT_CONST_S16 (1 << 8) #define TCG_CT_CONST_S16 (1 << 8)
#define TCG_CT_CONST_S32 (1 << 9) #define TCG_CT_CONST_S32 (1 << 9)
#define TCG_CT_CONST_S33 (1 << 10) #define TCG_CT_CONST_U32 (1 << 10)
#define TCG_CT_CONST_ZERO (1 << 11) #define TCG_CT_CONST_ZERO (1 << 11)
#define TCG_CT_CONST_P32 (1 << 12) #define TCG_CT_CONST_P32 (1 << 12)
#define TCG_CT_CONST_INV (1 << 13) #define TCG_CT_CONST_INV (1 << 13)
@ -542,22 +542,23 @@ static bool tcg_target_const_match(int64_t val, int ct,
TCGType type, TCGCond cond, int vece) TCGType type, TCGCond cond, int vece)
{ {
if (ct & TCG_CT_CONST) { if (ct & TCG_CT_CONST) {
return 1; return true;
} }
if (type == TCG_TYPE_I32) { if (type == TCG_TYPE_I32) {
val = (int32_t)val; val = (int32_t)val;
} }
/* The following are mutually exclusive. */ if ((ct & TCG_CT_CONST_S32) && val == (int32_t)val) {
if (ct & TCG_CT_CONST_S16) { return true;
return val == (int16_t)val; }
} else if (ct & TCG_CT_CONST_S32) { if ((ct & TCG_CT_CONST_U32) && val == (uint32_t)val) {
return val == (int32_t)val; return true;
} else if (ct & TCG_CT_CONST_S33) { }
return val >= -0xffffffffll && val <= 0xffffffffll; if ((ct & TCG_CT_CONST_S16) && val == (int16_t)val) {
} else if (ct & TCG_CT_CONST_ZERO) { return true;
return val == 0; }
if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
return true;
} }
if (ct & TCG_CT_CONST_INV) { if (ct & TCG_CT_CONST_INV) {
@ -573,8 +574,7 @@ static bool tcg_target_const_match(int64_t val, int ct,
if ((ct & TCG_CT_CONST_INVRISBG) && risbg_mask(~val)) { if ((ct & TCG_CT_CONST_INVRISBG) && risbg_mask(~val)) {
return true; return true;
} }
return false;
return 0;
} }
/* Emit instructions according to the given instruction format. */ /* Emit instructions according to the given instruction format. */
@ -3137,7 +3137,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
return C_O1_I2(r, r, ri); return C_O1_I2(r, r, ri);
case INDEX_op_setcond_i64: case INDEX_op_setcond_i64:
case INDEX_op_negsetcond_i64: case INDEX_op_negsetcond_i64:
return C_O1_I2(r, r, rA); return C_O1_I2(r, r, rJU);
case INDEX_op_clz_i64: case INDEX_op_clz_i64:
return C_O1_I2(r, r, rI); return C_O1_I2(r, r, rI);
@ -3187,7 +3187,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
case INDEX_op_brcond_i32: case INDEX_op_brcond_i32:
return C_O0_I2(r, ri); return C_O0_I2(r, ri);
case INDEX_op_brcond_i64: case INDEX_op_brcond_i64:
return C_O0_I2(r, rA); return C_O0_I2(r, rJU);
case INDEX_op_bswap16_i32: case INDEX_op_bswap16_i32:
case INDEX_op_bswap16_i64: case INDEX_op_bswap16_i64:
@ -3240,7 +3240,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
case INDEX_op_movcond_i32: case INDEX_op_movcond_i32:
return C_O1_I4(r, r, ri, rI, r); return C_O1_I4(r, r, ri, rI, r);
case INDEX_op_movcond_i64: case INDEX_op_movcond_i64:
return C_O1_I4(r, r, rA, rI, r); return C_O1_I4(r, r, rJU, rI, r);
case INDEX_op_div2_i32: case INDEX_op_div2_i32:
case INDEX_op_div2_i64: case INDEX_op_div2_i64:
@ -3259,7 +3259,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
case INDEX_op_add2_i64: case INDEX_op_add2_i64:
case INDEX_op_sub2_i64: case INDEX_op_sub2_i64:
return C_N1_O1_I4(r, r, 0, 1, rA, r); return C_N1_O1_I4(r, r, 0, 1, rJU, r);
case INDEX_op_st_vec: case INDEX_op_st_vec:
return C_O0_I2(v, r); return C_O0_I2(v, r);