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

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

?? exec.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
    }    /* check end of list */    if (tb1 != tb) {        printf("ERROR: jmp_list from 0x%08lx\n", (long)tb);    }}#endif/* invalidate one TB */static inline void tb_remove(TranslationBlock **ptb, TranslationBlock *tb,                             int next_offset){    TranslationBlock *tb1;    for(;;) {        tb1 = *ptb;        if (tb1 == tb) {            *ptb = *(TranslationBlock **)((char *)tb1 + next_offset);            break;        }        ptb = (TranslationBlock **)((char *)tb1 + next_offset);    }}static inline void tb_page_remove(TranslationBlock **ptb, TranslationBlock *tb){    TranslationBlock *tb1;    unsigned int n1;    for(;;) {        tb1 = *ptb;        n1 = (long)tb1 & 3;        tb1 = (TranslationBlock *)((long)tb1 & ~3);        if (tb1 == tb) {            *ptb = tb1->page_next[n1];            break;        }        ptb = &tb1->page_next[n1];    }}static inline void tb_jmp_remove(TranslationBlock *tb, int n){    TranslationBlock *tb1, **ptb;    unsigned int n1;    ptb = &tb->jmp_next[n];    tb1 = *ptb;    if (tb1) {        /* find tb(n) in circular list */        for(;;) {            tb1 = *ptb;            n1 = (long)tb1 & 3;            tb1 = (TranslationBlock *)((long)tb1 & ~3);            if (n1 == n && tb1 == tb)                break;            if (n1 == 2) {                ptb = &tb1->jmp_first;            } else {                ptb = &tb1->jmp_next[n1];            }        }        /* now we can suppress tb(n) from the list */        *ptb = tb->jmp_next[n];        tb->jmp_next[n] = NULL;    }}/* reset the jump entry 'n' of a TB so that it is not chained to   another TB */static inline void tb_reset_jump(TranslationBlock *tb, int n){    tb_set_jmp_target(tb, n, (unsigned long)(tb->tc_ptr + tb->tb_next_offset[n]));}static inline void tb_phys_invalidate(TranslationBlock *tb, unsigned int page_addr){    CPUState *env;    PageDesc *p;    unsigned int h, n1;    target_ulong phys_pc;    TranslationBlock *tb1, *tb2;    /* remove the TB from the hash list */    phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);    h = tb_phys_hash_func(phys_pc);    tb_remove(&tb_phys_hash[h], tb,              offsetof(TranslationBlock, phys_hash_next));    /* remove the TB from the page list */    if (tb->page_addr[0] != page_addr) {        p = page_find(tb->page_addr[0] >> TARGET_PAGE_BITS);        tb_page_remove(&p->first_tb, tb);        invalidate_page_bitmap(p);    }    if (tb->page_addr[1] != -1 && tb->page_addr[1] != page_addr) {        p = page_find(tb->page_addr[1] >> TARGET_PAGE_BITS);        tb_page_remove(&p->first_tb, tb);        invalidate_page_bitmap(p);    }    tb_invalidated_flag = 1;    /* remove the TB from the hash list */    h = tb_jmp_cache_hash_func(tb->pc);    for(env = first_cpu; env != NULL; env = env->next_cpu) {        if (env->tb_jmp_cache[h] == tb)            env->tb_jmp_cache[h] = NULL;    }    /* suppress this TB from the two jump lists */    tb_jmp_remove(tb, 0);    tb_jmp_remove(tb, 1);    /* suppress any remaining jumps to this TB */    tb1 = tb->jmp_first;    for(;;) {        n1 = (long)tb1 & 3;        if (n1 == 2)            break;        tb1 = (TranslationBlock *)((long)tb1 & ~3);        tb2 = tb1->jmp_next[n1];        tb_reset_jump(tb1, n1);        tb1->jmp_next[n1] = NULL;        tb1 = tb2;    }    tb->jmp_first = (TranslationBlock *)((long)tb | 2); /* fail safe */    tb_phys_invalidate_count++;}static inline void set_bits(uint8_t *tab, int start, int len){    int end, mask, end1;    end = start + len;    tab += start >> 3;    mask = 0xff << (start & 7);    if ((start & ~7) == (end & ~7)) {        if (start < end) {            mask &= ~(0xff << (end & 7));            *tab |= mask;        }    } else {        *tab++ |= mask;        start = (start + 8) & ~7;        end1 = end & ~7;        while (start < end1) {            *tab++ = 0xff;            start += 8;        }        if (start < end) {            mask = ~(0xff << (end & 7));            *tab |= mask;        }    }}static void build_page_bitmap(PageDesc *p){    int n, tb_start, tb_end;    TranslationBlock *tb;    p->code_bitmap = qemu_malloc(TARGET_PAGE_SIZE / 8);    if (!p->code_bitmap)        return;    memset(p->code_bitmap, 0, TARGET_PAGE_SIZE / 8);    tb = p->first_tb;    while (tb != NULL) {        n = (long)tb & 3;        tb = (TranslationBlock *)((long)tb & ~3);        /* NOTE: this is subtle as a TB may span two physical pages */        if (n == 0) {            /* NOTE: tb_end may be after the end of the page, but               it is not a problem */            tb_start = tb->pc & ~TARGET_PAGE_MASK;            tb_end = tb_start + tb->size;            if (tb_end > TARGET_PAGE_SIZE)                tb_end = TARGET_PAGE_SIZE;        } else {            tb_start = 0;            tb_end = ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);        }        set_bits(p->code_bitmap, tb_start, tb_end - tb_start);        tb = tb->page_next[n];    }}#ifdef TARGET_HAS_PRECISE_SMCstatic void tb_gen_code(CPUState *env,                        target_ulong pc, target_ulong cs_base, int flags,                        int cflags){    TranslationBlock *tb;    uint8_t *tc_ptr;    target_ulong phys_pc, phys_page2, virt_page2;    int code_gen_size;    phys_pc = get_phys_addr_code(env, pc);    tb = tb_alloc(pc);    if (!tb) {        /* flush must be done */        tb_flush(env);        /* cannot fail at this point */        tb = tb_alloc(pc);    }    tc_ptr = code_gen_ptr;    tb->tc_ptr = tc_ptr;    tb->cs_base = cs_base;    tb->flags = flags;    tb->cflags = cflags;    cpu_gen_code(env, tb, &code_gen_size);    code_gen_ptr = (void *)(((unsigned long)code_gen_ptr + code_gen_size + CODE_GEN_ALIGN - 1) & ~(CODE_GEN_ALIGN - 1));    /* check next page if needed */    virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;    phys_page2 = -1;    if ((pc & TARGET_PAGE_MASK) != virt_page2) {        phys_page2 = get_phys_addr_code(env, virt_page2);    }    tb_link_phys(tb, phys_pc, phys_page2);}#endif/* invalidate all TBs which intersect with the target physical page   starting in range [start;end[. NOTE: start and end must refer to   the same physical page. 'is_cpu_write_access' should be true if called   from a real cpu write access: the virtual CPU will exit the current   TB if code is modified inside this TB. */void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,                                   int is_cpu_write_access){    int n, current_tb_modified, current_tb_not_found, current_flags;    CPUState *env = cpu_single_env;    PageDesc *p;    TranslationBlock *tb, *tb_next, *current_tb, *saved_tb;    target_ulong tb_start, tb_end;    target_ulong current_pc, current_cs_base;    p = page_find(start >> TARGET_PAGE_BITS);    if (!p)        return;    if (!p->code_bitmap &&        ++p->code_write_count >= SMC_BITMAP_USE_THRESHOLD &&        is_cpu_write_access) {        /* build code bitmap */        build_page_bitmap(p);    }    /* we remove all the TBs in the range [start, end[ */    /* XXX: see if in some cases it could be faster to invalidate all the code */    current_tb_not_found = is_cpu_write_access;    current_tb_modified = 0;    current_tb = NULL; /* avoid warning */    current_pc = 0; /* avoid warning */    current_cs_base = 0; /* avoid warning */    current_flags = 0; /* avoid warning */    tb = p->first_tb;    while (tb != NULL) {        n = (long)tb & 3;        tb = (TranslationBlock *)((long)tb & ~3);        tb_next = tb->page_next[n];        /* NOTE: this is subtle as a TB may span two physical pages */        if (n == 0) {            /* NOTE: tb_end may be after the end of the page, but               it is not a problem */            tb_start = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);            tb_end = tb_start + tb->size;        } else {            tb_start = tb->page_addr[1];            tb_end = tb_start + ((tb->pc + tb->size) & ~TARGET_PAGE_MASK);        }        if (!(tb_end <= start || tb_start >= end)) {#ifdef TARGET_HAS_PRECISE_SMC            if (current_tb_not_found) {                current_tb_not_found = 0;                current_tb = NULL;                if (env->mem_write_pc) {                    /* now we have a real cpu fault */                    current_tb = tb_find_pc(env->mem_write_pc);                }            }            if (current_tb == tb &&                !(current_tb->cflags & CF_SINGLE_INSN)) {                /* If we are modifying the current TB, we must stop                its execution. We could be more precise by checking                that the modification is after the current PC, but it                would require a specialized function to partially                restore the CPU state */                current_tb_modified = 1;                cpu_restore_state(current_tb, env,                                  env->mem_write_pc, NULL);#if defined(TARGET_I386)                current_flags = env->hflags;                current_flags |= (env->eflags & (IOPL_MASK | TF_MASK | VM_MASK));                current_cs_base = (target_ulong)env->segs[R_CS].base;                current_pc = current_cs_base + env->eip;#else#error unsupported CPU#endif            }#endif /* TARGET_HAS_PRECISE_SMC */            /* we need to do that to handle the case where a signal               occurs while doing tb_phys_invalidate() */            saved_tb = NULL;            if (env) {                saved_tb = env->current_tb;                env->current_tb = NULL;            }            tb_phys_invalidate(tb, -1);            if (env) {                env->current_tb = saved_tb;                if (env->interrupt_request && env->current_tb)                    cpu_interrupt(env, env->interrupt_request);            }        }        tb = tb_next;    }#if !defined(CONFIG_USER_ONLY)    /* if no code remaining, no need to continue to use slow writes */    if (!p->first_tb) {        invalidate_page_bitmap(p);        if (is_cpu_write_access) {            tlb_unprotect_code_phys(env, start, env->mem_write_vaddr);        }    }#endif#ifdef TARGET_HAS_PRECISE_SMC    if (current_tb_modified) {        /* we generate a block containing just the instruction           modifying the memory. It will ensure that it cannot modify           itself */        env->current_tb = NULL;        tb_gen_code(env, current_pc, current_cs_base, current_flags,                    CF_SINGLE_INSN);        cpu_resume_from_signal(env, NULL);    }#endif}/* len must be <= 8 and start must be a multiple of len */static inline void tb_invalidate_phys_page_fast(target_ulong start, int len){    PageDesc *p;    int offset, b;#if 0    if (1) {        if (loglevel) {            fprintf(logfile, "modifying code at 0x%x size=%d EIP=%x PC=%08x\n",                   cpu_single_env->mem_write_vaddr, len,                   cpu_single_env->eip,                   cpu_single_env->eip + (long)cpu_single_env->segs[R_CS].base);        }    }#endif    p = page_find(start >> TARGET_PAGE_BITS);    if (!p)        return;    if (p->code_bitmap) {        offset = start & ~TARGET_PAGE_MASK;        b = p->code_bitmap[offset >> 3] >> (offset & 7);        if (b & ((1 << len) - 1))            goto do_invalidate;    } else {    do_invalidate:        tb_invalidate_phys_page_range(start, start + len, 1);    }}#if !defined(CONFIG_SOFTMMU)static void tb_invalidate_phys_page(target_ulong addr,                                    unsigned long pc, void *puc){    int n, current_flags, current_tb_modified;    target_ulong current_pc, current_cs_base;    PageDesc *p;    TranslationBlock *tb, *current_tb;#ifdef TARGET_HAS_PRECISE_SMC    CPUState *env = cpu_single_env;#endif    addr &= TARGET_PAGE_MASK;    p = page_find(addr >> TARGET_PAGE_BITS);    if (!p)        return;    tb = p->first_tb;    current_tb_modified = 0;    current_tb = NULL;    current_pc = 0; /* avoid warning */    current_cs_base = 0; /* avoid warning */    current_flags = 0; /* avoid warning */#ifdef TARGET_HAS_PRECISE_SMC    if (tb && pc != 0) {        current_tb = tb_find_pc(pc);    }#endif    while (tb != NULL) {        n = (long)tb & 3;        tb = (TranslationBlock *)((long)tb & ~3);#ifdef TARGET_HAS_PRECISE_SMC        if (current_tb == tb &&            !(current_tb->cflags & CF_SINGLE_INSN)) {                /* If we are modifying the current TB, we must stop                   its execution. We could be more precise by checking                   that the modification is after the current PC, but it                   would require a specialized function to partially                   restore the CPU state */            current_tb_modified = 1;            cpu_restore_state(current_tb, env, pc, puc);#if defined(TARGET_I386)            current_flags = env->hflags;            current_flags |= (env->eflags & (IOPL_MASK | TF_MASK | VM_MASK));            current_cs_base = (target_ulong)env->segs[R_CS].base;            current_pc = current_cs_base + env->eip;#else#error unsupported CPU#endif        }#endif /* TARGET_HAS_PRECISE_SMC */        tb_phys_invalidate(tb, addr);        tb = tb->page_next[n];    }    p->first_tb = NULL;#ifdef TARGET_HAS_PRECISE_SMC    if (current_tb_modified) {        /* we generate a block containing just the instruction           modifying the memory. It will ensure that it cannot modify

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一二三区| 日本一区二区三区久久久久久久久不 | 91在线国产福利| 国产三区在线成人av| 国产成人啪免费观看软件| 国产日产亚洲精品系列| 久久蜜桃av一区精品变态类天堂| 成人av中文字幕| 亚洲大型综合色站| 久久综合国产精品| 在线观看91视频| 久久国内精品自在自线400部| 国产精品美女久久久久久2018| 欧美理论电影在线| 成人毛片视频在线观看| 亚洲福中文字幕伊人影院| 久久久久9999亚洲精品| 国产午夜精品一区二区三区嫩草| 国产精品三级电影| 国产精品久久久久一区| 日韩三级高清在线| 欧美日韩一区久久| 99久久免费视频.com| 色综合久久中文综合久久97| 轻轻草成人在线| 日韩伦理免费电影| 久久久久久久久免费| 国产欧美精品一区二区色综合朱莉| 国产亚洲污的网站| 1024成人网| 久久久亚洲高清| 中文字幕一区二区三| 亚洲国产成人va在线观看天堂| 日本中文字幕一区| 天天影视涩香欲综合网| 亚洲一区二区在线视频| 日韩理论在线观看| 日韩中文字幕亚洲一区二区va在线| 成人一道本在线| 色天使色偷偷av一区二区| 欧美一区二区网站| 欧美日韩夫妻久久| 欧美在线观看禁18| 精品久久久久久久人人人人传媒| 日韩亚洲欧美高清| 国产区在线观看成人精品| 亚洲激情欧美激情| 一区二区不卡在线播放| 亚洲六月丁香色婷婷综合久久 | 性欧美疯狂xxxxbbbb| 日本成人中文字幕| 成人国产精品视频| 日韩一区二区中文字幕| 国产精品毛片无遮挡高清| 天堂va蜜桃一区二区三区| 大白屁股一区二区视频| 欧美一卡二卡在线| 亚洲免费在线视频| 一区二区三区 在线观看视频| 美女视频网站久久| 国产一区二区三区观看| 韩国一区二区在线观看| 国产一区二区三区免费看| 一本色道久久综合亚洲精品按摩| 精品成人一区二区三区四区| 日本大胆欧美人术艺术动态| 成人av在线一区二区| 日韩欧美一区电影| av成人老司机| 91高清视频在线| 夜夜嗨av一区二区三区中文字幕 | 欧美日韩国产综合视频在线观看| 国产天堂亚洲国产碰碰| 丝袜脚交一区二区| 色综合天天综合给合国产| 99久久久国产精品| 久久一区二区三区四区| 亚洲第四色夜色| 色综合久久天天综合网| 国产欧美一区二区三区在线老狼| 麻豆精品一区二区| 欧美色图第一页| 亚洲摸摸操操av| 粉嫩aⅴ一区二区三区四区五区| 99riav久久精品riav| 久久久www成人免费毛片麻豆 | 欧美性色黄大片| 日韩欧美一二区| 亚洲国产精品久久人人爱| av在线不卡免费看| 国产欧美日韩精品a在线观看| 久久丁香综合五月国产三级网站| 欧美日韩一区二区三区在线看| 亚洲欧美日韩小说| 99久久精品久久久久久清纯| 欧美国产成人精品| 亚洲国产日韩在线一区模特| 91亚洲国产成人精品一区二三| 欧美日韩电影在线播放| 亚洲国产精品人人做人人爽| 欧美在线一区二区三区| 一区二区三区国产精品| 色婷婷亚洲综合| 亚洲精品成a人| 在线亚洲高清视频| 一区二区三区在线观看欧美| 色婷婷久久一区二区三区麻豆| 日韩一区在线免费观看| 91免费视频观看| 亚洲免费观看视频| 在线欧美小视频| 亚洲福利一区二区| 欧美高清dvd| 美洲天堂一区二卡三卡四卡视频| 日韩欧美国产综合在线一区二区三区 | 亚洲成人福利片| 欧美日本不卡视频| 日韩av二区在线播放| 欧美成人精品二区三区99精品| 久久爱另类一区二区小说| 久久久久久久综合色一本| 国产suv精品一区二区6| 自拍偷拍欧美精品| 欧美日韩在线播| 黄页网站大全一区二区| 中文字幕av不卡| 在线亚洲一区二区| 日本不卡一区二区三区| 久久中文字幕电影| 久久久国际精品| 91在线视频在线| 亚洲aⅴ怡春院| 亚洲最新视频在线观看| 精品国产一区二区三区av性色| 欧美大片免费久久精品三p| 欧美在线播放高清精品| 色噜噜久久综合| 成人的网站免费观看| 国产一区二区三区| 男女性色大片免费观看一区二区 | 中文字幕不卡在线播放| 91精品国产欧美一区二区18| 91麻豆精品国产自产在线观看一区 | 日本一区二区不卡视频| 丝袜亚洲另类丝袜在线| 国产激情一区二区三区四区| 欧美日韩一级二级三级| 欧美精品在线视频| 9191国产精品| 欧美军同video69gay| 日韩手机在线导航| 国产欧美日本一区视频| 亚洲自拍另类综合| 日韩va欧美va亚洲va久久| 麻豆91在线看| 国产精品一区二区果冻传媒| 3751色影院一区二区三区| 成人av动漫网站| 不卡的电影网站| 亚洲国产另类精品专区| 亚洲国产精品久久人人爱| 亚洲女同一区二区| 午夜欧美大尺度福利影院在线看| 日本欧美一区二区在线观看| 国产呦精品一区二区三区网站| 国产iv一区二区三区| 在线视频你懂得一区二区三区| 欧美一区二区久久| 国产精品全国免费观看高清 | 一区二区三区**美女毛片| 欧美va在线播放| 久久先锋资源网| 欧美在线免费播放| 国产成人午夜高潮毛片| 日本伊人色综合网| 亚洲人成网站影音先锋播放| 精品国产一区二区三区久久久蜜月| 在线日韩av片| 9l国产精品久久久久麻豆| 国产自产v一区二区三区c| 日韩国产精品91| 亚洲高清久久久| 一区二区三区四区在线免费观看| 久久精品亚洲精品国产欧美kt∨| 在线91免费看| 欧美日韩综合在线免费观看| 99久久婷婷国产综合精品电影| 国产超碰在线一区| 九一久久久久久| 精品国产污污免费网站入口 | 国产欧美日韩精品一区| 26uuuu精品一区二区| 欧美一级在线观看| 欧美片网站yy| 欧美日韩在线观看一区二区| 在线视频一区二区免费| 在线一区二区三区| 在线视频你懂得一区| 欧美亚洲综合另类| 色噜噜久久综合|