mirror of
https://github.com/Motorhead1991/qemu.git
synced 2026-03-09 04:24:44 -06:00
tcg/arm: Fix constraints for sub
In 7536b82d28 we lost the rI constraint that allowed the use of
RSB to perform reg = imm - reg. At the same time, drop support
for reg = reg - imm, which is now transformed generically to
addition, and need not be handled by the backend.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
3a8c4e9e53
commit
a3b37bc6fa
2 changed files with 5 additions and 7 deletions
|
|
@ -30,6 +30,7 @@ C_O1_I2(r, r, rI)
|
|||
C_O1_I2(r, r, rIK)
|
||||
C_O1_I2(r, r, rIN)
|
||||
C_O1_I2(r, r, ri)
|
||||
C_O1_I2(r, rI, r)
|
||||
C_O1_I2(r, rZ, rZ)
|
||||
C_O1_I2(w, 0, w)
|
||||
C_O1_I2(w, w, w)
|
||||
|
|
|
|||
|
|
@ -1984,12 +1984,8 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
|
|||
break;
|
||||
case INDEX_op_sub_i32:
|
||||
if (const_args[1]) {
|
||||
if (const_args[2]) {
|
||||
tcg_out_movi32(s, COND_AL, args[0], args[1] - args[2]);
|
||||
} else {
|
||||
tcg_out_dat_rI(s, COND_AL, ARITH_RSB,
|
||||
args[0], args[2], args[1], 1);
|
||||
}
|
||||
tcg_out_dat_imm(s, COND_AL, ARITH_RSB,
|
||||
args[0], args[2], encode_imm_nofail(args[1]));
|
||||
} else {
|
||||
tcg_out_dat_rIN(s, COND_AL, ARITH_SUB, ARITH_ADD,
|
||||
args[0], args[1], args[2], const_args[2]);
|
||||
|
|
@ -2234,10 +2230,11 @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
|
|||
case INDEX_op_st_i32:
|
||||
return C_O0_I2(r, r);
|
||||
|
||||
case INDEX_op_sub_i32:
|
||||
case INDEX_op_setcond_i32:
|
||||
case INDEX_op_negsetcond_i32:
|
||||
return C_O1_I2(r, r, rIN);
|
||||
case INDEX_op_sub_i32:
|
||||
return C_O1_I2(r, rI, r);
|
||||
|
||||
case INDEX_op_clz_i32:
|
||||
case INDEX_op_ctz_i32:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue