target-s390: Convert STORE
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
facfc86487
commit
2b280b9708
@ -249,6 +249,22 @@
|
||||
D(0xa50a, OILH, RI_a, Z, r1_o, i2_16u, r1, 0, ori, 0, 0x1010)
|
||||
D(0xa50b, OILL, RI_a, Z, r1_o, i2_16u, r1, 0, ori, 0, 0x1000)
|
||||
|
||||
/* STORE */
|
||||
C(0x5000, ST, RX_a, Z, r1_o, a2, 0, 0, st32, 0)
|
||||
C(0xe350, STY, RXY_a, LD, r1_o, a2, 0, 0, st32, 0)
|
||||
C(0xe324, STG, RXY_a, Z, r1_o, a2, 0, 0, st64, 0)
|
||||
/* STORE RELATIVE LONG */
|
||||
C(0xc40f, STRL, RIL_b, GIE, r1_o, ri2, 0, 0, st32, 0)
|
||||
C(0xc40b, STGRL, RIL_b, GIE, r1_o, ri2, 0, 0, st64, 0)
|
||||
/* STORE CHARACTER */
|
||||
C(0x4200, STC, RX_a, Z, r1_o, a2, 0, 0, st8, 0)
|
||||
C(0xe372, STCY, RXY_a, LD, r1_o, a2, 0, 0, st8, 0)
|
||||
/* STORE HALFWORD */
|
||||
C(0x4000, STH, RX_a, Z, r1_o, a2, 0, 0, st16, 0)
|
||||
C(0xe370, STHY, RXY_a, LD, r1_o, a2, 0, 0, st16, 0)
|
||||
/* STORE HALFWORD RELATIVE LONG */
|
||||
C(0xc407, STHRL, RIL_b, GIE, r1_o, ri2, 0, 0, st16, 0)
|
||||
|
||||
/* SUBTRACT */
|
||||
C(0x1b00, SR, RR_a, Z, r1, r2, new, r1_32, sub, subs32)
|
||||
C(0xb9f9, SRK, RRF_a, DO, r2, r3, new, r1_32, sub, subs32)
|
||||
|
@ -1371,9 +1371,6 @@ static void disas_e3(CPUS390XState *env, DisasContext* s, int op, int r1,
|
||||
store_reg16(r1, tmp32_1);
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
break;
|
||||
case 0x24: /* stg r1, d2(x2,b2) */
|
||||
tcg_gen_qemu_st64(regs[r1], addr, get_mem_index(s));
|
||||
break;
|
||||
case 0x3e: /* STRV R1,D2(X2,B2) [RXY] */
|
||||
tmp32_1 = load_reg32(r1);
|
||||
tmp2 = tcg_temp_new_i64();
|
||||
@ -1383,22 +1380,6 @@ static void disas_e3(CPUS390XState *env, DisasContext* s, int op, int r1,
|
||||
tcg_gen_qemu_st32(tmp2, addr, get_mem_index(s));
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x50: /* STY R1,D2(X2,B2) [RXY] */
|
||||
tmp32_1 = load_reg32(r1);
|
||||
tmp2 = tcg_temp_new_i64();
|
||||
tcg_gen_extu_i32_i64(tmp2, tmp32_1);
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
tcg_gen_qemu_st32(tmp2, addr, get_mem_index(s));
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x72: /* STCY R1,D2(X2,B2) [RXY] */
|
||||
tmp32_1 = load_reg32(r1);
|
||||
tmp2 = tcg_temp_new_i64();
|
||||
tcg_gen_ext_i32_i64(tmp2, tmp32_1);
|
||||
tcg_gen_qemu_st8(tmp2, addr, get_mem_index(s));
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x73: /* ICY R1,D2(X2,B2) [RXY] */
|
||||
tmp3 = tcg_temp_new_i64();
|
||||
tcg_gen_qemu_ld8u(tmp3, addr, get_mem_index(s));
|
||||
@ -2936,22 +2917,6 @@ static void disas_s390_insn(CPUS390XState *env, DisasContext *s)
|
||||
store_freg32(r1, tmp32_1);
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
break;
|
||||
case 0x40: /* STH R1,D2(X2,B2) [RX] */
|
||||
insn = ld_code4(env, s->pc);
|
||||
tmp = decode_rx(s, insn, &r1, &x2, &b2, &d2);
|
||||
tmp2 = load_reg(r1);
|
||||
tcg_gen_qemu_st16(tmp2, tmp, get_mem_index(s));
|
||||
tcg_temp_free_i64(tmp);
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x42: /* STC R1,D2(X2,B2) [RX] */
|
||||
insn = ld_code4(env, s->pc);
|
||||
tmp = decode_rx(s, insn, &r1, &x2, &b2, &d2);
|
||||
tmp2 = load_reg(r1);
|
||||
tcg_gen_qemu_st8(tmp2, tmp, get_mem_index(s));
|
||||
tcg_temp_free_i64(tmp);
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x43: /* IC R1,D2(X2,B2) [RX] */
|
||||
insn = ld_code4(env, s->pc);
|
||||
tmp = decode_rx(s, insn, &r1, &x2, &b2, &d2);
|
||||
@ -3027,14 +2992,6 @@ static void disas_s390_insn(CPUS390XState *env, DisasContext *s)
|
||||
tcg_temp_free_i64(tmp2);
|
||||
tcg_temp_free_i32(tmp32_1);
|
||||
break;
|
||||
case 0x50: /* st r1, d2(x2, b2) */
|
||||
insn = ld_code4(env, s->pc);
|
||||
tmp = decode_rx(s, insn, &r1, &x2, &b2, &d2);
|
||||
tmp2 = load_reg(r1);
|
||||
tcg_gen_qemu_st32(tmp2, tmp, get_mem_index(s));
|
||||
tcg_temp_free_i64(tmp);
|
||||
tcg_temp_free_i64(tmp2);
|
||||
break;
|
||||
case 0x5d: /* D R1,D2(X2,B2) [RX] */
|
||||
insn = ld_code4(env, s->pc);
|
||||
tmp3 = decode_rx(s, insn, &r1, &x2, &b2, &d2);
|
||||
@ -4055,6 +4012,30 @@ static ExitStatus op_ori(DisasContext *s, DisasOps *o)
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_st8(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
tcg_gen_qemu_st8(o->in1, o->in2, get_mem_index(s));
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_st16(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
tcg_gen_qemu_st16(o->in1, o->in2, get_mem_index(s));
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_st32(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
tcg_gen_qemu_st32(o->in1, o->in2, get_mem_index(s));
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_st64(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
tcg_gen_qemu_st64(o->in1, o->in2, get_mem_index(s));
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_sub(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
tcg_gen_sub_i64(o->out, o->in1, o->in2);
|
||||
|
Loading…
Reference in New Issue
Block a user