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

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

?? flatmem.c

?? realview22.rar
?? C
?? 第 1 頁 / 共 4 頁
字號:
      /* top->p_ABus->bus_BusyUntil++; */
  }

  if ((address >= top->LowestPeripheralAddress) &&
      (address <= top->HighestPeripheralAddress) &&
      (rv = peripheral_access(handle,address,data,acc)) != -2)
  {
      return rv;
  }

  pageno=address>>PAGEBITS;
  page=top->mem.page[pageno];

  if (page==NULL) {
      top->mem.page[pageno]=page=NewPage(top,address);
  }
  offset = address & OFFSETBITS_WORD;
  ptr=(ARMword *)((char *)(page->memory)+offset);


  if (acc==acc_LoadInstrS) {
    *data=*ptr;
    return 1;
  } else if (acc_MREQ(acc)) {
    if (acc_READ(acc)) {
      switch (acc & WIDTH_MASK) {
      case BITS_8:              /* read byte */
        if (HostEndian!=top->read_bigend) address^=3;
        *data = ((unsigned8 *)ptr)[address & 3];
        break;
        
      case BITS_16: {           /* read half-word */
        /* extract half-word */
#ifndef HOST_HAS_NO_16BIT_TYPE
        /*
         * unsigned16 is always a 16-bit type, but if there is no native
         * 16-bit type (e.g. ARM!) then we can do something a bit more
         * cunning.
         */
        if (HostEndian!=top->read_bigend) address^=2;
        *data = *((unsigned16 *)(((char *)ptr)+(address & 2)));
#else
        unsigned32 datum;
        datum=*ptr;
        if (HostEndian!=top->read_bigend) address^=2;
        if (address & 2) datum<<=16;
        *data = (datum>>16);
#endif
      }
        break;
        
      case BITS_32:             /* read word */
        *data=*ptr;
        break;

      case BITS_64:             /* read dword */
        *data=*ptr;
        if ((offset+4) & OFFSETBITS_WORD) 
        {
            data[1]=ptr[1];
            return 2;
        }
        break;

      default:
          return_PERIP_DABORT;
      }
    } else {
      switch (acc & WIDTH_MASK) {
        /* extract byte */
      case BITS_8:              /* write_byte */
        if (HostEndian!=top->write_bigend) address^=3;
        ((unsigned8 *)ptr)[address & 3]=(unsigned8)(*data);
        break;
        
      case BITS_16:             /* write half-word */
        if (HostEndian!=top->write_bigend) address^=2;
        *((unsigned16 *)(((char *)ptr)+(address & 2))) = (unsigned16)(*data);
        break;

      case BITS_32:             /* write word */
        *ptr=*data;
        break;

      case BITS_64:             /* write dword */
        *ptr=*data;
        if ((offset+4) &OFFSETBITS_WORD) 
        {
            ptr[1]=data[1];
            return 2;
        }
        break;

      default:
          return_PERIP_DABORT;
      }
    }                           /* internal cycle */
  }

  return 1;
}



#ifdef PIPELINED
/*
 * This function gets called before every memory access with the address and
 * cycle type for the next cycle.
 */
static void NextCycle(void *handle,
                     ARMword address,
                     ARMul_acc acc)
{
  /* armflat does not make use of pipelined addresses */
  UNUSEDARG(handle); UNUSEDARG(address); UNUSEDARG(acc);
}
#endif /* PIPELINED */


#if 1
# define CHECKTOTAL
#else
      /* ... This only works if we are called for every cycle ... */
# define CHECKTOTAL \
      assert(top->p_ABus->bus_BusyUntil == \
             (top->cycles.NumNcycles + top->cycles.NumScycles +\
              top->cycles.NumIcycles+top->cycles.NumCcycles));
#endif

/*
 * This is the most basic memory access function - an ARM610/ARM710 interface.
 *
 * Optimised for word loads and idle cycles
 */
static int MemAccessCached(void *handle,
                           ARMword address,
                           ARMword *data,
                           ARMul_acc acc)
{
  toplevel *top=(toplevel *)handle;
  unsigned int pageno;
  mempage *page;
  ARMword *ptr;
  ARMword offset;
  int rv;

  if (acc_ACCOUNT(acc)) {
      COUNTCYCLES(top->cycles,acc);
      /* top->p_ABus->bus_BusyUntil++; */
      CHECKTOTAL
  }

  if ((address >= top->LowestPeripheralAddress) &&
      (address <= top->HighestPeripheralAddress) &&
      (rv = peripheral_access(handle,address,data,acc)) != -2)
  {
      return rv;
  }


  if (ACCESS_IS_IDLE(acc))
      return 1;

  pageno=address>>PAGEBITS;
  page=top->mem.page[pageno];

  /* !TODO: if (page==dummyPage && ACCESS_IS_WRITE)... */
  if (page==NULL) 
  {
    top->mem.page[pageno]=page=NewPage(top,address);
  }
  offset = address & OFFSETBITS_WORD;
  ptr=(ARMword *)((char *)(page->memory)+offset);

  if (acc==acc_LoadWordS) {
    *data=*ptr;
    return 1;
  } else if (acc_MREQ(acc)) {
    if (acc_READ(acc)) {
      switch (acc & WIDTH_MASK) {
      case BITS_8:              /* read byte */
        if (HostEndian!=top->read_bigend) address^=3;
        *data = ((unsigned8 *)ptr)[address & 3];
        break;
        
      case BITS_16: {           /* read half-word */
        /* extract half-word */
#ifndef HOST_HAS_NO_16BIT_TYPE
        /*
         * unsigned16 is always a 16-bit type, but if there is no native
         * 16-bit type (e.g. ARM!) then we can do something a bit more
         * cunning.
         */
        if (HostEndian!=top->read_bigend) address^=2;
        *data = *((unsigned16 *)(((char *)ptr)+(address & 2)));
#else
        unsigned32 datum;
        datum=*ptr;
        if (HostEndian!=top->read_bigend) address^=2;
        if (address & 2) datum<<=16;
        *data = (datum>>16);
#endif
      }
        break;
        
      case BITS_32:             /* read word */
        *data=*ptr;
        break;

      case BITS_64:             /* read dword */
        *data=*ptr;
        if ((offset+4) & OFFSETBITS_WORD) 
        {
            data[1]=ptr[1];
            return 2;
        }
        break;

      default:
          return_PERIP_DABORT;
      }
    } else {
      switch (acc & WIDTH_MASK) {
        /* extract byte */
      case BITS_8:              /* write_byte */
        if (HostEndian!=top->write_bigend) address^=3;
        ((unsigned8 *)ptr)[address & 3]=(unsigned8)(*data);
        break;
        
      case BITS_16:             /* write half-word */
        if (HostEndian!=top->write_bigend) address^=2;
        *((unsigned16 *)(((char *)ptr)+(address & 2))) = (unsigned16)(*data);
        break;

      case BITS_32:             /* write word */
        *ptr=*data;
        break;


      case BITS_64:             /* write dword */
        *ptr=*data;
        if ((offset+4) &OFFSETBITS_WORD) 
        {
            ptr[1]=data[1];
            return 2;
        }
        break;

      default:
          return_PERIP_DABORT;
      }
    }                           /* internal cycle */
  }

  return 1;
}

/*
 * Same function, but optimised for Thumb accesses
 */
