uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)

{

    CPUState *cs = CPU(s390_env_get_cpu(env));

    uint32_t cc = 0;

    int old_exc = cs->exception_index;

    uint64_t asc = env->psw.mask & PSW_MASK_ASC;

    uint64_t ret;

    int flags;



    /* XXX incomplete - has more corner cases */

    if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) {

        program_interrupt(env, PGM_SPECIAL_OP, 2);

    }



    cs->exception_index = old_exc;

    if (mmu_translate(env, addr, 0, asc, &ret, &flags)) {

        cc = 3;

    }

    if (cs->exception_index == EXCP_PGM) {

        ret = env->int_pgm_code | 0x80000000;

    } else {

        ret |= addr & ~TARGET_PAGE_MASK;

    }

    cs->exception_index = old_exc;



    env->cc_op = cc;

    return ret;

}

uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)

{

    CPUState *cs = CPU(s390_env_get_cpu(env));

    uint32_t cc = 0;

    int old_exc = cs->exception_index;

    uint64_t asc = env->psw.mask & PSW_MASK_ASC;

    uint64_t ret;

    int flags;



    

    if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) {

        program_interrupt(env, PGM_SPECIAL_OP, 2);

    }



    cs->exception_index = old_exc;

    if (mmu_translate(env, addr, 0, asc, &ret, &flags)) {

        cc = 3;

    }

    if (cs->exception_index == EXCP_PGM) {

        ret = env->int_pgm_code | 0x80000000;

    } else {

        ret |= addr & ~TARGET_PAGE_MASK;

    }

    cs->exception_index = old_exc;



    env->cc_op = cc;

    return ret;

}

uint64_t FUNC_0(lra)(CPUS390XState *env, uint64_t addr)

{

    CPUState *cs = CPU(s390_env_get_cpu(env));

    uint32_t cc = 0;

    int VAR_0 = cs->exception_index;

    uint64_t asc = env->psw.mask & PSW_MASK_ASC;

    uint64_t ret;

    int VAR_1;



    

    if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) {

        program_interrupt(env, PGM_SPECIAL_OP, 2);

    }



    cs->exception_index = VAR_0;

    if (mmu_translate(env, addr, 0, asc, &ret, &VAR_1)) {

        cc = 3;

    }

    if (cs->exception_index == EXCP_PGM) {

        ret = env->int_pgm_code | 0x80000000;

    } else {

        ret |= addr & ~TARGET_PAGE_MASK;

    }

    cs->exception_index = VAR_0;



    env->cc_op = cc;

    return ret;

}

uint64_t FUNC_0(lra)(CPUS390XState *env, uint64_t addr)
{ CPUState *cs = CPU(s390_env_get_cpu(env)); uint32_t cc = 0; int VAR_0 = cs->exception_index; uint64_t asc = env->psw.mask & PSW_MASK_ASC; uint64_t ret; int VAR_1; if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) { program_interrupt(env, PGM_SPECIAL_OP, 2); } cs->exception_index = VAR_0; if (mmu_translate(env, addr, 0, asc, &ret, &VAR_1)) { cc = 3; } if (cs->exception_index == EXCP_PGM) { ret = env->int_pgm_code | 0x80000000; } else { ret |= addr & ~TARGET_PAGE_MASK; } cs->exception_index = VAR_0; env->cc_op = cc; return ret; }