Revision ee6c38d5
b/target-s390x/insn-data.def | ||
---|---|---|
394 | 394 |
C(0x0e00, MVCL, RR_a, Z, 0, 0, 0, 0, mvcl, 0) |
395 | 395 |
/* MOVE LONG EXTENDED */ |
396 | 396 |
C(0xa800, MVCLE, RS_a, Z, 0, a2, 0, 0, mvcle, 0) |
397 |
/* MOVE PAGE */ |
|
398 |
C(0xb254, MVPG, RRE, Z, r1_o, r2_o, 0, 0, mvpg, 0) |
|
397 | 399 |
|
398 | 400 |
/* MULTIPLY */ |
399 | 401 |
C(0x1c00, MR, RR_a, Z, r1p1_32s, r2_32s, new, r1_D32, mul, 0) |
b/target-s390x/mem_helper.c | ||
---|---|---|
398 | 398 |
void HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2) |
399 | 399 |
{ |
400 | 400 |
/* XXX missing r0 handling */ |
401 |
env->cc_op = 0; |
|
401 | 402 |
#ifdef CONFIG_USER_ONLY |
402 |
int i; |
|
403 |
|
|
404 |
for (i = 0; i < TARGET_PAGE_SIZE; i++) { |
|
405 |
cpu_stb_data(env, r1 + i, cpu_ldub_data(env, r2 + i)); |
|
406 |
} |
|
403 |
memmove(g2h(r1), g2h(r2), TARGET_PAGE_SIZE); |
|
407 | 404 |
#else |
408 | 405 |
mvc_fast_memmove(env, TARGET_PAGE_SIZE, r1, r2); |
409 | 406 |
#endif |
b/target-s390x/translate.c | ||
---|---|---|
1034 | 1034 |
LOG_DISAS("disas_b2: op 0x%x r1 %d r2 %d\n", op, r1, r2); |
1035 | 1035 |
|
1036 | 1036 |
switch (op) { |
1037 |
case 0x54: /* MVPG R1,R2 [RRE] */ |
|
1038 |
tmp = load_reg(0); |
|
1039 |
tmp2 = load_reg(r1); |
|
1040 |
tmp3 = load_reg(r2); |
|
1041 |
potential_page_fault(s); |
|
1042 |
gen_helper_mvpg(cpu_env, tmp, tmp2, tmp3); |
|
1043 |
tcg_temp_free_i64(tmp); |
|
1044 |
tcg_temp_free_i64(tmp2); |
|
1045 |
tcg_temp_free_i64(tmp3); |
|
1046 |
/* XXX check CCO bit and set CC accordingly */ |
|
1047 |
gen_op_movi_cc(s, 0); |
|
1048 |
break; |
|
1049 | 1037 |
case 0x55: /* MVST R1,R2 [RRE] */ |
1050 | 1038 |
tmp32_1 = load_reg32(0); |
1051 | 1039 |
tmp32_2 = tcg_const_i32(r1); |
... | ... | |
2654 | 2642 |
} |
2655 | 2643 |
#endif |
2656 | 2644 |
|
2645 |
static ExitStatus op_mvpg(DisasContext *s, DisasOps *o) |
|
2646 |
{ |
|
2647 |
potential_page_fault(s); |
|
2648 |
gen_helper_mvpg(cpu_env, regs[0], o->in1, o->in2); |
|
2649 |
set_cc_static(s); |
|
2650 |
return NO_EXIT; |
|
2651 |
} |
|
2652 |
|
|
2657 | 2653 |
static ExitStatus op_mul(DisasContext *s, DisasOps *o) |
2658 | 2654 |
{ |
2659 | 2655 |
tcg_gen_mul_i64(o->out, o->in1, o->in2); |
Also available in: Unified diff