Jun Inoue
jun.l****@gmail*****
2005年 10月 16日 (日) 06:20:33 JST
On Sun, 16 Oct 2005 04:58:17 +0900 YamaKen <yamak****@bp*****> wrote: > r5rs/sigscheme/experimental/imm-const/に調査用コードと結果を置い > といたので興味のある方はどうぞ。必要なら適当にいじってください。 <OT> あー、色んな compiler 持ってるんですねー。普段から cross で用意され てるんでしょうか。私も今度いくつか build してみようかな。 ARM の object code が全部 16 進 4 桁で揃ってるのがちょっと新鮮だった(笑) </OT> > ただし#fを0にエンコードする事についてはまだはっきりと得失が見え > てないので、選択可能にしておきましょう。 そうですね。完全に macro の中に隠蔽するのは簡単ですし、config.h につけて おいたらいいでしょう。7-8 bit 即値比較命令が効率的に扱えないところで (SigScheme を) 使う人のために入れておきましょう。 > > > あ、ついでですがshift無しでcharacter valueを扱う場合のためにint > > > じゃなくてcharの方を011Gにした方がよいと思います。 > > > > > > ......0|11G : Char (imm) > > > ------------------------------ > > > ......1|11G : Integer (imm) > > > > Shift 無しで扱う?? Tag bit の操作を思い違われていませんか? (下記参照) > > はい。shift無しで。瑣末な事なんで実際に必要になった時に。 あ、この文は推敲の残りカス (消し忘れ) です。気にしないでください。 > > > が、こっちを使う方が適切ですね。 > > > > > > typedef void (*ScmCFunc)(void); > > > > うーむ、これはそもそもどうやって使うもんなんでしょうか。 > > ;; 実装内容は知っています > > 単に関数へのポインタであるという型情報以上の意味はありません。正 > 式な型にキャストする時にvoid *と違ってwarningを出さないだけです。 > > 逆にprintf("%p", func)みたいにvoid *として扱う必要がある場合は > SCM_REINTERPRET_CASTで黙らせます。 なるほど。 > 以下は参考まで。 > [...] > SH, M32R, FR-V等は調べてません。SHはマニュアルのダウンロードにユー > ザ登録が必要だったんで面倒でやめました。 おお、色々ありますね。お疲れさまです。きっと最近では文字処理が多いので、 7-8 bit に届かないのはまずいんじゃないでしょうか。余談ですが、M32R では load 8 bit imm cmpeq jmpif が最短っぽいです。cmpi は < しかできない… > #fを0にエンコードするのもアーキテクチャによっては効果が無い一方、 > CONSPは確実にコード量が増えます。よってデフォルトは井上さん案に > した方がいいような気がします。しかしせっかくですから > sigschemetypeのobject抽象化の試験を兼ねて選択可能にしたいと思い > ます。面倒なら私が後から追加しますんで、井上さん案のみで進めてく > ださい。 &>太田さん > しかしgccの-mtuneはpentium以降を指定すると-Osでもメモリ/キャッシュ > 効率はおかまいなしですね。libuimのビルドでも気にしておいた方がい > いかもしれません。 <OT> ほんとだ。-Os の意味が殆んど無い。switch → computed goto の変換だけかと 思ってたのに。C compiler が富豪的なのはいただけないなぁ… </OT> -- Jun Inoue jun.l****@gmail*****