|
|
|
@ -1347,13 +1347,6 @@ static inline void tcg_out_extr(TCGContext *s, TCGType ext, TCGReg rd, |
|
|
|
tcg_out_insn(s, 3403, EXTR, ext, rd, rn, rm, a); |
|
|
|
} |
|
|
|
|
|
|
|
static inline void tcg_out_shr(TCGContext *s, TCGType ext, |
|
|
|
TCGReg rd, TCGReg rn, unsigned int m) |
|
|
|
{ |
|
|
|
int max = ext ? 63 : 31; |
|
|
|
tcg_out_ubfm(s, ext, rd, rn, m & max, max); |
|
|
|
} |
|
|
|
|
|
|
|
static inline void tcg_out_sar(TCGContext *s, TCGType ext, |
|
|
|
TCGReg rd, TCGReg rn, unsigned int m) |
|
|
|
{ |
|
|
|
@ -2310,6 +2303,25 @@ static const TCGOutOpBinary outop_shl = { |
|
|
|
.out_rri = tgen_shli, |
|
|
|
}; |
|
|
|
|
|
|
|
static void tgen_shr(TCGContext *s, TCGType type, |
|
|
|
TCGReg a0, TCGReg a1, TCGReg a2) |
|
|
|
{ |
|
|
|
tcg_out_insn(s, 3508, LSRV, type, a0, a1, a2); |
|
|
|
} |
|
|
|
|
|
|
|
static void tgen_shri(TCGContext *s, TCGType type, |
|
|
|
TCGReg a0, TCGReg a1, tcg_target_long a2) |
|
|
|
{ |
|
|
|
int max = type == TCG_TYPE_I32 ? 31 : 63; |
|
|
|
tcg_out_ubfm(s, type, a0, a1, a2 & max, max); |
|
|
|
} |
|
|
|
|
|
|
|
static const TCGOutOpBinary outop_shr = { |
|
|
|
.base.static_constraint = C_O1_I2(r, r, ri), |
|
|
|
.out_rrr = tgen_shr, |
|
|
|
.out_rri = tgen_shri, |
|
|
|
}; |
|
|
|
|
|
|
|
static void tgen_sub(TCGContext *s, TCGType type, |
|
|
|
TCGReg a0, TCGReg a1, TCGReg a2) |
|
|
|
{ |
|
|
|
@ -2427,15 +2439,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext, |
|
|
|
tcg_out_ldst(s, I3312_STRX, a0, a1, a2, 3); |
|
|
|
break; |
|
|
|
|
|
|
|
case INDEX_op_shr_i64: |
|
|
|
case INDEX_op_shr_i32: |
|
|
|
if (c2) { |
|
|
|
tcg_out_shr(s, ext, a0, a1, a2); |
|
|
|
} else { |
|
|
|
tcg_out_insn(s, 3508, LSRV, ext, a0, a1, a2); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
case INDEX_op_sar_i64: |
|
|
|
case INDEX_op_sar_i32: |
|
|
|
if (c2) { |
|
|
|
@ -3093,11 +3096,9 @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags) |
|
|
|
case INDEX_op_negsetcond_i64: |
|
|
|
return C_O1_I2(r, r, rC); |
|
|
|
|
|
|
|
case INDEX_op_shr_i32: |
|
|
|
case INDEX_op_sar_i32: |
|
|
|
case INDEX_op_rotl_i32: |
|
|
|
case INDEX_op_rotr_i32: |
|
|
|
case INDEX_op_shr_i64: |
|
|
|
case INDEX_op_sar_i64: |
|
|
|
case INDEX_op_rotl_i64: |
|
|
|
case INDEX_op_rotr_i64: |
|
|
|
|