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

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

?? flatmem.c

?? realview22.rar
?? C
?? 第 1 頁 / 共 4 頁
字號:
   *  Instruction fetched, No data fetched      N
   *  Instruction fetched, data fetched         S
   *  No instruction fetched, No data fetched   I
   *  No instruction fetched, data fetched      C
   */

  if (acc_ACCOUNT(acc)) {
    if (acc_OPC(acc)) {
      /* End of cycle - account for access */
      /* This access is either acc_LoadInstrN or acc_NoFetch */
      if (top->sa_memacc_flag) {
        /* data fetched */
        top->sa_memacc_flag=0;
        if (acc_MREQ(acc)) top->cycles.NumScycles++;
        else top->cycles.NumCcycles++;
      } else {
        /* no data fetched */
        if (acc_MREQ(acc)) top->cycles.NumNcycles++;
        else top->cycles.NumIcycles++;
      }
    } else if (acc_MREQ(acc)) { /* should be */
      top->sa_memacc_flag=1;    /* flag */
    }
  }

  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 */
#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;

      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 1;
}

/*
 * Memory access function that supports byte lanes
 */

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

  if (acc_ACCOUNT(acc)) {
    if (acc_SEQ(acc)) {
      if (acc_MREQ(acc)) top->cycles.NumScycles++;
      else top->cycles.NumCcycles++;
    } else if (acc_MREQ(acc)) top->cycles.NumNcycles++;
    else top->cycles.NumIcycles++;
  }

  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_BYTELANE(acc)==BYTELANE_MASK) { /* word */
      if (acc_READ(acc)) *data = *ptr;
      else *ptr = *data;
    } else {
      unsigned32 mask;
      static const unsigned32 masks[] = {
        0x00000000, 0x000000ff,
        0x0000ff00, 0x0000ffff,
        0x00ff0000, 0x00ff00ff,
        0x00ffff00, 0x00ffffff,
        0xff000000, 0xff0000ff,
        0xff00ff00, 0xff00ffff,
        0xffff0000, 0xffff00ff,
        0xffffff00, 0xffffffff,
      };
      mask=masks[acc_BYTELANE(acc)];
      if (acc_READ(acc)) *data = *ptr & mask;
      else *ptr = (*ptr & ~mask) | (*data & mask);
    }                           /* internal cycle */
  }

  return 1;
}
#endif

static void MemAccessHarvard(void *handle,
                       ARMword daddr,ARMword *ddata, ARMul_acc dacc, int *drv,
                       ARMword iaddr,ARMword *idata, ARMul_acc iacc, int *irv)
{

    toplevel *top=(toplevel *)handle;
    unsigned int pageno;
    mempage *page;
    ARMword *ptr;
    ARMword offset;

    /* This call doesn't happen for debug accesses, so no need
     * to check acc_ACCOUNT. */
    /* top->p_ABus->bus_BusyUntil++; */
    
    /* Update cycle counters - use the same scheme */
    /* as the StrongARM model (see MemAccessSA()). */
    
    if (acc_MREQ(iacc) && acc_MREQ(dacc)) {
        top->cycles.NumScycles++;
    }
    else if (acc_MREQ(iacc) && acc_nMREQ(dacc)) {
        top->cycles.NumNcycles++;
    }
    else if (acc_nMREQ(iacc) && acc_MREQ(dacc)) {
        top->cycles.NumCcycles++;
    }
    else {
        top->cycles.NumIcycles++;  
    }
    
    /* Deal with Instruction side first */
    
    if (acc_MREQ(iacc)) {
        
        int rv;
        
        if ((iaddr >= top->LowestPeripheralAddress) &&
            (iaddr <= top->HighestPeripheralAddress) &&
            (rv = peripheral_access(handle,iaddr,idata,iacc)) != -2)
        {
            *irv = rv; goto idone;
        }
        
        pageno=iaddr>>PAGEBITS;
        page=top->mem.page[pageno];
        
        if (page==NULL) {
            top->mem.page[pageno]=page=NewPage(top,iaddr);
        }
        offset = iaddr & OFFSETBITS_WORD;
        ptr=(ARMword *)((char *)(page->memory)+offset);
        
        switch (iacc & WIDTH_MASK) {
        case BITS_8: {
            unsigned32 datum = *ptr;
            if (HostEndian!=top->read_bigend) iaddr^=3;
            datum<<=(3 *(iaddr & 3));
            *idata = datum & 0xFF;
        }
        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) iaddr^=2;
            *idata = *((unsigned16 *)(((char *)ptr)+(iaddr & 2)));
#else
            unsigned32 datum = *ptr;
            if (HostEndian!=top->read_bigend) iaddr^=2;
            if (iaddr & 2) datum<<=16;
            *idata = (datum>>16);
#endif
        }
        break;
        
        case BITS_32:             /* read word */
            *idata=*ptr;
            break;
            
        case BITS_64:             /* read 2 words */
            *idata=*ptr;
            idata[1]=ptr[1];
            break;
            
        }
    }
    *irv = 1;

idone:
  /* Now deal with data side */

  if (acc_MREQ(dacc) /*dacc != acc_Icycle*/) {

      int rv;
      if ((daddr >= top->LowestPeripheralAddress) &&
          (daddr <= top->HighestPeripheralAddress) &&
          (rv = peripheral_access(handle,daddr,ddata,dacc)) != -2)
      {
          *drv = rv; goto ddone;
      }

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

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


    if (acc_READ(dacc)) {
          switch (dacc & WIDTH_MASK) {
          case BITS_8:              /* read byte */
            if (HostEndian!=top->read_bigend) daddr^=3;
            *ddata = ((unsigned8 *)ptr)[daddr & 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) daddr^=2;
            *ddata = *((unsigned16 *)(((char *)ptr)+(daddr & 2)));
#else
            unsigned32 datum;
            datum=*ptr;
            if (HostEndian!=top->read_bigend) daddr^=2;
            if (daddr & 2) datum<<=16;
            *ddata = (datum>>16);
#endif
            }
            break;
        
          case BITS_32:             /* read word */
            *ddata=*ptr;
            break;

          case BITS_64:             /* read dword */
            *ddata = *ptr;
            ddata[1] = ptr[1];
            break;

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

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

          case BITS_64:             /* write 2 words */
            *ptr = *ddata;
            ptr[1] = ddata[1];
            break;

          default:
            break;
          }
    }
  }

  *drv = 1;
ddone:
  ;
}

#ifdef PIPELINED
static void NextDCycle(void *handle, ARMword addr, ARMul_acc acc)
{
    NextCycle(handle, addr, acc);
}
static void NextICycle(void *handle, ARMword addr, ARMul_acc acc)
{
    NextCycle(handle, addr, acc);
}
#endif

/*
 * Utility functions:
 */


static unsigned Flat_MemInfo(void *handle, unsigned type, ARMword *pID,
                        uint64 *data)
{
    toplevel *top=(toplevel *)handle;
    if (ACCESS_IS_READ(type))
    {
        switch (*pID) {
        case MemPropertyID_TotalCycles:
            *data = (top->cycles.NumNcycles + top->cycles.NumScycles +
                     top->cycles.NumIcycles + top->cycles.NumCcycles);
            return RDIError_NoError;
        case MemPropertyID_CycleSpeed:
            *data = top->clk_speed;
            return RDIError_NoError;
        case MemPropertyID_BaseMemoryRef:    /* We are a LEAF */
            *(ARMul_MemInterface**)data = top->mem_ref.mif;
            assert(top->mem_ref.mif->mem_link == &top->mem_ref);
            return RDIError_NoError;
        case MemPropertyID_BaseMemoryEnable: /* We are a LEAF */
            *data = top->BaseMemoryEnabled;
            return RDIError_NoError;

        default:
            return RDIError_UnimplementedMessage;
        }
    }
    else
    {
        switch (*pID) {
        case MemPropertyID_BaseMemoryEnable: /* We are a LEAF */
            top->BaseMemoryEnabled = (bool)*data;
            return RDIError_NoError;
        default:
            return RDIError_UnimplementedMessage;
        }
    }
}



static const ARMul_Cycles *Flat_ReadCycles(void *handle)
{
  toplevel *top=(toplevel *)handle;
  top->cycles.Total=(top->cycles.NumNcycles + top->cycles.NumScycles +
                     top->cycles.NumIcycles + top->cycles.NumCcycles);
  return &(top->cycles);
}

static unsigned int DataCacheBusy(void *handle)
{
  UNUSEDARG(handle);
  return FALSE;
}

static unsigned long Flat_GetCycleLength(void *handle)
{
  /* Returns the cycle length in tenths of a nanosecond */
  toplevel *top=(toplevel *)handle;
  return (unsigned long)(top->clk*10000.0);
}


/* For ARMulAgent_AddPeripheral */
extern void Target_add_names(toolconf tconf);
extern void Target_add_names(toolconf tconf)
{
    (void)tconf;
}


BEGIN_EXIT(Flatmem)
{
/*
 * Remove the memory interface
 */
  ARMword page;
  toplevel *top=state;
  memory *mem=&top->mem;
  /* free all truly allocated pages */
  for (page=0; page<NUMPAGES; page++) {
    mempage *pageptr= mem->page[page];
    if (pageptr) {
      free((char *)pageptr);
    }
  }

  ClxList_Destroy((ClxList*)&top->NewPageAllocated,NULL);

  ARMulAgent_Destroy(&top->agent);

  /* top-level structure is freed by END_EXIT macro  */
}
END_EXIT(Flatmem)



/*--- <SORDI STUFF> ---*/
#define SORDI_DLL_NAME_STRING "Flatmem"
#define SORDI_DLL_DESCRIPTION_STRING "Flatmem Leaf memory model"
#define SORDI_RDI_PROCVEC Flatmem_AgentRDI
#include "perip_sordi.h"

#include "perip_rdi_agent.h"
    IMPLEMENT_AGENT_PROCS_NOEXE_NOMODULE(Flatmem)
    IMPLEMENT_AGENT_PROCVEC_NOEXE(Flatmem)

/*--- </> ---*/


