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