mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
target-s390: Convert CONVERT FROM FIXED
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
68c8bd93cc
commit
683bb9a888
4 changed files with 66 additions and 104 deletions
|
@ -1381,8 +1381,7 @@ static void disas_b2(CPUS390XState *env, DisasContext *s, int op,
|
|||
static void disas_b3(CPUS390XState *env, DisasContext *s, int op, int m3,
|
||||
int r1, int r2)
|
||||
{
|
||||
TCGv_i64 tmp;
|
||||
TCGv_i32 tmp32_1, tmp32_2;
|
||||
TCGv_i32 tmp32_1;
|
||||
LOG_DISAS("disas_b3: op 0x%x m3 0x%x r1 %d r2 %d\n", op, m3, r1, r2);
|
||||
#define FP_HELPER(i) \
|
||||
tmp32_1 = tcg_const_i32(r1); \
|
||||
|
@ -1405,51 +1404,6 @@ static void disas_b3(CPUS390XState *env, DisasContext *s, int op, int m3,
|
|||
tcg_gen_st_i32(tmp32_1, cpu_env, offsetof(CPUS390XState, fpc));
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
break;
|
||||
case 0x94: /* CEFBR R1,R2 [RRE] */
|
||||
case 0x95: /* CDFBR R1,R2 [RRE] */
|
||||
case 0x96: /* CXFBR R1,R2 [RRE] */
|
||||
tmp32_1 = tcg_const_i32(r1);
|
||||
tmp32_2 = load_reg32(r2);
|
||||
switch (op) {
|
||||
case 0x94:
|
||||
gen_helper_cefbr(cpu_env, tmp32_1, tmp32_2);
|
||||
break;
|
||||
case 0x95:
|
||||
gen_helper_cdfbr(cpu_env, tmp32_1, tmp32_2);
|
||||
break;
|
||||
case 0x96:
|
||||
gen_helper_cxfbr(cpu_env, tmp32_1, tmp32_2);
|
||||
break;
|
||||
default:
|
||||
tcg_abort();
|
||||
}
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
tcg_temp_free_i32(tmp32_2);
|
||||
break;
|
||||
case 0xa4: /* CEGBR R1,R2 [RRE] */
|
||||
case 0xa5: /* CDGBR R1,R2 [RRE] */
|
||||
tmp32_1 = tcg_const_i32(r1);
|
||||
tmp = load_reg(r2);
|
||||
switch (op) {
|
||||
case 0xa4:
|
||||
gen_helper_cegbr(cpu_env, tmp32_1, tmp);
|
||||
break;
|
||||
case 0xa5:
|
||||
gen_helper_cdgbr(cpu_env, tmp32_1, tmp);
|
||||
break;
|
||||
default:
|
||||
tcg_abort();
|
||||
}
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
tcg_temp_free_i64(tmp);
|
||||
break;
|
||||
case 0xa6: /* CXGBR R1,R2 [RRE] */
|
||||
tmp32_1 = tcg_const_i32(r1);
|
||||
tmp = load_reg(r2);
|
||||
gen_helper_cxgbr(cpu_env, tmp32_1, tmp);
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
tcg_temp_free_i64(tmp);
|
||||
break;
|
||||
default:
|
||||
LOG_DISAS("illegal b3 operation 0x%x\n", op);
|
||||
gen_illegal_opcode(s);
|
||||
|
@ -2144,6 +2098,31 @@ static ExitStatus op_cgxb(DisasContext *s, DisasOps *o)
|
|||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_cegb(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
TCGv_i32 m3 = tcg_const_i32(get_field(s->fields, m3));
|
||||
gen_helper_cegb(o->out, cpu_env, o->in2, m3);
|
||||
tcg_temp_free_i32(m3);
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_cdgb(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
TCGv_i32 m3 = tcg_const_i32(get_field(s->fields, m3));
|
||||
gen_helper_cdgb(o->out, cpu_env, o->in2, m3);
|
||||
tcg_temp_free_i32(m3);
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_cxgb(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
TCGv_i32 m3 = tcg_const_i32(get_field(s->fields, m3));
|
||||
gen_helper_cxgb(o->out, cpu_env, o->in2, m3);
|
||||
tcg_temp_free_i32(m3);
|
||||
return_low128(o->out2);
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_clc(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
int l = get_field(s->fields, l1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue