K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please add long comment :).

_24(Sun)

ちなみになぜ昨日の日記のバグに気が付いたかというと,シミュレータの上で走らせてるんですが,L1D キャッシュヒット(h),ミス(m) 回数が出るんですな.で,h+m の値がカナーリ違っていて.多少の違いはスタックとか,制御領域のアクセスがあるんで違うんですが,カナーリ違うとダメダメで.

いや,便利といえば便利.


空が白んできたよ.

論文よりも,長い目で見たらきっと大事なものの準備もしなくちゃだよ.

そして,真っ白(いや,背景色は黒な xyzzy だけどさ)な論文.

ウワーン.


#define FETCH_AND_DEC(var_addr) \
{ \
  asm volatile( \
                ".set noreorder\n"   \
                "li   $8, 1;"        \
              "1:;"                  \
                "ll   $2, (%0);"     \
                "sub  $2, $2, $8;"   \
                "sc   $2, (%0);"     \
                "beqz $2, 1b;"       \
                "nop;"               \
                : /* output */                      \
                : /* input  */  "r"  (var_addr)     \
                : /* broken */ "$2", "$8"           \
                );}

....

  FETCH_AND_DEC(&g_rest);
  if(g_rest== 0){
    バリア解除処理
  }

間違いを指摘せよ(3点).


いやー,よく動いてたな.感動.

・・・全部書き直し.


ぁぅぇぅ.


書きたいことは沢山あるんだけどなぁ.書ききれないなあ.


GW イベント目白押しだなぁ.

でも,家でずーっとだらだらしてそう.って,いつもと同じじゃん.


ふと,自分でレジスタ指定するよりも,全部 gcc に任せたほうがよかったなぁ,と思った.

#define FETCH_AND_DEC(var_addr, old_var) \
{ \
  asm volatile( \
                ".set noreorder\n"   \
                "li   $8, 1;"        \
              "1:;"                  \
                "ll   %0, (%1);"     \
                "sub  $2, %0, $8;"   \
                "sc   $2, (%1);"     \
                "beqz $2, 1b;"       \
                "nop;"               \
                : /* output */ "+r"  (old_var)      \
                : /* input  */  "r"  (var_addr)     \
                : "$2", "$8"                        \
                );}

よりも,

static int
FETCH_AND_DEC(int *addr){
  int old_var, tmp_var;
  asm volatile(".set noreoder\n"
              "1:;"
                "ll   %0, (%2);"
                "sub  %1, %0, %3;"
                "sc   %1, (%2);"
                "beqz %1, 1b;"
                "nop;"
                : "+r" (old_var),
                  "+r" (tmp_var)
                :  "r" (addr)
                   "r" (1));
  return old_var;
}

tmp_var は output に入れなくてもいいような気がするな.


目があかんくなってきた.


好きなだけ長いコメントをどうぞ。

お名前


back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $