Loading tcg/tcg-op.c +22 −21 Original line number Diff line number Diff line Loading @@ -1355,31 +1355,32 @@ static inline void tcg_gen_shifti_i64(TCGv_i64 ret, TCGv_i64 arg1, tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), c); tcg_gen_movi_i32(TCGV_LOW(ret), 0); } } else if (right) { if (TCG_TARGET_HAS_extract2_i32) { tcg_gen_extract2_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_HIGH(arg1), c); } else { TCGv_i32 t0, t1; t0 = tcg_temp_new_i32(); t1 = tcg_temp_new_i32(); if (right) { tcg_gen_shli_i32(t0, TCGV_HIGH(arg1), 32 - c); tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); tcg_gen_deposit_i32(TCGV_LOW(ret), TCGV_LOW(ret), TCGV_HIGH(arg1), 32 - c, c); } if (arith) { tcg_gen_sari_i32(t1, TCGV_HIGH(arg1), c); tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); } else { tcg_gen_shri_i32(t1, TCGV_HIGH(arg1), c); tcg_gen_shri_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); } tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(ret), t0); tcg_gen_mov_i32(TCGV_HIGH(ret), t1); } else { if (TCG_TARGET_HAS_extract2_i32) { tcg_gen_extract2_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), TCGV_HIGH(arg1), 32 - c); } else { TCGv_i32 t0 = tcg_temp_new_i32(); tcg_gen_shri_i32(t0, TCGV_LOW(arg1), 32 - c); /* Note: ret can be the same as arg1, so we use t1 */ tcg_gen_shli_i32(t1, TCGV_LOW(arg1), c); tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), t0); tcg_gen_mov_i32(TCGV_LOW(ret), t1); } tcg_gen_deposit_i32(TCGV_HIGH(ret), t0, TCGV_HIGH(arg1), c, 32 - c); tcg_temp_free_i32(t0); tcg_temp_free_i32(t1); } tcg_gen_shli_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); } } Loading Loading
tcg/tcg-op.c +22 −21 Original line number Diff line number Diff line Loading @@ -1355,31 +1355,32 @@ static inline void tcg_gen_shifti_i64(TCGv_i64 ret, TCGv_i64 arg1, tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), c); tcg_gen_movi_i32(TCGV_LOW(ret), 0); } } else if (right) { if (TCG_TARGET_HAS_extract2_i32) { tcg_gen_extract2_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_HIGH(arg1), c); } else { TCGv_i32 t0, t1; t0 = tcg_temp_new_i32(); t1 = tcg_temp_new_i32(); if (right) { tcg_gen_shli_i32(t0, TCGV_HIGH(arg1), 32 - c); tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); tcg_gen_deposit_i32(TCGV_LOW(ret), TCGV_LOW(ret), TCGV_HIGH(arg1), 32 - c, c); } if (arith) { tcg_gen_sari_i32(t1, TCGV_HIGH(arg1), c); tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); } else { tcg_gen_shri_i32(t1, TCGV_HIGH(arg1), c); tcg_gen_shri_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); } tcg_gen_shri_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(ret), t0); tcg_gen_mov_i32(TCGV_HIGH(ret), t1); } else { if (TCG_TARGET_HAS_extract2_i32) { tcg_gen_extract2_i32(TCGV_HIGH(ret), TCGV_LOW(arg1), TCGV_HIGH(arg1), 32 - c); } else { TCGv_i32 t0 = tcg_temp_new_i32(); tcg_gen_shri_i32(t0, TCGV_LOW(arg1), 32 - c); /* Note: ret can be the same as arg1, so we use t1 */ tcg_gen_shli_i32(t1, TCGV_LOW(arg1), c); tcg_gen_shli_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), c); tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), t0); tcg_gen_mov_i32(TCGV_LOW(ret), t1); } tcg_gen_deposit_i32(TCGV_HIGH(ret), t0, TCGV_HIGH(arg1), c, 32 - c); tcg_temp_free_i32(t0); tcg_temp_free_i32(t1); } tcg_gen_shli_i32(TCGV_LOW(ret), TCGV_LOW(arg1), c); } } Loading