mirror of
https://github.com/qemu/qemu.git
synced 2025-08-08 08:05:17 +00:00
target/microblaze: Convert dec_div to decodetree
Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
97955ceb42
commit
b1354342c1
@ -50,6 +50,9 @@ andni 101011 ..... ..... ................ @typeb
|
|||||||
cmp 000101 ..... ..... ..... 000 0000 0001 @typea
|
cmp 000101 ..... ..... ..... 000 0000 0001 @typea
|
||||||
cmpu 000101 ..... ..... ..... 000 0000 0011 @typea
|
cmpu 000101 ..... ..... ..... 000 0000 0011 @typea
|
||||||
|
|
||||||
|
idiv 010010 ..... ..... ..... 000 0000 0000 @typea
|
||||||
|
idivu 010010 ..... ..... ..... 000 0000 0010 @typea
|
||||||
|
|
||||||
mul 010000 ..... ..... ..... 000 0000 0000 @typea
|
mul 010000 ..... ..... ..... 000 0000 0000 @typea
|
||||||
mulh 010000 ..... ..... ..... 000 0000 0001 @typea
|
mulh 010000 ..... ..... ..... 000 0000 0001 @typea
|
||||||
mulhu 010000 ..... ..... ..... 000 0000 0011 @typea
|
mulhu 010000 ..... ..... ..... 000 0000 0011 @typea
|
||||||
|
@ -368,6 +368,19 @@ static void gen_cmpu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
|
|||||||
DO_TYPEA(cmp, false, gen_cmp)
|
DO_TYPEA(cmp, false, gen_cmp)
|
||||||
DO_TYPEA(cmpu, false, gen_cmpu)
|
DO_TYPEA(cmpu, false, gen_cmpu)
|
||||||
|
|
||||||
|
static void gen_idiv(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
|
||||||
|
{
|
||||||
|
gen_helper_divs(out, cpu_env, inb, ina);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gen_idivu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
|
||||||
|
{
|
||||||
|
gen_helper_divu(out, cpu_env, inb, ina);
|
||||||
|
}
|
||||||
|
|
||||||
|
DO_TYPEA_CFG(idiv, use_div, true, gen_idiv)
|
||||||
|
DO_TYPEA_CFG(idivu, use_div, true, gen_idivu)
|
||||||
|
|
||||||
static void gen_mulh(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
|
static void gen_mulh(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
|
||||||
{
|
{
|
||||||
TCGv_i32 tmp = tcg_temp_new_i32();
|
TCGv_i32 tmp = tcg_temp_new_i32();
|
||||||
@ -683,27 +696,6 @@ static void dec_msr(DisasContext *dc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Div unit. */
|
|
||||||
static void dec_div(DisasContext *dc)
|
|
||||||
{
|
|
||||||
unsigned int u;
|
|
||||||
|
|
||||||
u = dc->imm & 2;
|
|
||||||
|
|
||||||
if (trap_illegal(dc, !dc->cpu->cfg.use_div)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (u)
|
|
||||||
gen_helper_divu(cpu_R[dc->rd], cpu_env, *(dec_alu_op_b(dc)),
|
|
||||||
cpu_R[dc->ra]);
|
|
||||||
else
|
|
||||||
gen_helper_divs(cpu_R[dc->rd], cpu_env, *(dec_alu_op_b(dc)),
|
|
||||||
cpu_R[dc->ra]);
|
|
||||||
if (!dc->rd)
|
|
||||||
tcg_gen_movi_i32(cpu_R[dc->rd], 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dec_barrel(DisasContext *dc)
|
static void dec_barrel(DisasContext *dc)
|
||||||
{
|
{
|
||||||
TCGv_i32 t0;
|
TCGv_i32 t0;
|
||||||
@ -1565,7 +1557,6 @@ static struct decoder_info {
|
|||||||
{DEC_BCC, dec_bcc},
|
{DEC_BCC, dec_bcc},
|
||||||
{DEC_RTS, dec_rts},
|
{DEC_RTS, dec_rts},
|
||||||
{DEC_FPU, dec_fpu},
|
{DEC_FPU, dec_fpu},
|
||||||
{DEC_DIV, dec_div},
|
|
||||||
{DEC_MSR, dec_msr},
|
{DEC_MSR, dec_msr},
|
||||||
{DEC_STREAM, dec_stream},
|
{DEC_STREAM, dec_stream},
|
||||||
{{0, 0}, dec_null}
|
{{0, 0}, dec_null}
|
||||||
|
Loading…
Reference in New Issue
Block a user