static int pte_check_hash32(mmu_ctx_t *ctx, target_ulong pte0,

                            target_ulong pte1, int h, int rw, int type)

{

    target_ulong ptem, mmask;

    int access, ret, pteh, ptev, pp;



    ret = -1;

    /* Check validity and table match */

    ptev = pte_is_valid_hash32(pte0);

    pteh = (pte0 >> 6) & 1;

    if (ptev && h == pteh) {

        /* Check vsid & api */

        ptem = pte0 & PTE_PTEM_MASK;

        mmask = PTE_CHECK_MASK;

        pp = pte1 & 0x00000003;

        if (ptem == ctx->ptem) {

            if (ctx->raddr != (hwaddr)-1ULL) {

                /* all matches should have equal RPN, WIMG & PP */

                if ((ctx->raddr & mmask) != (pte1 & mmask)) {

                    qemu_log("Bad RPN/WIMG/PP\n");

                    return -3;

                }

            }

            /* Compute access rights */

            access = pp_check(ctx->key, pp, ctx->nx);

            /* Keep the matching PTE informations */

            ctx->raddr = pte1;

            ctx->prot = access;

            ret = check_prot(ctx->prot, rw, type);

            if (ret == 0) {

                /* Access granted */

                LOG_MMU("PTE access granted !\n");

            } else {

                /* Access right violation */

                LOG_MMU("PTE access rejected\n");

            }

        }

    }



    return ret;

}

static int pte_check_hash32(mmu_ctx_t *ctx, target_ulong pte0,

                            target_ulong pte1, int h, int rw, int type)

{

    target_ulong ptem, mmask;

    int access, ret, pteh, ptev, pp;



    ret = -1;

    

    ptev = pte_is_valid_hash32(pte0);

    pteh = (pte0 >> 6) & 1;

    if (ptev && h == pteh) {

        

        ptem = pte0 & PTE_PTEM_MASK;

        mmask = PTE_CHECK_MASK;

        pp = pte1 & 0x00000003;

        if (ptem == ctx->ptem) {

            if (ctx->raddr != (hwaddr)-1ULL) {

                

                if ((ctx->raddr & mmask) != (pte1 & mmask)) {

                    qemu_log("Bad RPN/WIMG/PP\n");

                    return -3;

                }

            }

            

            access = pp_check(ctx->key, pp, ctx->nx);

            

            ctx->raddr = pte1;

            ctx->prot = access;

            ret = check_prot(ctx->prot, rw, type);

            if (ret == 0) {

                

                LOG_MMU("PTE access granted !\n");

            } else {

                

                LOG_MMU("PTE access rejected\n");

            }

        }

    }



    return ret;

}

static int FUNC_0(mmu_ctx_t *VAR_0, target_ulong VAR_1,

                            target_ulong VAR_2, int VAR_3, int VAR_4, int VAR_5)

{

    target_ulong ptem, mmask;

    int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10;



    VAR_7 = -1;

    

    VAR_9 = pte_is_valid_hash32(VAR_1);

    VAR_8 = (VAR_1 >> 6) & 1;

    if (VAR_9 && VAR_3 == VAR_8) {

        

        ptem = VAR_1 & PTE_PTEM_MASK;

        mmask = PTE_CHECK_MASK;

        VAR_10 = VAR_2 & 0x00000003;

        if (ptem == VAR_0->ptem) {

            if (VAR_0->raddr != (hwaddr)-1ULL) {

                

                if ((VAR_0->raddr & mmask) != (VAR_2 & mmask)) {

                    qemu_log("Bad RPN/WIMG/PP\n");

                    return -3;

                }

            }

            

            VAR_6 = pp_check(VAR_0->key, VAR_10, VAR_0->nx);

            

            VAR_0->raddr = VAR_2;

            VAR_0->prot = VAR_6;

            VAR_7 = check_prot(VAR_0->prot, VAR_4, VAR_5);

            if (VAR_7 == 0) {

                

                LOG_MMU("PTE VAR_6 granted !\n");

            } else {

                

                LOG_MMU("PTE VAR_6 rejected\n");

            }

        }

    }



    return VAR_7;

}

static int FUNC_0(mmu_ctx_t *VAR_0, target_ulong VAR_1,
target_ulong VAR_2, int VAR_3, int VAR_4, int VAR_5)
{ target_ulong ptem, mmask; int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10; VAR_7 = -1; VAR_9 = pte_is_valid_hash32(VAR_1); VAR_8 = (VAR_1 >> 6) & 1; if (VAR_9 && VAR_3 == VAR_8) { ptem = VAR_1 & PTE_PTEM_MASK; mmask = PTE_CHECK_MASK; VAR_10 = VAR_2 & 0x00000003; if (ptem == VAR_0->ptem) { if (VAR_0->raddr != (hwaddr)-1ULL) { if ((VAR_0->raddr & mmask) != (VAR_2 & mmask)) { qemu_log("Bad RPN/WIMG/PP\n"); return -3; } } VAR_6 = pp_check(VAR_0->key, VAR_10, VAR_0->nx); VAR_0->raddr = VAR_2; VAR_0->prot = VAR_6; VAR_7 = check_prot(VAR_0->prot, VAR_4, VAR_5); if (VAR_7 == 0) { LOG_MMU("PTE VAR_6 granted !\n"); } else { LOG_MMU("PTE VAR_6 rejected\n"); } } } return VAR_7; }