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

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

?? cache_macros.h

?? 在ADI的TS系列DSP上編寫的32位定點(diǎn)FIR濾波器的程序
?? H
字號:
/******************************************************************
-PetreM
-rev1.2, 4/20/2004

-PPG
- 01/30/2004 - updated file to include workaround for silicon errata 03-00-0216
- 03-00-0216 : SQSTAT should be read twice sequentially to ensure correct value.

-PM - due to slicon anomalies, CCAIR and CACMD registers are now loaded using j0
-PM - added macros to compute cycle counts in all pr1:0 registers
*******************************************************************
-this file contains the following macros:

-cache_enable(refresh_rate):
  -it sets a new refresh rate
  -if the cache is enabled, it leaves it enabled.
  -if the cache is not enabled, it enables it in the right way
  -at the end enables the BTB if it was not already enabled
  -this macro should be used as the first line of code in every program

-ini_linear_addressing
  -it writes 0 to all il and kl registers, i.e. sets linear addressing
  -I would use it as the second line of program

-ini_cycle_count and comp_cycle_count:
  -measure the cycles spent between these 2 macros
  -save the result at cycle_count location
  -cycle_count must be declared as a variable in the memory

-comp_program_memory
  -it computes how many 32bit words of code are between
    Benchmark and Benchmark.end labels and saves the result at pm_count
  -pm_count must be declared as a variable

-ini_cycle_count_multiple and comp_cycle_count_multiple
  -measure the cycles spent between these 2 macros, but this time
    saves the results at successive locations in memory
    beginning with cycle_count
  -useful to measure the cycle count of each iteration of
    a loop, for example
-ini_cycle_count_xpr0 and comp_cycle_count_xpr0
  -these macros compute the cycle count as ini_cycle_count and
    comp_cycle_count
  -the difference is the result is saved in xpr0
  -to use these macros, never use xpr0 in your program
  -have the advantage that the cache is not used at all
*******************************************************************/
/*****************************************************
-the execution of the cache commands is finished when
the bit 16 of the corresponding status registers is 0
-the macro wait_cache waits until the cache command
has finished the execution
-the 5 nops introduced at the end of the macro keep
the pipeline clean of eventual cache commands. These
cache commands may stall the processor when executed
before one cache command is ended
*/
#define wait_cache(CASTAT)                          \
.align_code 4;                                      \
_chk_castat?:                                       \
    xr0 = CASTAT;;                                  \
    xbitest r0 by CASTAT_COM_ACTIVE_P;;             \
.align_code 4;                                      \
    if nxseq, jump _chk_castat? (NP);nop;nop;nop;;  \
    nop;;nop;;nop;;nop;;nop;
/*****************************************************
-the macro test_cache_enabled tests the bit14 of the
cache status registers. If this bit is 1, the cache is enabled
and PC jumps to the following tasks. Otherwise,
the cache must be invalidated and then enabled
*/
#define test_cache_enabled(CASTAT, jump_label)\
  xr0 = CASTAT;;                              \
  xbitest r0 by CASTAT_ENBL_P;;               \
  if nxseq, jump jump_label (NP);;             \
	nop;;nop;;nop;;nop;;nop;
/*****************************************************
-the macro invalidate invalidates the cache. To enable
the cache, it must be first invalidated. This operation
basically cleans the cache.
*/
#define invalidate(CCAIR, CACMD, CASTAT)            \
  j0 =  j31 + 0;;								                    \
  CCAIR = j0;;  									                  \
  j0 = j31 + CACMD_INV |                            \
             (127 << CACMD_LEN_P) |                 \
              CACMD_NOSTALL;;                       \
  CACMD = j0;;                                      \
.align_code 4;                                      \
_chk_castat_inv?:                                   \
    xr0 = CASTAT;;                                  \
    xbitest r0 by CASTAT_COM_ACTIVE_P;;             \
.align_code 4;                                      \
    if nxseq, jump _chk_castat_inv? (NP);nop;nop;nop;;\
	nop;;nop;;nop;;nop;;nop;

/*****************************************************
-the macro cache_enable executes the following operations:
  -sets a new refresh rate
      -if CCLK=500MHz, refresh_rate=750
      -if CCLK=400MHz, refresh_rate=600
      -if CCLK=300MHz, refresh_rate=450
      -if CCLK=250MHz, refresh_rate=375
  -tests if each cache is already enabled or not. If it
is disabled, invalidate and then enable it. If it is enabled,
don't touch it and jump to the next step.
  -tests if BTB is already enabled. If not, enable the BTB
-as one may observe, after each cache command 5 nops
(i.e. 5 CCLK cycles) are introduced. This is to keep
the pipeline clean of eventual cache commands. These
cache commands may stall the processor when executed
before one cache command is ended
-it should be executed immediately after reset.
-It has not been designed to be used in the
middle of the code or in a project that uses overlays
*/
#define cache_enable(refresh_rate)        \
.align_code 4;                            \
  j0 = j31 + CACMD_REFRESH | refresh_rate;; \
  CACMDALL= j0;;                            \
    wait_cache(CASTAT0);                    \
    wait_cache(CASTAT2);                    \
    wait_cache(CASTAT4);                    \
    wait_cache(CASTAT6);                    \
    wait_cache(CASTAT8);                    \
    wait_cache(CASTAT10);                          \
  test_cache_enabled(CASTAT0, test_cache2);        \
          invalidate(CCAIR0, CACMD0, CASTAT0);     \
          j0 = j31 + CACMD_EN;;                    \
          CACMD0 = j0;;                            \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT0);                     \
test_cache2:                                       \
  test_cache_enabled(CASTAT2, test_cache4);        \
          invalidate(CCAIR2, CACMD2, CASTAT2);     \
          j0 = j31 + CACMD_EN;;                    \
          CACMD2 = j0;;                            \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT2);                     \
test_cache4:                                       \
  test_cache_enabled(CASTAT4, test_cache6);        \
          invalidate(CCAIR4, CACMD4, CASTAT4);     \
          j0 = j31 + CACMD_EN;;                    \
          CACMD4 = j0;;                            \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT4);                     \
test_cache6:                                       \
  test_cache_enabled(CASTAT6, test_cache8);        \
          invalidate(CCAIR6, CACMD6, CASTAT6);     \
          j0 = j31 + CACMD_EN;;                    \
          CACMD6 = j0;;                            \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT6);                     \
test_cache8:                                       \
  test_cache_enabled(CASTAT8, test_cache10);       \
          invalidate(CCAIR8, CACMD8, CASTAT8);     \
          j0 = j31 + CACMD_EN;;                    \
          CACMD8 = j0;;                            \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT8);                     \
test_cache10:                                      \
  test_cache_enabled(CASTAT10, test_BTB);          \
          invalidate(CCAIR10,CACMD10,CASTAT10);    \
          j0 = j31 + CACMD_EN;;                    \
          CACMD10 = j0;;                           \
          nop;;nop;;nop;;nop;;nop;;                \
          wait_cache(CASTAT10);                    \
test_BTB:                                          \
.align_code 4;                                     \
	XR0 = SQSTAT;;                                   \
	XR0 = SQSTAT;;                                   \
	XBITEST R0 BY SQSTAT_BTBEN_P;;                   \
	IF NXSEQ, JUMP BTB_already_enabled (NP);;        \
    nop;;nop;;nop;;nop;;nop;;                      \
  BTBEN;;                                          \
.align_code 4;                                     \
BTB_already_enabled:                               \
   nop;


//this macro initializes the cycle counter of the benchmark
#define ini_cycle_count \
  xr0 = CCNT0;; \
  xr1 = 0x5;; \
  xr0 = r0 + r1;; \
  [j31 + cycle_count] = xr0;

//this macro computes the benchmark cycle count
#define comp_cycle_count \
  xr1 = CCNT0;; \
  xr0 =  [j31 + cycle_count];; \
  xr0 = r1 - r0;; \
  [j31 + cycle_count] = xr0;

//this macro computes the program memory occupied by the benchmark
#define comp_program_memory \
  xr1 = Benchmark;; \
  xr0 = Benchmark.end;; \
  xr0 = r0 - r1;; \
  [j31 + pm_count] = xr0;

//this macro writes 0 in all the length registers, so setting all
//address generators in linear addressing mode
#define ini_linear_addressing  \
  jl0=j31+0;;   kl0=k31+0;; \
  jl1=j31+0;;   kl1=k31+0;;  \
  jl2=j31+0;;   kl2=k31+0;; \
  jl3=j31+0;;   kl3=k31+0;

//this macro initializes the cycle counter of the benchmark when
//more counts must be saved into memory
//j30 must be previously initialized at cycle_count
//and cycle_count should be set as a buffer
#define ini_cycle_count_multiple \
  xr0 = CCNT0;; \
  xr1 = 0x5;; \
  xr0 = r0 + r1;; \
  [j30+0] = xr0;

//this macro computes the benchmark cycle count and
//saved the result at j30
#define comp_cycle_count_multiple \
  xr1 = CCNT0;; \
  xr0 =  [j30 + 0];; \
  xr0 = r1 - r0;; \
  [j30+=1] = xr0;

//this macro initializes the cycle counter of the benchmark
#define ini_cycle_count_xpr0 \
  xr1:0 = pr1:0;;            \
  xr0 = CCNT0;;              \
  xr2 = 0x6;;                \
  nop;;                      \
  xr0 = r0 + r2;;            \
  nop;;                      \
  xpr1:0 = r1:0;             \

//this macro computes the benchmark cycle count
#define comp_cycle_count_xpr0 \
  xr2 = CCNT0;;               \
  xr1:0 =  pr1:0;;            \
  xr0 = r2 - r0;;             \
  xpr1:0 = r1:0;              \

//this macro initializes the cycle counter of the benchmark
#define ini_cycle_count_xpr1 \
  xr1:0 = pr1:0;;            \
  xr1 = CCNT0;;              \
  xr2 = 0x6;;                \
  nop;;                      \
  xr1 = r1 + r2;;            \
  nop;;                      \
  xpr1:0 = r1:0;             \

//this macro computes the benchmark cycle count
#define comp_cycle_count_xpr1 \
  xr2 = CCNT0;;               \
  xr1:0 =  pr1:0;;            \
  xr1 = r2 - r1;;             \
  xpr1:0 = r1:0;              \


//this macro initializes the cycle counter of the benchmark
#define ini_cycle_count_ypr0 \
  yr1:0 = pr1:0;;            \
  yr0 = CCNT0;;              \
  yr2 = 0x6;;                \
  nop;;                      \
  yr0 = r0 + r2;;            \
  nop;;                      \
  ypr1:0 = r1:0;             \

//this macro computes the benchmark cycle count
#define comp_cycle_count_ypr0 \
  yr2 = CCNT0;;               \
  yr1:0 =  pr1:0;;            \
  yr0 = r2 - r0;;             \
  ypr1:0 = r1:0;              \

//this macro initializes the cycle counter of the benchmark
#define ini_cycle_count_ypr1 \
  yr1:0 = pr1:0;;            \
  yr1 = CCNT0;;              \
  yr2 = 0x6;;                \
  nop;;                      \
  yr1 = r1 + r2;;            \
  nop;;                      \
  ypr1:0 = r1:0;             \