/* EOF flatmem.c */


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区在线观看| 91网站视频在线观看| 亚洲动漫第一页| 亚洲色图欧美在线| 综合色中文字幕| 亚洲日本欧美天堂| 亚洲三级久久久| 亚洲一区在线播放| 丝袜诱惑制服诱惑色一区在线观看 | 国产午夜亚洲精品不卡| 久久网这里都是精品| 国产亚洲午夜高清国产拍精品| 国产亚洲精品精华液| 中文字幕一区视频| 一区二区在线电影| 国产露脸91国语对白| 国产一区二三区好的| 成人av影院在线| 欧美三级韩国三级日本一级| 日韩精品专区在线影院观看 | 不卡av免费在线观看| 色94色欧美sute亚洲线路一ni| 欧美唯美清纯偷拍| 日韩欧美一级二级| 中文字幕一区二区三区在线不卡| 亚洲免费观看高清在线观看| 亚洲国产欧美日韩另类综合| 麻豆91小视频| 高清成人在线观看| 欧美日韩一卡二卡| 久久久久久电影| 樱花草国产18久久久久| 奇米精品一区二区三区在线观看| 国产999精品久久久久久| 91偷拍与自偷拍精品| 日韩午夜在线观看| 亚洲国产精品精华液ab| 亚洲国产精品一区二区久久恐怖片| 久久国产人妖系列| 色综合天天视频在线观看| 欧美一级理论性理论a| 国产嫩草影院久久久久| 午夜精品123| 不卡的av在线播放| 精品av综合导航| 亚洲国产精品人人做人人爽| 国产成人精品三级麻豆| 在线不卡免费欧美| 国产精品久久久久久户外露出| 欧美aa在线视频| 欧美亚洲动漫精品| 国产精品久久99| 精品无人区卡一卡二卡三乱码免费卡| 在线免费一区三区| 国产精品国产三级国产aⅴ原创| 免费高清在线一区| 欧美日韩国产精品成人| 亚洲丝袜美腿综合| 粉嫩13p一区二区三区| 日韩精品中文字幕在线一区| 午夜精品免费在线观看| 色哟哟精品一区| 亚洲欧美在线观看| 成人激情免费网站| 久久久久久97三级| 九色porny丨国产精品| 日韩三级.com| 日本强好片久久久久久aaa| 在线亚洲精品福利网址导航| 亚洲免费资源在线播放| 菠萝蜜视频在线观看一区| 国产欧美日韩卡一| 懂色av中文字幕一区二区三区| 中文字幕一区二区三区乱码在线| 国产成人精品免费网站| 久久久久99精品国产片| 国产寡妇亲子伦一区二区| 久久综合av免费| 国产福利91精品一区二区三区| 久久这里只有精品6| 黑人巨大精品欧美黑白配亚洲| 91精品免费观看| 久久疯狂做爰流白浆xx| 精品久久久久久久人人人人传媒| 日韩成人av影视| 欧美一级日韩免费不卡| 久久精品久久99精品久久| 日韩视频在线一区二区| 国产一区二区免费看| 国产欧美日韩在线看| 91蜜桃视频在线| 亚洲国产sm捆绑调教视频| 欧美日韩国产a| 精一区二区三区| 国产精品国产精品国产专区不蜜 | 精品91自产拍在线观看一区| 韩国精品主播一区二区在线观看| 久久久久久久久岛国免费| 成人午夜在线播放| 亚洲国产成人av| xvideos.蜜桃一区二区| 91在线小视频| 青草国产精品久久久久久| 亚洲综合激情小说| 日韩一区二区麻豆国产| 国产精品1024| 亚洲伊人伊色伊影伊综合网| 日韩午夜三级在线| 成人毛片老司机大片| 亚洲国产精品久久久久秋霞影院| 欧美一区二区视频在线观看 | 欧美日韩免费不卡视频一区二区三区 | 亚洲欧美国产三级| 日韩一区二区三区电影在线观看| 国产成人精品1024| 亚洲电影视频在线| 久久久久久久久伊人| 91精彩视频在线| 成人午夜精品在线| 蜜桃视频一区二区三区在线观看 | 91精品啪在线观看国产60岁| 成人深夜视频在线观看| 日韩中文字幕一区二区三区| 国产精品久久99| 精品88久久久久88久久久| 欧美亚男人的天堂| 99视频国产精品| 粉嫩aⅴ一区二区三区四区五区 | 中文字幕亚洲在| 久久欧美一区二区| 日韩一级精品视频在线观看| 91视频xxxx| 暴力调教一区二区三区| 国产精品69久久久久水密桃| 日本一区中文字幕| 亚洲成人一区在线| 伊人开心综合网| 中文字幕制服丝袜成人av | 欧美视频精品在线| 97久久人人超碰| 懂色一区二区三区免费观看| 国产精品性做久久久久久| 久久66热偷产精品| 日韩精品福利网| 日韩制服丝袜先锋影音| 亚洲午夜久久久久中文字幕久| 国产精品乱码一区二区三区软件 | 亚洲成人自拍偷拍| 精品免费一区二区三区| 欧美麻豆精品久久久久久| 欧美中文一区二区三区| 91免费版在线看| 一本到三区不卡视频| 99久久综合狠狠综合久久| 成人精品视频一区二区三区尤物| 国产精品一线二线三线| 极品销魂美女一区二区三区| 久久99久久精品| 国内精品国产成人| 国产一区二区三区免费在线观看 | 不卡av电影在线播放| 成人不卡免费av| 91麻豆福利精品推荐| 色噜噜狠狠色综合欧洲selulu| 色香蕉成人二区免费| 欧美三级电影在线看| 在线播放日韩导航| 精品国产一区a| 亚洲国产成人午夜在线一区| 国产精品免费观看视频| 亚洲一级在线观看| 免费观看一级特黄欧美大片| 国产美女久久久久| 99免费精品视频| 欧美欧美欧美欧美| 久久奇米777| 亚洲综合久久av| 久久99精品一区二区三区| 国产成+人+日韩+欧美+亚洲| 91偷拍与自偷拍精品| 欧美一区二区三区在线观看| 国产亚洲精品aa午夜观看| 亚洲一区在线播放| 极品美女销魂一区二区三区免费| 白白色亚洲国产精品| 欧美日韩国产免费| 久久精品一区四区| 亚洲午夜免费电影| 国产精品一品二品| 欧美久久久久久久久| 国产精品热久久久久夜色精品三区 | 国产亚洲精品7777| 亚洲成人免费电影| 懂色av中文字幕一区二区三区 | 中文字幕成人网| 婷婷开心激情综合| 成人av网址在线| 日韩精品资源二区在线| 一区二区三区免费看视频| 国内外成人在线|