static int MemAccessThumb(void *handle,
                          ARMword address,
                          ARMword *data,
                          ARMul_acc acc)
{
  toplevel *top=(toplevel *)handle;
  unsigned int pageno;
  mempage *page;
  ARMword *ptr;
  ARMword offset;
  int rv;


  if (acc_ACCOUNT(acc)) {
      COUNTCYCLES(top->cycles,acc);
      /* top->p_ABus->bus_BusyUntil++; */
      CHECKTOTAL
  }

  if ((address >= top->LowestPeripheralAddress) &&
      (address <= top->HighestPeripheralAddress) &&
      (rv = peripheral_access(handle,address,data,acc)) != -2)
  {
      return rv;
  }

  pageno=address>>PAGEBITS;
  page=top->mem.page[pageno];

  if (page==NULL) {
    top->mem.page[pageno]=page=NewPage(top,address);
  }
  offset = address & OFFSETBITS_WORD;
  ptr=(ARMword *)((char *)(page->memory)+offset);
  switch (acc & (ACCESS_SIZE_MASK | ACCESS_IDLE | ACCESS_WRITE) ) 
    {
      case BITS_8:              /* read byte */
        *data = ((unsigned8 *)ptr)[(address ^ top->byteAddrXor) & 3];
        break;
        
      case BITS_16:           /* read half-word */
        *data = *((unsigned16 *)(((char *)ptr)+
                                 ((address ^ top->hwordAddrXor) & 2)));
        return 1;

      case BITS_32:             /* read word */
        *data=*ptr;
        return 1;

        /* This case should not be needed for MemAccessThumb,
        * but I intend to merge that with MemAccessCached. */
      case BITS_64:             /* read dword */
        *data=*ptr;
        if ((offset+4) & OFFSETBITS_WORD) 
        {
            data[1]=ptr[1];
            return 2;
        }
        break;


      case BITS_8 | ACCESS_WRITE:              /* write_byte */
        if (HostEndian!=top->write_bigend) address^=3;
        ((unsigned8 *)ptr)[address & 3]=(unsigned8)(*data);
        break;
        
      case BITS_16 | ACCESS_WRITE:             /* write half-word */
        if (HostEndian!=top->write_bigend) address^=2;
        *((unsigned16 *)(((char *)ptr)+(address & 2))) = (unsigned16)(*data);
        break;

      case BITS_32 | ACCESS_WRITE:             /* write word */
        *ptr=*data;
        break;

      case BITS_64  | ACCESS_WRITE:             /* write dword */
        *ptr=*data;
        if ((offset+4) &OFFSETBITS_WORD) 
        {
            ptr[1]=data[1];
            return 2; /* PERIP_OK2 */
        }
        break;

      case BITS_8 | ACCESS_IDLE:
      case BITS_16 | ACCESS_IDLE:
      case BITS_32 | ACCESS_IDLE:
      case BITS_64 | ACCESS_IDLE:
      case ACCESS_IDLE:
        return 1;
        
      default:
          return_PERIP_DABORT;
    }
  return 1;
}

#ifdef MEM_ACCESS2_DISTINCT /* F */
/*
 * This function is used by ARM8. Effectively we model a memory
 * system which can return two words per cycle.
 * The differences between this an a normal 64-bit bus (ARM10, XScale)
 * are
 * (1) 64-bit fetches need not be DWORD aligned.
 * (2) A non-aligned fetch just below a 64k-boundary may return just one word!
 */

static int MemAccess2(void *handle,
                      ARMword address,
                      ARMword *data,ARMword *data2,
                      ARMul_acc acc)
{
  toplevel *top=(toplevel *)handle;
  unsigned int pageno;
  mempage *page;
  ARMword *ptr;
  ARMword offset;
  int words=1;
  int rv;

  if (acc_ACCOUNT(acc)) {
      COUNTCYCLES(top->cycles,acc);
      /* top->p_ABus->bus_BusyUntil++; */
      CHECKTOTAL
  }

  if ((address >= top->LowestPeripheralAddress) &&
      (address <= top->HighestPeripheralAddress) &&
      (rv = peripheral_access(handle,address,data,acc)) != -2)
  {
      return rv;
  }

  pageno=address>>PAGEBITS;
  page=top->mem.page[pageno];

  if (page==NULL) {
      top->mem.page[pageno]=page=NewPage(top,address);
  }
  offset = address & OFFSETBITS_WORD;
  ptr=(ARMword *)((char *)(page->memory)+offset);

  if (acc_MREQ(acc)) {
    if (acc_READ(acc)) {
      switch (acc & WIDTH_MASK) {
      case BITS_8:              /* read byte */
        if (HostEndian!=top->read_bigend) address^=3;
        *data = ((unsigned8 *)ptr)[address & 3];
        break;
        
      case BITS_16: {           /* read half-word */
        /* extract half-word */
        if (HostEndian!=top->read_bigend) address^=2;
        *data = *((unsigned16 *)(((char *)ptr)+(address & 2)));
      }
        break;
        
      case BITS_32:             /* read word */
        *data=*ptr;
        break;

      case BITS_64:             /* read two words */
        *data=*ptr;
        if ((offset+4) & OFFSETBITS_WORD) { *data2=ptr[1]; words=2; }
        break;

      default:
          return_PERIP_DABORT;
      }
    } else {
      switch (acc & WIDTH_MASK) {
        /* extract byte */
      case BITS_8:              /* write_byte */
        if (HostEndian!=top->write_bigend) address^=3;
        ((unsigned8 *)ptr)[address & 3]=(unsigned8)(*data);
        break;
        
      case BITS_16:             /* write half-word */
        if (HostEndian!=top->write_bigend) address^=2;
        *((unsigned16 *)(((char *)ptr)+(address & 2)))=(unsigned16)(*data);
        break;

      case BITS_32:             /* write word */
        *ptr=*data;
        break;

      default:
          return_PERIP_DABORT;
      }
    }                           /* internal cycle */
  }

  return words;
}
#endif