//this macro computes the benchmark cycle count
#define comp_cycle_count_ypr1 \
  yr2 = CCNT0;;               \
  yr1:0 =  pr1:0;;            \
  yr1 = r2 - r1;;             \
  ypr1:0 = r1:0;              \





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91老司机福利 在线| 国产精品一区二区无线| 国产欧美日韩精品a在线观看| 91精品婷婷国产综合久久性色 | 日韩毛片视频在线看| 久久久久九九视频| 欧美国产亚洲另类动漫| 中文字幕不卡在线观看| 欧美激情在线观看视频免费| 成人欧美一区二区三区小说 | 久久99精品久久久久久国产越南| 日本三级韩国三级欧美三级| 久久99精品国产91久久来源| 蜜桃av一区二区在线观看| 精品亚洲免费视频| 成人h版在线观看| 欧美性视频一区二区三区| 日韩视频123| 久久综合色婷婷| 成人免费在线观看入口| 亚洲高清视频中文字幕| 国产一区二区福利视频| 色噜噜夜夜夜综合网| 在线91免费看| 国产精品免费网站在线观看| 亚洲影视在线播放| 激情综合色综合久久| 99久久精品国产导航| 欧美群妇大交群中文字幕| 久久久蜜桃精品| 性感美女久久精品| 国产不卡一区视频| 欧美日韩日日夜夜| 国产日本一区二区| 三级欧美在线一区| av一本久道久久综合久久鬼色| 欧美羞羞免费网站| 国产香蕉久久精品综合网| 亚洲午夜av在线| 国产成人aaaa| 日韩一区二区三区四区| 亚洲欧美日韩久久| 国内一区二区视频| 欧美婷婷六月丁香综合色| www国产精品av| 一区二区三区**美女毛片| 国产美女在线精品| 91精品国产福利在线观看| 国产拍欧美日韩视频二区| 五月天激情综合| 成人av网址在线| 欧美va天堂va视频va在线| 亚洲国产成人av| 色噜噜夜夜夜综合网| 精品国产免费人成电影在线观看四季| 一区二区三区四区不卡视频 | 欧美午夜不卡在线观看免费| 国产精品乱子久久久久| 亚洲国产精品一区二区www在线| 日韩在线观看一区二区| 大胆亚洲人体视频| 欧美日韩卡一卡二| 亚洲人成网站色在线观看| 久久99国产精品麻豆| 欧美日韩三级一区二区| 一区二区三区四区视频精品免费| 高清不卡一区二区在线| 日韩美女天天操| 久色婷婷小香蕉久久| 91精品婷婷国产综合久久竹菊| 亚洲一区二区三区四区五区中文| 99久久夜色精品国产网站| 国产日韩精品一区二区三区 | 亚洲欧洲另类国产综合| 成人午夜伦理影院| 国产精品日韩精品欧美在线| 国产成人8x视频一区二区| 国产片一区二区| 成人福利视频在线看| 国产欧美一区二区精品性| 国产很黄免费观看久久| 欧美va亚洲va香蕉在线| 国产成人在线观看| 欧美国产1区2区| 97aⅴ精品视频一二三区| 中文字幕一区二区三区在线观看 | 欧美另类变人与禽xxxxx| 亚洲午夜免费电影| 日韩午夜激情免费电影| 日韩欧美国产精品| 国产寡妇亲子伦一区二区| 精品欧美一区二区在线观看| 国产精品白丝jk白祙喷水网站| 国产日韩精品一区二区三区| 99精品欧美一区二区三区小说| 亚洲免费三区一区二区| 欧美色精品在线视频| 麻豆精品新av中文字幕| 久久精品亚洲乱码伦伦中文| 99r国产精品| 青青草国产精品97视觉盛宴| 久久精品日产第一区二区三区高清版 | 国产性天天综合网| 色婷婷综合久久久久中文一区二区 | 欧洲av一区二区嗯嗯嗯啊| 亚洲国产wwwccc36天堂| 欧美xxxx老人做受| 99精品视频一区二区三区| 天堂午夜影视日韩欧美一区二区| 精品国产123| 欧美这里有精品| 久久91精品国产91久久小草| 亚洲免费观看视频| 亚洲精品在线电影| 91国产成人在线| 国产福利一区二区三区视频在线 | 日韩伦理免费电影| 欧美成人一区二区三区片免费| 懂色中文一区二区在线播放| 亚洲v中文字幕| 中文字幕在线视频一区| 欧美成人在线直播| 欧美日韩激情一区| 91小宝寻花一区二区三区| 精彩视频一区二区| 五月天婷婷综合| 亚洲欧美一区二区视频| 欧美精品一区二区三区高清aⅴ| 欧美在线综合视频| 99久久精品免费精品国产| 激情综合网av| 日本va欧美va欧美va精品| 樱桃视频在线观看一区| 国产亚洲短视频| 久久尤物电影视频在线观看| 欧美色国产精品| 色婷婷综合五月| 色综合婷婷久久| 成人午夜激情影院| 国产一区二区在线影院| 日本欧美韩国一区三区| 香蕉成人伊视频在线观看| 一区二区三区美女| 亚洲日本中文字幕区| 国产精品高清亚洲| 中文字幕一区av| 亚洲欧美综合网| 亚洲欧美精品午睡沙发| 国产精品动漫网站| 最新高清无码专区| 自拍av一区二区三区| 日韩一区在线看| √…a在线天堂一区| 一区二区中文字幕在线| 自拍偷拍国产亚洲| 亚洲综合色自拍一区| 亚洲一区二区欧美日韩| 亚洲国产精品欧美一二99| 偷拍与自拍一区| 日韩成人精品在线| 麻豆精品一二三| 国产高清无密码一区二区三区| 国产一区二区在线免费观看| 国产精品系列在线观看| 波多野结衣一区二区三区 | 欧美疯狂做受xxxx富婆| 欧美日韩夫妻久久| 欧美一区二区三区日韩| www久久精品| 中文字幕中文字幕在线一区 | 成人国产精品免费观看视频| jizz一区二区| 欧美天天综合网| 日韩免费看网站| 国产精品视频观看| 亚洲国产一区二区在线播放| 青娱乐精品视频| av在线这里只有精品| 欧美日韩免费电影| 国产午夜精品福利| 一区二区三区av电影 | 国产精品人妖ts系列视频| 亚洲美女偷拍久久| 麻豆成人免费电影| 99视频一区二区| 日韩欧美亚洲一区二区| 国产精品私人自拍| 日本午夜一本久久久综合| 成人福利视频在线看| 欧美一激情一区二区三区| 国产精品美女一区二区| 午夜精品久久一牛影视| 成人听书哪个软件好| 日韩一区二区三区三四区视频在线观看| 久久毛片高清国产| 视频精品一区二区| 91丝袜美女网| 久久伊人中文字幕| 午夜欧美2019年伦理| 91美女在线视频|