|
@@ -1313,10 +1313,10 @@ static bool trans_SHLL_rr(DisasContext *ctx, arg_SHLL_rr *a)
|
|
done = gen_new_label();
|
|
done = gen_new_label();
|
|
/* if (cpu_regs[a->rs]) { */
|
|
/* if (cpu_regs[a->rs]) { */
|
|
tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_regs[a->rs], 0, noshift);
|
|
tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_regs[a->rs], 0, noshift);
|
|
- count = tcg_const_i32(32);
|
|
|
|
|
|
+ count = tcg_temp_new();
|
|
tmp = tcg_temp_new();
|
|
tmp = tcg_temp_new();
|
|
tcg_gen_andi_i32(tmp, cpu_regs[a->rs], 31);
|
|
tcg_gen_andi_i32(tmp, cpu_regs[a->rs], 31);
|
|
- tcg_gen_sub_i32(count, count, tmp);
|
|
|
|
|
|
+ tcg_gen_sub_i32(count, tcg_constant_i32(32), tmp);
|
|
tcg_gen_sar_i32(cpu_psw_c, cpu_regs[a->rd], count);
|
|
tcg_gen_sar_i32(cpu_psw_c, cpu_regs[a->rd], count);
|
|
tcg_gen_shl_i32(cpu_regs[a->rd], cpu_regs[a->rd], tmp);
|
|
tcg_gen_shl_i32(cpu_regs[a->rd], cpu_regs[a->rd], tmp);
|
|
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_psw_o, cpu_psw_c, 0);
|
|
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_psw_o, cpu_psw_c, 0);
|
|
@@ -1979,10 +1979,10 @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
|
|
cat3(arg_, name, _rr) * a) \
|
|
cat3(arg_, name, _rr) * a) \
|
|
{ \
|
|
{ \
|
|
TCGv mask, b; \
|
|
TCGv mask, b; \
|
|
- mask = tcg_const_i32(1); \
|
|
|
|
|
|
+ mask = tcg_temp_new(); \
|
|
b = tcg_temp_new(); \
|
|
b = tcg_temp_new(); \
|
|
tcg_gen_andi_i32(b, cpu_regs[a->rs], 31); \
|
|
tcg_gen_andi_i32(b, cpu_regs[a->rs], 31); \
|
|
- tcg_gen_shl_i32(mask, mask, b); \
|
|
|
|
|
|
+ tcg_gen_shl_i32(mask, tcg_constant_i32(1), b); \
|
|
cat3(rx_, op, r)(cpu_regs[a->rd], mask); \
|
|
cat3(rx_, op, r)(cpu_regs[a->rd], mask); \
|
|
return true; \
|
|
return true; \
|
|
} \
|
|
} \
|
|
@@ -1990,10 +1990,10 @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
|
|
cat3(arg_, name, _rm) * a) \
|
|
cat3(arg_, name, _rm) * a) \
|
|
{ \
|
|
{ \
|
|
TCGv mask, mem, addr, b; \
|
|
TCGv mask, mem, addr, b; \
|
|
- mask = tcg_const_i32(1); \
|
|
|
|
|
|
+ mask = tcg_temp_new(); \
|
|
b = tcg_temp_new(); \
|
|
b = tcg_temp_new(); \
|
|
tcg_gen_andi_i32(b, cpu_regs[a->rd], 7); \
|
|
tcg_gen_andi_i32(b, cpu_regs[a->rd], 7); \
|
|
- tcg_gen_shl_i32(mask, mask, b); \
|
|
|
|
|
|
+ tcg_gen_shl_i32(mask, tcg_constant_i32(1), b); \
|
|
mem = tcg_temp_new(); \
|
|
mem = tcg_temp_new(); \
|
|
addr = rx_index_addr(ctx, mem, a->ld, MO_8, a->rs); \
|
|
addr = rx_index_addr(ctx, mem, a->ld, MO_8, a->rs); \
|
|
cat3(rx_, op, m)(addr, mask); \
|
|
cat3(rx_, op, m)(addr, mask); \
|