亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? helper.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  sparc helpers * *  Copyright (c) 2003-2005 Fabrice Bellard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <stdarg.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <inttypes.h>#include <signal.h>#include <assert.h>#include "cpu.h"#include "exec-all.h"//#define DEBUG_MMU/* Sparc MMU emulation *//* thread support */spinlock_t global_cpu_lock = SPIN_LOCK_UNLOCKED;void cpu_lock(void){    spin_lock(&global_cpu_lock);}void cpu_unlock(void){    spin_unlock(&global_cpu_lock);}#if defined(CONFIG_USER_ONLY)int cpu_sparc_handle_mmu_fault(CPUState *env, target_ulong address, int rw,                               int mmu_idx, int is_softmmu){    if (rw & 2)        env->exception_index = TT_TFAULT;    else        env->exception_index = TT_DFAULT;    return 1;}#else#ifndef TARGET_SPARC64/* * Sparc V8 Reference MMU (SRMMU) */static const int access_table[8][8] = {    { 0, 0, 0, 0, 2, 0, 3, 3 },    { 0, 0, 0, 0, 2, 0, 0, 0 },    { 2, 2, 0, 0, 0, 2, 3, 3 },    { 2, 2, 0, 0, 0, 2, 0, 0 },    { 2, 0, 2, 0, 2, 2, 3, 3 },    { 2, 0, 2, 0, 2, 0, 2, 0 },    { 2, 2, 2, 0, 2, 2, 3, 3 },    { 2, 2, 2, 0, 2, 2, 2, 0 }};static const int perm_table[2][8] = {    {        PAGE_READ,        PAGE_READ | PAGE_WRITE,        PAGE_READ | PAGE_EXEC,        PAGE_READ | PAGE_WRITE | PAGE_EXEC,        PAGE_EXEC,        PAGE_READ | PAGE_WRITE,        PAGE_READ | PAGE_EXEC,        PAGE_READ | PAGE_WRITE | PAGE_EXEC    },    {        PAGE_READ,        PAGE_READ | PAGE_WRITE,        PAGE_READ | PAGE_EXEC,        PAGE_READ | PAGE_WRITE | PAGE_EXEC,        PAGE_EXEC,        PAGE_READ,        0,        0,    }};int get_physical_address (CPUState *env, target_phys_addr_t *physical, int *prot,                          int *access_index, target_ulong address, int rw,                          int mmu_idx){    int access_perms = 0;    target_phys_addr_t pde_ptr;    uint32_t pde;    target_ulong virt_addr;    int error_code = 0, is_dirty, is_user;    unsigned long page_offset;    is_user = mmu_idx == MMU_USER_IDX;    virt_addr = address & TARGET_PAGE_MASK;    if ((env->mmuregs[0] & MMU_E) == 0) { /* MMU disabled */        // Boot mode: instruction fetches are taken from PROM        if (rw == 2 && (env->mmuregs[0] & env->mmu_bm)) {            *physical = env->prom_addr | (address & 0x7ffffULL);            *prot = PAGE_READ | PAGE_EXEC;            return 0;        }        *physical = address;        *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;        return 0;    }    *access_index = ((rw & 1) << 2) | (rw & 2) | (is_user? 0 : 1);    *physical = 0xffffffffffff0000ULL;    /* SPARC reference MMU table walk: Context table->L1->L2->PTE */    /* Context base + context number */    pde_ptr = ((env->mmuregs[1] & ~63)<< 4) + (env->mmuregs[2] << 2);    pde = ldl_phys(pde_ptr);    /* Ctx pde */    switch (pde & PTE_ENTRYTYPE_MASK) {    default:    case 0: /* Invalid */        return 1 << 2;    case 2: /* L0 PTE, maybe should not happen? */    case 3: /* Reserved */        return 4 << 2;    case 1: /* L0 PDE */        pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);        pde = ldl_phys(pde_ptr);        switch (pde & PTE_ENTRYTYPE_MASK) {        default:        case 0: /* Invalid */            return (1 << 8) | (1 << 2);        case 3: /* Reserved */            return (1 << 8) | (4 << 2);        case 1: /* L1 PDE */            pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);            pde = ldl_phys(pde_ptr);            switch (pde & PTE_ENTRYTYPE_MASK) {            default:            case 0: /* Invalid */                return (2 << 8) | (1 << 2);            case 3: /* Reserved */                return (2 << 8) | (4 << 2);            case 1: /* L2 PDE */                pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);                pde = ldl_phys(pde_ptr);                switch (pde & PTE_ENTRYTYPE_MASK) {                default:                case 0: /* Invalid */                    return (3 << 8) | (1 << 2);                case 1: /* PDE, should not happen */                case 3: /* Reserved */                    return (3 << 8) | (4 << 2);                case 2: /* L3 PTE */                    virt_addr = address & TARGET_PAGE_MASK;                    page_offset = (address & TARGET_PAGE_MASK) & (TARGET_PAGE_SIZE - 1);                }                break;            case 2: /* L2 PTE */                virt_addr = address & ~0x3ffff;                page_offset = address & 0x3ffff;            }            break;        case 2: /* L1 PTE */            virt_addr = address & ~0xffffff;            page_offset = address & 0xffffff;        }    }    /* update page modified and dirty bits */    is_dirty = (rw & 1) && !(pde & PG_MODIFIED_MASK);    if (!(pde & PG_ACCESSED_MASK) || is_dirty) {        pde |= PG_ACCESSED_MASK;        if (is_dirty)            pde |= PG_MODIFIED_MASK;        stl_phys_notdirty(pde_ptr, pde);    }    /* check access */    access_perms = (pde & PTE_ACCESS_MASK) >> PTE_ACCESS_SHIFT;    error_code = access_table[*access_index][access_perms];    if (error_code && !((env->mmuregs[0] & MMU_NF) && is_user))        return error_code;    /* the page can be put in the TLB */    *prot = perm_table[is_user][access_perms];    if (!(pde & PG_MODIFIED_MASK)) {        /* only set write access if already dirty... otherwise wait           for dirty access */        *prot &= ~PAGE_WRITE;    }    /* Even if large ptes, we map only one 4KB page in the cache to       avoid filling it too fast */    *physical = ((target_phys_addr_t)(pde & PTE_ADDR_MASK) << 4) + page_offset;    return error_code;}/* Perform address translation */int cpu_sparc_handle_mmu_fault (CPUState *env, target_ulong address, int rw,                              int mmu_idx, int is_softmmu){    target_phys_addr_t paddr;    target_ulong vaddr;    int error_code = 0, prot, ret = 0, access_index;    error_code = get_physical_address(env, &paddr, &prot, &access_index, address, rw, mmu_idx);    if (error_code == 0) {        vaddr = address & TARGET_PAGE_MASK;        paddr &= TARGET_PAGE_MASK;#ifdef DEBUG_MMU        printf("Translate at " TARGET_FMT_lx " -> " TARGET_FMT_plx ", vaddr "               TARGET_FMT_lx "\n", address, paddr, vaddr);#endif        ret = tlb_set_page_exec(env, vaddr, paddr, prot, mmu_idx, is_softmmu);        return ret;    }    if (env->mmuregs[3]) /* Fault status register */        env->mmuregs[3] = 1; /* overflow (not read before another fault) */    env->mmuregs[3] |= (access_index << 5) | error_code | 2;    env->mmuregs[4] = address; /* Fault address register */    if ((env->mmuregs[0] & MMU_NF) || env->psret == 0)  {        // No fault mode: if a mapping is available, just override        // permissions. If no mapping is available, redirect accesses to        // neverland. Fake/overridden mappings will be flushed when        // switching to normal mode.        vaddr = address & TARGET_PAGE_MASK;        prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;        ret = tlb_set_page_exec(env, vaddr, paddr, prot, mmu_idx, is_softmmu);        return ret;    } else {        if (rw & 2)            env->exception_index = TT_TFAULT;        else            env->exception_index = TT_DFAULT;        return 1;    }}target_ulong mmu_probe(CPUState *env, target_ulong address, int mmulev){    target_phys_addr_t pde_ptr;    uint32_t pde;    /* Context base + context number */    pde_ptr = (target_phys_addr_t)(env->mmuregs[1] << 4) +        (env->mmuregs[2] << 2);    pde = ldl_phys(pde_ptr);    switch (pde & PTE_ENTRYTYPE_MASK) {    default:    case 0: /* Invalid */    case 2: /* PTE, maybe should not happen? */    case 3: /* Reserved */        return 0;    case 1: /* L1 PDE */        if (mmulev == 3)            return pde;        pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);        pde = ldl_phys(pde_ptr);        switch (pde & PTE_ENTRYTYPE_MASK) {        default:        case 0: /* Invalid */        case 3: /* Reserved */            return 0;        case 2: /* L1 PTE */            return pde;        case 1: /* L2 PDE */            if (mmulev == 2)                return pde;            pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);            pde = ldl_phys(pde_ptr);            switch (pde & PTE_ENTRYTYPE_MASK) {            default:            case 0: /* Invalid */            case 3: /* Reserved */                return 0;            case 2: /* L2 PTE */                return pde;            case 1: /* L3 PDE */                if (mmulev == 1)                    return pde;                pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);                pde = ldl_phys(pde_ptr);                switch (pde & PTE_ENTRYTYPE_MASK) {                default:                case 0: /* Invalid */                case 1: /* PDE, should not happen */                case 3: /* Reserved */                    return 0;                case 2: /* L3 PTE */                    return pde;                }            }        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区免费| 视频一区欧美日韩| 91麻豆精品国产91| 国产91丝袜在线观看| 亚洲超碰97人人做人人爱| 久久综合色综合88| 欧美视频一区二区| 国产成人激情av| 青椒成人免费视频| 一区二区视频在线看| 久久久久久电影| 欧美美女喷水视频| 91一区二区三区在线播放| 国内精品国产成人国产三级粉色| 一区二区在线看| 国产精品丝袜黑色高跟| 日韩免费视频一区二区| 欧美午夜精品免费| 91日韩一区二区三区| 国产精品1024| 精品在线免费观看| 石原莉奈一区二区三区在线观看| 亚洲品质自拍视频| 中文一区在线播放 | 在线观看亚洲专区| 成人丝袜视频网| 国产成人免费在线视频| 久久国产精品第一页| 亚洲国产精品久久不卡毛片| 最新成人av在线| 国产精品入口麻豆九色| 国产视频一区在线播放| 精品国产髙清在线看国产毛片 | 日韩一区二区免费在线观看| 欧美在线一二三| 在线看不卡av| 在线观看91精品国产入口| 91啪亚洲精品| 91蜜桃在线观看| 色av一区二区| 欧美伊人久久大香线蕉综合69| 在线亚洲人成电影网站色www| 91美女视频网站| 一本色道久久综合精品竹菊| 91美女片黄在线观看| 91小视频在线免费看| 一本大道久久a久久精品综合| aaa欧美色吧激情视频| 99re这里只有精品6| 91碰在线视频| 欧美天堂一区二区三区| 欧美日韩黄色影视| 欧美一区二区三区在| 欧美videos中文字幕| 久久久亚洲国产美女国产盗摄| 欧美精品一区二区蜜臀亚洲| 国产亚洲一区二区三区| 国产精品婷婷午夜在线观看| 中文字幕亚洲不卡| 一区二区三区不卡视频| 亚洲高清免费一级二级三级| 日韩**一区毛片| 国产精品香蕉一区二区三区| 成人精品一区二区三区中文字幕| 91蜜桃在线观看| 欧美日韩激情一区二区三区| 精品成人一区二区三区四区| 国产日韩欧美精品综合| 亚洲欧美一区二区三区久本道91 | 韩国女主播成人在线观看| 国产老女人精品毛片久久| av色综合久久天堂av综合| 欧美性色黄大片手机版| 精品国产伦一区二区三区观看体验| 国产日韩欧美精品一区| 亚洲伊人伊色伊影伊综合网| 精品一区二区影视| 99r精品视频| 91精品国产综合久久国产大片| 久久久久国产免费免费| 亚洲色图欧美在线| 麻豆国产欧美日韩综合精品二区| 成人免费观看男女羞羞视频| 欧美午夜精品久久久| wwwwxxxxx欧美| 亚洲黄一区二区三区| 精品中文字幕一区二区小辣椒| 91丨porny丨最新| 欧美电视剧免费观看| 亚洲欧洲精品成人久久奇米网| 日本不卡的三区四区五区| 成人免费视频国产在线观看| 欧美人伦禁忌dvd放荡欲情| 国产欧美日韩激情| 日韩在线卡一卡二| 91在线视频观看| 精品国产污网站| 亚洲丶国产丶欧美一区二区三区| 国产福利精品一区二区| 欧美日韩国产不卡| 亚洲欧洲日本在线| 韩国v欧美v日本v亚洲v| 欧美军同video69gay| 国产精品国产三级国产aⅴ中文 | 欧美美女一区二区| 亚洲丝袜精品丝袜在线| 韩国成人福利片在线播放| 欧美日韩国产欧美日美国产精品| 国产精品乱人伦中文| 精品亚洲成a人| 欧美日韩国产综合久久 | 国产精品青草综合久久久久99| 青青草精品视频| 欧美精品色一区二区三区| 亚洲人成网站影音先锋播放| 国产精品一线二线三线| 日韩一级片在线观看| 亚洲国产中文字幕在线视频综合| 成人精品免费视频| 久久久久久久久久久黄色| 免费在线成人网| 欧美伦理影视网| 亚洲自拍偷拍麻豆| 一本到不卡免费一区二区| 国产精品福利一区二区| 国产iv一区二区三区| 久久久亚洲精品一区二区三区| 开心九九激情九九欧美日韩精美视频电影| 欧美在线观看一区| 亚洲一区在线观看免费观看电影高清| 成人国产精品视频| 欧美国产亚洲另类动漫| 国产一区在线精品| 国产日韩三级在线| 成人精品免费看| 亚洲欧洲www| 99国产精品久久久久久久久久久 | 欧美精品久久一区二区三区| 亚洲一二三四区不卡| 色欧美日韩亚洲| 一区二区三区在线视频免费观看| 色欧美片视频在线观看| 一区二区三区在线视频观看58| 91麻豆精品一区二区三区| 亚洲美女偷拍久久| 日本韩国一区二区| 亚洲高清免费视频| 日韩欧美中文字幕精品| 美女一区二区三区| 久久久不卡网国产精品一区| 大桥未久av一区二区三区中文| 日本一区二区三区国色天香| 99精品欧美一区二区三区综合在线| 亚洲同性gay激情无套| 一道本成人在线| 亚洲v精品v日韩v欧美v专区| 91精品欧美综合在线观看最新 | 日本成人在线看| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品一级在线| 亚洲天堂免费看| 欧美日韩成人在线| 国内久久精品视频| 最新不卡av在线| 欧美一区在线视频| 国产成人午夜高潮毛片| 一区二区三区在线视频观看58| 欧美一级一区二区| 成人影视亚洲图片在线| 亚洲在线成人精品| 精品国产免费人成在线观看| 99久久久国产精品| 天堂久久一区二区三区| 精品国产一区二区三区四区四| 成人av网在线| 日本中文字幕一区| 国产精品久久久久永久免费观看 | 日韩理论片网站| 正在播放一区二区| 白白色 亚洲乱淫| 日日骚欧美日韩| 中文字幕av一区 二区| 欧美老肥妇做.爰bbww| 成人美女视频在线观看18| 亚洲一区二区三区不卡国产欧美| 一区二区三区免费网站| 91麻豆精品国产91久久久使用方法 | 亚洲精品在线免费播放| 色综合久久中文字幕综合网| 久久9热精品视频| 一区二区三区四区在线| 精品国产91洋老外米糕| 日本韩国欧美在线| 国产99久久久国产精品免费看| 亚洲成人三级小说| 国产精品久久久久7777按摩| 欧美一级高清片| 色老综合老女人久久久| 国产传媒日韩欧美成人| 日韩国产成人精品|