mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
target/s390x: Use a single return for helper_divs64/u64
Pack the quotient and remainder into a single Int128. Use the divu128 primitive to remove the cpu_abort on 32-bit hosts. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- v2: Extended div test case to cover these insns.
This commit is contained in:
parent
6d28ff406c
commit
4e5712f903
4 changed files with 56 additions and 35 deletions
|
@ -2409,15 +2409,21 @@ static DisasJumpType op_divu32(DisasContext *s, DisasOps *o)
|
|||
|
||||
static DisasJumpType op_divs64(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
gen_helper_divs64(o->out2, cpu_env, o->in1, o->in2);
|
||||
return_low128(o->out);
|
||||
TCGv_i128 t = tcg_temp_new_i128();
|
||||
|
||||
gen_helper_divs64(t, cpu_env, o->in1, o->in2);
|
||||
tcg_gen_extr_i128_i64(o->out2, o->out, t);
|
||||
tcg_temp_free_i128(t);
|
||||
return DISAS_NEXT;
|
||||
}
|
||||
|
||||
static DisasJumpType op_divu64(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
gen_helper_divu64(o->out2, cpu_env, o->out, o->out2, o->in2);
|
||||
return_low128(o->out);
|
||||
TCGv_i128 t = tcg_temp_new_i128();
|
||||
|
||||
gen_helper_divu64(t, cpu_env, o->out, o->out2, o->in2);
|
||||
tcg_gen_extr_i128_i64(o->out2, o->out, t);
|
||||
tcg_temp_free_i128(t);
|
||||
return DISAS_NEXT;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue