亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美一三区三区四区免费在线看 | 欧美剧情片在线观看| 久久99精品久久久久| 在线观看成人小视频| 日韩美女在线视频| 午夜精品久久久久久久久久| 久久毛片高清国产| 国产一区二区剧情av在线| 精东粉嫩av免费一区二区三区| 夜色激情一区二区| 成人性生交大片免费看中文| 日韩欧美国产不卡| 久久99精品久久久久婷婷| 91精品国产一区二区三区香蕉| 蜜臀av性久久久久蜜臀av麻豆| 亚洲大片精品永久免费| 亚洲第一成年网| 日本高清不卡视频| 成人黄色av电影| 国产成人综合亚洲91猫咪| 精品一区二区日韩| 日韩高清在线一区| 午夜伦理一区二区| 亚洲国产一区二区三区青草影视| 一区在线播放视频| 国产精品久久久久三级| 国产视频在线观看一区二区三区| 欧美不卡在线视频| 日韩视频在线一区二区| 91精品国产日韩91久久久久久| 欧美日韩一级视频| 欧美亚洲日本一区| 在线免费视频一区二区| 色综合久久综合网欧美综合网| 成人免费va视频| 不卡av电影在线播放| 成人一级黄色片| 国产一二三精品| 国产精品一级二级三级| 国产乱码精品一品二品| 国产成人在线视频网址| 国产精品77777竹菊影视小说| 狠狠v欧美v日韩v亚洲ⅴ| 精品一二线国产| 国产麻豆一精品一av一免费| 欧美一级日韩不卡播放免费| 91精品免费在线观看| 欧美一区在线视频| 精品国产一区久久| 久久精品一区八戒影视| 国产嫩草影院久久久久| 国产精品九色蝌蚪自拍| 亚洲柠檬福利资源导航| 亚洲网友自拍偷拍| 午夜精品aaa| 欧美老女人第四色| 色偷偷88欧美精品久久久| 国产麻豆欧美日韩一区| 日韩中文字幕区一区有砖一区 | 亚洲午夜电影在线观看| 国产午夜精品久久| 久久中文娱乐网| 91精品久久久久久久99蜜桃 | 中文字幕制服丝袜成人av| 欧美高清视频www夜色资源网| 色8久久精品久久久久久蜜| 狠狠色丁香久久婷婷综合_中| zzijzzij亚洲日本少妇熟睡| 99re视频精品| 亚洲国产美女搞黄色| 国产亚洲污的网站| 欧美电影精品一区二区| 日韩午夜激情视频| 亚洲综合区在线| 欧美亚洲国产一区在线观看网站| 91九色02白丝porn| www.亚洲国产| 欧美日韩黄色一区二区| 久久综合av免费| 一区二区三区四区视频精品免费 | 日韩欧美中文字幕精品| 国产精品全国免费观看高清 | 亚洲精品免费在线观看| 日本不卡123| 91麻豆产精品久久久久久 | 自拍偷在线精品自拍偷无码专区| 亚洲一区在线视频| 狠狠色狠狠色合久久伊人| 日本乱人伦aⅴ精品| 欧美精品一区二区在线观看| 亚洲精品亚洲人成人网在线播放| 美女免费视频一区| 色狠狠av一区二区三区| 久久午夜羞羞影院免费观看| 亚洲精品网站在线观看| 国产精品911| 日韩一级黄色大片| 亚洲一区二区偷拍精品| 成人午夜私人影院| 日韩美女天天操| 亚洲一区二区三区不卡国产欧美| 国产成人免费视频一区| 制服丝袜日韩国产| 一区二区三区在线免费观看| 国产电影精品久久禁18| 日韩一级成人av| 99热99精品| 久久精品水蜜桃av综合天堂| 三级欧美在线一区| 欧洲国内综合视频| 中文字幕在线不卡国产视频| 国产真实精品久久二三区| 欧美老女人在线| 亚洲电影第三页| 日本高清不卡一区| 亚洲精品国产成人久久av盗摄| 成人性生交大片免费看中文| 欧美精品一区二区不卡| 麻豆成人91精品二区三区| 欧美精品少妇一区二区三区| 色综合久久中文综合久久97| 精品免费日韩av| 色拍拍在线精品视频8848| 亚洲欧美自拍偷拍| 色综合久久综合中文综合网| 一区二区三区四区不卡视频| 欧美三级中文字| 日韩专区一卡二卡| 337p粉嫩大胆噜噜噜噜噜91av| 国模冰冰炮一区二区| 国产婷婷一区二区| 91麻豆精品国产综合久久久久久| 精品国产亚洲在线| 一区二区三区精品在线| 99视频精品在线| 国产精品18久久久久久久久久久久 | 日韩精品亚洲专区| 在线播放视频一区| 日韩高清不卡一区二区三区| 69av一区二区三区| 免费在线观看成人| 日韩免费电影网站| 国产夫妻精品视频| 日韩美女精品在线| 色婷婷激情一区二区三区| 亚洲综合色成人| 制服丝袜成人动漫| 久久精品国产**网站演员| 久久伊人蜜桃av一区二区| 高清beeg欧美| 亚洲免费成人av| 欧美日韩国产综合视频在线观看| 午夜欧美视频在线观看| 日韩欧美成人一区二区| 国产高清精品网站| 亚洲女人小视频在线观看| 欧美精品自拍偷拍| 蜜臀国产一区二区三区在线播放| 26uuu欧美| 99这里只有久久精品视频| 亚洲狠狠爱一区二区三区| 欧美一级欧美一级在线播放| 国产一区999| 一区二区三区在线看| 日韩欧美中文一区二区| 国产一区二区导航在线播放| 亚洲少妇30p| 欧美一级黄色录像| 成人污视频在线观看| 亚洲超丰满肉感bbw| 久久精品视频在线免费观看| 色香色香欲天天天影视综合网| 亚洲18影院在线观看| 久久久久97国产精华液好用吗| 色狠狠色狠狠综合| 激情深爱一区二区| 亚洲美女免费视频| 欧美成人性福生活免费看| www.亚洲国产| 免费的成人av| 一区二区三区免费网站| 欧美v国产在线一区二区三区| 97成人超碰视| 久久国产精品72免费观看| 一区二区三区在线免费观看| 久久亚洲精品小早川怜子| 亚洲制服丝袜在线| 亚洲夂夂婷婷色拍ww47| voyeur盗摄精品| 综合欧美亚洲日本| 亚洲成人av福利| 韩国av一区二区| 色先锋久久av资源部| 日韩三级伦理片妻子的秘密按摩| 欧美一区二区三区啪啪| 中文字幕一区不卡| 午夜一区二区三区视频| 国产成人一区在线| 欧美日韩国产免费一区二区| 亚洲一区二区三区四区不卡|