/*
 * A memory model used by StrongARM. This only accounts
 * for cycles on opcode boundaries - i.e. we allow both a data
 * and an instruction fetch on one cycle.
 */

static int MemAccessSA(void *handle,
                       ARMword address,
                       ARMword *data,
                       ARMul_acc acc)
{
  toplevel *top=(toplevel *)handle;
  unsigned int pageno;
  mempage *page;
  ARMword *ptr;
  ARMword offset;
  int rv;

  /*
   * On StrongARM there are four types of cycle - we'll reuse
   * the four cycle counters for these:
   *

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一本久久a久久精品综合麻豆| 一本到三区不卡视频| 亚洲国产精品久久人人爱| 中文字幕色av一区二区三区| 国产精品污www在线观看| 久久欧美一区二区| 国产目拍亚洲精品99久久精品| 久久综合色婷婷| 国产女人18水真多18精品一级做| 中文字幕av一区二区三区免费看 | 一区二区三区精密机械公司| 国产精品大尺度| 亚洲乱码国产乱码精品精小说| 亚洲一区免费在线观看| 日本不卡高清视频| 国产在线精品一区二区不卡了| 成人精品视频一区二区三区| 色8久久人人97超碰香蕉987| 欧美精品久久99久久在免费线 | 欧美日韩视频在线观看一区二区三区 | www.日本不卡| 日本韩国欧美一区二区三区| 欧美日韩国产系列| 日韩免费高清电影| 亚洲国产岛国毛片在线| 亚洲精品乱码久久久久久久久| 亚洲国产一区视频| 久久97超碰国产精品超碰| 粉嫩av一区二区三区在线播放| 91在线观看成人| 日韩一区二区免费在线电影 | 91日韩在线专区| 5月丁香婷婷综合| 国产欧美日韩在线观看| 一区二区三区国产精华| 精品无人区卡一卡二卡三乱码免费卡| 国产成人福利片| 在线播放一区二区三区| 国产精品久久久一本精品| 天天色天天爱天天射综合| 韩国欧美一区二区| 欧美日韩一区国产| **欧美大码日韩| 免费观看91视频大全| 色香蕉久久蜜桃| 久久婷婷国产综合国色天香| 一区二区三区久久| 成人一级视频在线观看| 精品国免费一区二区三区| 亚洲成人精品一区二区| 国产91精品久久久久久久网曝门| 69p69国产精品| 亚洲精品综合在线| 粉嫩av亚洲一区二区图片| 欧美成人精品1314www| 亚洲地区一二三色| 色噜噜狠狠一区二区三区果冻| 日本一区二区三区四区| 激情久久五月天| 日韩视频一区在线观看| 爽好久久久欧美精品| 色综合色狠狠天天综合色| 中文字幕亚洲综合久久菠萝蜜| 激情六月婷婷久久| 精品国产一区二区三区久久久蜜月 | 欧美性生交片4| 亚洲同性gay激情无套| 国产成人精品一区二区三区网站观看| 欧美一区二区女人| 日韩av在线播放中文字幕| 欧洲亚洲国产日韩| 一区二区视频免费在线观看| 成人精品国产一区二区4080| 久久精品一区四区| 成人黄色a**站在线观看| 日本一区二区三区高清不卡| 成人综合婷婷国产精品久久| 国产精品视频在线看| 99久久综合狠狠综合久久| 亚洲欧洲韩国日本视频| 成人黄色小视频| 亚洲伦理在线精品| 欧美色综合影院| 日韩精品1区2区3区| 欧美一区二区三区在线观看 | 国产酒店精品激情| 欧美国产日本韩| av动漫一区二区| 亚洲视频电影在线| 色综合久久久网| 午夜视频一区二区| 欧美videossexotv100| 国产福利91精品一区二区三区| 久久奇米777| 色综合天天狠狠| 亚洲mv在线观看| 精品国产一区二区三区久久影院| 国产成a人无v码亚洲福利| 亚洲欧美日韩国产手机在线 | 这里只有精品免费| 激情都市一区二区| 亚洲免费三区一区二区| 欧美美女一区二区| 国产激情一区二区三区四区| 亚洲欧美日韩久久| 欧美一级高清片| 成人激情电影免费在线观看| 亚洲精品ww久久久久久p站| 欧美一级日韩不卡播放免费| 国产宾馆实践打屁股91| 一区二区三区精品在线| 久久嫩草精品久久久精品一| 99精品久久只有精品| 日本aⅴ亚洲精品中文乱码| 国产欧美日韩精品a在线观看| 欧美性猛片xxxx免费看久爱| 国内精品国产成人国产三级粉色| 自拍偷拍国产精品| 欧美精品一区二区三区在线播放| 91久久香蕉国产日韩欧美9色| 久久精品国产一区二区三区免费看 | 国产精品乱子久久久久| 欧美日本在线一区| 成人黄色小视频| 六月丁香综合在线视频| 一区二区三区四区在线播放| 久久精品视频一区| 91精品国产综合久久久蜜臀图片| 成人免费va视频| 国产一区二区不卡老阿姨| 亚洲一级在线观看| 中文字幕综合网| 国产午夜精品美女毛片视频| 欧美日韩在线直播| 91久久精品日日躁夜夜躁欧美| 激情丁香综合五月| 麻豆精品久久精品色综合| 亚洲成人福利片| 亚洲精品菠萝久久久久久久| 国产精品二区一区二区aⅴ污介绍| 精品久久国产老人久久综合| 欧美中文字幕一二三区视频| 99精品视频一区二区三区| 高清国产一区二区三区| 国产精品乡下勾搭老头1| 激情偷乱视频一区二区三区| 麻豆视频观看网址久久| 日韩制服丝袜av| 午夜不卡av免费| 日韩在线一区二区| 偷拍一区二区三区四区| 午夜精品一区二区三区免费视频 | 国产一区二区看久久| 久草这里只有精品视频| 久久精品免费看| 久久草av在线| 国产福利一区在线| 国产成人夜色高潮福利影视| 国产福利一区二区三区在线视频| 成人污视频在线观看| 99这里只有精品| 欧美三级三级三级爽爽爽| 欧美日韩久久一区| 日韩欧美成人午夜| 国产日韩三级在线| 中文字幕一区在线观看视频| 亚洲人精品午夜| 亚洲成av人影院在线观看网| 亚洲成人精品在线观看| 青草av.久久免费一区| 国产一区二区三区免费观看| 成人性视频免费网站| 色综合久久久久| 欧美精品国产精品| 日韩三级在线免费观看| 久久久99精品免费观看| 亚洲色图19p| 免费在线看一区| 成人激情校园春色| 欧美精品一二三| wwwwww.欧美系列| 亚洲色大成网站www久久九九| 五月婷婷久久丁香| 国产成人精品网址| 欧洲中文字幕精品| 久久综合av免费| 亚洲女同ⅹxx女同tv| 极品销魂美女一区二区三区| 高清不卡一区二区| 日韩视频免费直播| 亚洲精品中文在线影院| 久久91精品久久久久久秒播| 91蜜桃免费观看视频| 日韩你懂的电影在线观看| 国产精品久久久久aaaa樱花 | 久久se精品一区二区| 色88888久久久久久影院野外| 欧美成人三级电影在线| 亚洲国产精品视频| 国产91精品精华液一区二区三区 |