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

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

?? cache_macros.h

?? 這是我在ADSP tiger sharc 201上面實現的OFDM(標準是wimax)同步算法哦!具有非常高的指令效率.
?? H
字號:
/******************************************************************
-PetreM
-rev1.1, 2/12/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
*******************************************************************
-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;              \






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美aaaaaa午夜精品| 国产精品色噜噜| 免费成人av资源网| 日韩视频在线观看一区二区| 日本成人中文字幕| 久久久久久久久岛国免费| 国产成人av电影在线观看| 欧美国产精品专区| 一本到高清视频免费精品| 亚洲综合激情网| 日韩免费视频一区| 国产精品18久久久久久久久| 综合久久一区二区三区| 欧美探花视频资源| 久久国产精品第一页| 久久免费看少妇高潮| av成人动漫在线观看| 亚洲国产精品一区二区www在线| 777午夜精品免费视频| 久久爱另类一区二区小说| 国产精品视频线看| 欧美三级日韩在线| 国产一区二区三区四| 亚洲乱码国产乱码精品精98午夜| 欧美另类z0zxhd电影| 国产精品综合在线视频| 一二三区精品福利视频| 精品毛片乱码1区2区3区| 成人av综合在线| 免费一级欧美片在线观看| 国产精品久久网站| 日韩欧美在线影院| 色婷婷久久99综合精品jk白丝| 美女视频免费一区| 亚洲最大成人综合| 久久品道一品道久久精品| 在线视频欧美精品| 国产福利一区在线观看| 亚洲成av人片一区二区三区| 国产欧美日产一区| 欧美电视剧在线观看完整版| 91原创在线视频| 国产一区二区三区在线观看免费 | 精品国产污网站| 一本大道久久a久久精二百 | 亚洲欧洲成人精品av97| 日韩美女一区二区三区四区| 91捆绑美女网站| 国产一级精品在线| 午夜激情综合网| 亚洲精品中文在线| 欧美激情综合在线| 精品国产亚洲在线| 欧美一区二区在线播放| 欧美色中文字幕| 91蜜桃免费观看视频| 国产不卡免费视频| 国内精品国产三级国产a久久| 亚欧色一区w666天堂| 亚洲精品自拍动漫在线| 国产精品精品国产色婷婷| 国产日韩欧美一区二区三区综合 | 欧美精品一区二区三区很污很色的| 欧美在线看片a免费观看| 99久久婷婷国产综合精品电影| 久久国产精品色婷婷| 日本在线不卡一区| 午夜精品久久久久久久久久| 一区二区三区久久久| 亚洲日本韩国一区| 亚洲精品成人在线| 亚洲精品美国一| 亚洲精品视频在线观看免费| 亚洲视频1区2区| 中文字幕五月欧美| 综合久久久久久| 一区二区三区四区激情| 亚洲精品欧美在线| 午夜影院在线观看欧美| 五月天视频一区| 日韩中文字幕麻豆| 麻豆高清免费国产一区| 乱中年女人伦av一区二区| 久久成人18免费观看| 国产黄色精品网站| 成人黄色片在线观看| 97se亚洲国产综合自在线 | 欧美美女一区二区在线观看| 欧美午夜精品一区二区蜜桃| 欧美人狂配大交3d怪物一区| 日韩午夜在线播放| 国产日韩欧美精品电影三级在线| 国产日韩欧美制服另类| 亚洲三级小视频| 午夜精品久久久久久久久| 看电视剧不卡顿的网站| 国产成人一区在线| 色婷婷亚洲精品| 欧美久久久久久久久| 欧美电视剧在线观看完整版| 欧美激情艳妇裸体舞| 一区二区三区欧美日| 日韩国产在线一| 国产制服丝袜一区| 一本色道久久综合亚洲aⅴ蜜桃| 在线观看精品一区| 精品欧美一区二区久久| 国产精品国产三级国产普通话99| 一区二区三区欧美激情| 美女视频一区二区| 94色蜜桃网一区二区三区| 欧美剧情片在线观看| 久久精品这里都是精品| 曰韩精品一区二区| 精品在线一区二区三区| 91美女在线观看| 日韩精品中文字幕一区二区三区| 中文字幕免费不卡| 亚洲在线一区二区三区| 国产精品主播直播| 欧美日韩国产另类一区| 久久久综合九色合综国产精品| 亚洲男人的天堂一区二区| 美女www一区二区| 一本一本大道香蕉久在线精品 | 久久久综合九色合综国产精品| 欧美日韩一级片在线观看| 欧美一级搡bbbb搡bbbb| 亚洲欧美在线高清| 免费久久精品视频| 色先锋aa成人| 欧美精品一区二区久久婷婷| 亚洲自拍偷拍九九九| 成人性生交大合| 日韩一级大片在线观看| 亚洲精品日韩综合观看成人91| 国产一区二区91| 5月丁香婷婷综合| 一区二区理论电影在线观看| 国产精品99久久不卡二区| 欧美日韩1区2区| 亚洲精品视频免费观看| 成人18精品视频| 久久综合丝袜日本网| 日韩av一区二区在线影视| 色天使色偷偷av一区二区| 日本一区二区视频在线| 九九九久久久精品| 欧美日韩高清影院| 亚洲精品一区二区在线观看| 午夜一区二区三区在线观看| 成人一区二区三区中文字幕| 精品免费国产二区三区| 蜜臀av一区二区| 911国产精品| 午夜一区二区三区视频| 欧洲精品一区二区| 亚洲女与黑人做爰| 91视频免费播放| 中文字幕中文字幕一区二区| 国产乱国产乱300精品| 久久一夜天堂av一区二区三区| 免费观看久久久4p| 欧美成人高清电影在线| 日本亚洲免费观看| 精品免费日韩av| 国产伦精一区二区三区| 国产三级欧美三级日产三级99 | 亚洲一区二区三区中文字幕 | 91精品国产一区二区| 亚洲电影一级黄| 欧美日韩精品三区| 视频一区视频二区中文字幕| 91精品国产一区二区三区香蕉| 91网站最新地址| 成人激情视频网站| 国产三级三级三级精品8ⅰ区| 国产美女娇喘av呻吟久久| 久久九九影视网| 成人午夜看片网址| 综合久久久久久久| 欧美日韩一区二区三区四区五区 | 日韩视频一区二区在线观看| 久久国产剧场电影| 欧美国产日韩一二三区| 色狠狠桃花综合| 五月天亚洲婷婷| 久久久久久久久伊人| 91免费视频网址| 婷婷成人综合网| 欧美精品一区二| 96av麻豆蜜桃一区二区| 午夜电影一区二区三区| 欧美mv日韩mv亚洲| 成人黄色av电影| 肉丝袜脚交视频一区二区| www激情久久| 色婷婷综合中文久久一本| 婷婷六月综合网| 欧美激情综合五月色丁香 |