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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? helper.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  MIPS emulation helpers for qemu. * *  Copyright (c) 2004-2005 Jocelyn Mayer * * 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"enum {    TLBRET_DIRTY = -4,    TLBRET_INVALID = -3,    TLBRET_NOMATCH = -2,    TLBRET_BADADDR = -1,    TLBRET_MATCH = 0};/* no MMU emulation */int no_mmu_map_address (CPUState *env, target_ulong *physical, int *prot,                        target_ulong address, int rw, int access_type){    *physical = address;    *prot = PAGE_READ | PAGE_WRITE;    return TLBRET_MATCH;}/* fixed mapping MMU emulation */int fixed_mmu_map_address (CPUState *env, target_ulong *physical, int *prot,                           target_ulong address, int rw, int access_type){    if (address <= (int32_t)0x7FFFFFFFUL) {        if (!(env->CP0_Status & (1 << CP0St_ERL)))            *physical = address + 0x40000000UL;        else            *physical = address;    } else if (address <= (int32_t)0xBFFFFFFFUL)        *physical = address & 0x1FFFFFFF;    else        *physical = address;    *prot = PAGE_READ | PAGE_WRITE;    return TLBRET_MATCH;}/* MIPS32/MIPS64 R4000-style MMU emulation */int r4k_map_address (CPUState *env, target_ulong *physical, int *prot,                     target_ulong address, int rw, int access_type){    uint8_t ASID = env->CP0_EntryHi & 0xFF;    int i;    for (i = 0; i < env->tlb->tlb_in_use; i++) {        r4k_tlb_t *tlb = &env->tlb->mmu.r4k.tlb[i];        /* 1k pages are not supported. */        target_ulong mask = tlb->PageMask | ~(TARGET_PAGE_MASK << 1);        target_ulong tag = address & ~mask;        target_ulong VPN = tlb->VPN & ~mask;#if defined(TARGET_MIPS64)        tag &= env->SEGMask;#endif        /* Check ASID, virtual page number & size */        if ((tlb->G == 1 || tlb->ASID == ASID) && VPN == tag) {            /* TLB match */            int n = !!(address & mask & ~(mask >> 1));            /* Check access rights */            if (!(n ? tlb->V1 : tlb->V0))                return TLBRET_INVALID;            if (rw == 0 || (n ? tlb->D1 : tlb->D0)) {                *physical = tlb->PFN[n] | (address & (mask >> 1));                *prot = PAGE_READ;                if (n ? tlb->D1 : tlb->D0)                    *prot |= PAGE_WRITE;                return TLBRET_MATCH;            }            return TLBRET_DIRTY;        }    }    return TLBRET_NOMATCH;}static int get_physical_address (CPUState *env, target_ulong *physical,                                int *prot, target_ulong address,                                int rw, int access_type){    /* User mode can only access useg/xuseg */    int user_mode = (env->hflags & MIPS_HFLAG_MODE) == MIPS_HFLAG_UM;    int supervisor_mode = (env->hflags & MIPS_HFLAG_MODE) == MIPS_HFLAG_SM;    int kernel_mode = !user_mode && !supervisor_mode;#if defined(TARGET_MIPS64)    int UX = (env->CP0_Status & (1 << CP0St_UX)) != 0;    int SX = (env->CP0_Status & (1 << CP0St_SX)) != 0;    int KX = (env->CP0_Status & (1 << CP0St_KX)) != 0;#endif    int ret = TLBRET_MATCH;#if 0    if (logfile) {        fprintf(logfile, "user mode %d h %08x\n",                user_mode, env->hflags);    }#endif    if (address <= (int32_t)0x7FFFFFFFUL) {        /* useg */        if (env->CP0_Status & (1 << CP0St_ERL)) {            *physical = address & 0xFFFFFFFF;            *prot = PAGE_READ | PAGE_WRITE;        } else {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);        }#if defined(TARGET_MIPS64)    } else if (address < 0x4000000000000000ULL) {        /* xuseg */	if (UX && address <= (0x3FFFFFFFFFFFFFFFULL & env->SEGMask)) {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);	} else {	    ret = TLBRET_BADADDR;        }    } else if (address < 0x8000000000000000ULL) {        /* xsseg */	if ((supervisor_mode || kernel_mode) &&	    SX && address <= (0x7FFFFFFFFFFFFFFFULL & env->SEGMask)) {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);	} else {	    ret = TLBRET_BADADDR;        }    } else if (address < 0xC000000000000000ULL) {        /* xkphys */        if (kernel_mode && KX &&            (address & 0x07FFFFFFFFFFFFFFULL) <= env->PAMask) {            *physical = address & env->PAMask;            *prot = PAGE_READ | PAGE_WRITE;	} else {	    ret = TLBRET_BADADDR;	}    } else if (address < 0xFFFFFFFF80000000ULL) {        /* xkseg */	if (kernel_mode && KX &&	    address <= (0xFFFFFFFF7FFFFFFFULL & env->SEGMask)) {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);	} else {	    ret = TLBRET_BADADDR;	}#endif    } else if (address < (int32_t)0xA0000000UL) {        /* kseg0 */        if (kernel_mode) {            *physical = address - (int32_t)0x80000000UL;            *prot = PAGE_READ | PAGE_WRITE;        } else {            ret = TLBRET_BADADDR;        }    } else if (address < (int32_t)0xC0000000UL) {        /* kseg1 */        if (kernel_mode) {            *physical = address - (int32_t)0xA0000000UL;            *prot = PAGE_READ | PAGE_WRITE;        } else {            ret = TLBRET_BADADDR;        }    } else if (address < (int32_t)0xE0000000UL) {        /* sseg (kseg2) */        if (supervisor_mode || kernel_mode) {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);        } else {            ret = TLBRET_BADADDR;        }    } else {        /* kseg3 */        /* XXX: debug segment is not emulated */        if (kernel_mode) {            ret = env->tlb->map_address(env, physical, prot, address, rw, access_type);        } else {            ret = TLBRET_BADADDR;        }    }#if 0    if (logfile) {        fprintf(logfile, TARGET_FMT_lx " %d %d => " TARGET_FMT_lx " %d (%d)\n",		address, rw, access_type, *physical, *prot, ret);    }#endif    return ret;}#if defined(CONFIG_USER_ONLY)target_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr){    return addr;}#elsetarget_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr){    target_ulong phys_addr;    int prot;    if (get_physical_address(env, &phys_addr, &prot, addr, 0, ACCESS_INT) != 0)        return -1;    return phys_addr;}void cpu_mips_init_mmu (CPUState *env){}#endif /* !defined(CONFIG_USER_ONLY) */int cpu_mips_handle_mmu_fault (CPUState *env, target_ulong address, int rw,                               int mmu_idx, int is_softmmu){    target_ulong physical;    int prot;    int exception = 0, error_code = 0;    int access_type;    int ret = 0;    if (logfile) {#if 0        cpu_dump_state(env, logfile, fprintf, 0);#endif        fprintf(logfile, "%s pc " TARGET_FMT_lx " ad " TARGET_FMT_lx " rw %d mmu_idx %d smmu %d\n",                __func__, env->PC[env->current_tc], address, rw, mmu_idx, is_softmmu);    }    rw &= 1;    /* data access */    /* XXX: put correct access by using cpu_restore_state()       correctly */    access_type = ACCESS_INT;    if (env->user_mode_only) {        /* user mode only emulation */        ret = TLBRET_NOMATCH;        goto do_fault;    }    ret = get_physical_address(env, &physical, &prot,                               address, rw, access_type);    if (logfile) {        fprintf(logfile, "%s address=" TARGET_FMT_lx " ret %d physical " TARGET_FMT_lx " prot %d\n",                __func__, address, ret, physical, prot);    }    if (ret == TLBRET_MATCH) {       ret = tlb_set_page(env, address & TARGET_PAGE_MASK,                          physical & TARGET_PAGE_MASK, prot,                          mmu_idx, is_softmmu);    } else if (ret < 0) {    do_fault:        switch (ret) {        default:        case TLBRET_BADADDR:            /* Reference to kernel address from user mode or supervisor mode */            /* Reference to supervisor address from user mode */            if (rw)                exception = EXCP_AdES;            else                exception = EXCP_AdEL;            break;        case TLBRET_NOMATCH:            /* No TLB match for a mapped address */            if (rw)                exception = EXCP_TLBS;            else                exception = EXCP_TLBL;            error_code = 1;            break;        case TLBRET_INVALID:            /* TLB match with no valid bit */            if (rw)                exception = EXCP_TLBS;            else                exception = EXCP_TLBL;            break;        case TLBRET_DIRTY:            /* TLB match but 'D' bit is cleared */            exception = EXCP_LTLBL;            break;        }        /* Raise exception */        env->CP0_BadVAddr = address;        env->CP0_Context = (env->CP0_Context & ~0x007fffff) |	                   ((address >> 9) &   0x007ffff0);        env->CP0_EntryHi =            (env->CP0_EntryHi & 0xFF) | (address & (TARGET_PAGE_MASK << 1));#if defined(TARGET_MIPS64)        env->CP0_EntryHi &= env->SEGMask;        env->CP0_XContext = (env->CP0_XContext & ((~0ULL) << (env->SEGBITS - 7))) |                            ((address & 0xC00000000000ULL) >> (env->SEGBITS - 9)) |                            ((address & ((1ULL << env->SEGBITS) - 1) & 0xFFFFFFFFFFFFE000ULL) >> 9);#endif        env->exception_index = exception;        env->error_code = error_code;        ret = 1;    }    return ret;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人免费网| av在线不卡观看免费观看| 色吊一区二区三区| 日韩影院在线观看| 2021国产精品久久精品 | 91精品国产入口| 午夜精品久久久久久久久久 | 日本aⅴ免费视频一区二区三区| 亚洲男同1069视频| 日韩你懂的电影在线观看| 蜜桃视频第一区免费观看| 理论片日本一区| 91年精品国产| 日本视频一区二区三区| 欧美国产亚洲另类动漫| 欧美日韩视频在线观看一区二区三区 | www.性欧美| 亚洲成av人片一区二区三区| 亚洲精品在线一区二区| 夜夜嗨av一区二区三区| 久久精工是国产品牌吗| 亚洲国产精品久久久久婷婷884| 免费成人在线播放| 亚洲一区二区视频在线| 夜夜嗨av一区二区三区网页| 国产精品美女视频| 久久婷婷一区二区三区| 欧美v亚洲v综合ⅴ国产v| 制服丝袜亚洲播放| 日韩一区二区免费在线观看| 欧美一区二区三区四区视频| 欧美日韩一卡二卡三卡| 亚洲第一会所有码转帖| 午夜久久久影院| 日本伊人色综合网| 国产在线一区观看| 中文字幕一区二区日韩精品绯色| 高清在线观看日韩| 91浏览器打开| 国产精品久久免费看| 国产亚洲自拍一区| 9l国产精品久久久久麻豆| 日韩一二在线观看| 日韩高清在线不卡| 欧美zozo另类异族| 欧美在线你懂的| 91丨porny丨国产入口| 91福利在线播放| 欧美一级视频精品观看| 91麻豆精品91久久久久同性| 一区二区在线电影| 天堂一区二区在线| 琪琪久久久久日韩精品| 蜜桃av噜噜一区二区三区小说| 日韩一区二区电影在线| 欧美日韩成人激情| 精品国产一二三区| 亚洲日本中文字幕区| 日本免费在线视频不卡一不卡二| 欧美色老头old∨ideo| 欧美伦理视频网站| 国产日韩欧美高清| 亚洲国产日韩在线一区模特| 免费观看成人av| 国产精品视频线看| 午夜激情综合网| 99综合电影在线视频| 久久精品噜噜噜成人88aⅴ| 黑人精品欧美一区二区蜜桃| 亚洲视频一二三| 99视频一区二区| 日本一区二区三级电影在线观看 | 国产精品国产三级国产| 亚洲va欧美va国产va天堂影院| 久久精品视频免费| 免费在线欧美视频| 欧美性猛交一区二区三区精品 | 国产成人精品午夜视频免费| 3751色影院一区二区三区| 91传媒视频在线播放| 国产日产欧美精品一区二区三区| 在线综合亚洲欧美在线视频| 欧美日韩一二三| 亚洲精品日韩专区silk| 国产成人在线网站| 91在线免费看| 亚洲精品综合在线| 日本少妇一区二区| 麻豆91精品91久久久的内涵| 精品日韩成人av| 国内精品久久久久影院色| 国产福利一区二区| 国产精品一区二区久激情瑜伽 | 26uuu国产在线精品一区二区| 中文字幕一区二区三| 欧美日韩亚州综合| 国产一区在线观看麻豆| 欧美国产1区2区| 欧美放荡的少妇| 免费在线一区观看| yourporn久久国产精品| 亚洲欧美日本韩国| 欧美成人bangbros| 色综合天天综合色综合av| 亚洲电影在线免费观看| 国产欧美日韩视频一区二区 | 中文字幕一区二区在线观看| 亚洲一区电影777| 国产精品高清亚洲| 高清不卡一区二区| 日韩电影在线观看网站| 中文字幕亚洲欧美在线不卡| 日韩欧美在线综合网| 欧美日韩久久一区二区| 91亚洲精品久久久蜜桃| 久久精品夜色噜噜亚洲aⅴ| 麻豆国产一区二区| 美女视频黄 久久| 日日摸夜夜添夜夜添国产精品| 成人久久视频在线观看| 国产大陆精品国产| 韩国av一区二区| 国产精品 欧美精品| 国产综合色精品一区二区三区| 日韩精品一区国产麻豆| 天天av天天翘天天综合网色鬼国产| 91老司机福利 在线| 欧美日韩精品系列| 欧美一区二区视频免费观看| 91精品国产综合久久婷婷香蕉| 日韩福利视频导航| 日韩av一区二| 国产伦理精品不卡| 不卡一区二区三区四区| 色丁香久综合在线久综合在线观看| 一区二区三区日韩精品| 亚洲成人精品影院| 国产成人免费av在线| 99精品欧美一区| 日本精品一级二级| 精品国产凹凸成av人导航| 国产伦理精品不卡| 色婷婷香蕉在线一区二区| 欧美日韩你懂得| 成人免费小视频| 国模娜娜一区二区三区| 欧美伦理视频网站| 亚洲精品v日韩精品| 国产一区二区三区高清播放| 日本丶国产丶欧美色综合| 国产精品1区2区| 日韩女优电影在线观看| 欧美日韩性生活| 久久国产尿小便嘘嘘| 国产一区激情在线| 欧美大片在线观看一区| 久久99久久99| 日韩电影在线免费看| 色视频成人在线观看免| 亚洲精品久久7777| 久久久久久毛片| 91精品国产一区二区三区蜜臀| 国产性天天综合网| 99re热这里只有精品视频| 91精品国产麻豆国产自产在线 | 亚洲蜜臀av乱码久久精品| 日韩三级视频中文字幕| 99九九99九九九视频精品| 久久精品久久久精品美女| 五月天激情综合| 夜夜操天天操亚洲| 综合久久国产九一剧情麻豆| 欧美激情在线一区二区| 国产精品亚洲一区二区三区在线 | 欧美一区二区视频网站| 亚洲第一成人在线| 亚洲国产你懂的| 亚洲国产中文字幕| 欧美蜜桃一区二区三区| 色综合一个色综合亚洲| 97国产一区二区| 91丨九色丨黑人外教| jizzjizzjizz欧美| 亚洲乱码中文字幕| 久久国产综合精品| 美女视频一区在线观看| 日本美女视频一区二区| 日本亚洲天堂网| 成人手机在线视频| 91激情五月电影| 欧美高清www午色夜在线视频| 久久成人久久爱| 成人毛片视频在线观看| 亚洲一区二区不卡免费| 日产国产高清一区二区三区| 久久色视频免费观看| 一区二区三区在线不卡| 韩国欧美一区二区| 欧美美女直播网站| 中文字幕一区视频|