YamaKen
yamak****@bp*****
2005年 10月 14日 (金) 08:50:38 JST
At Fri, 14 Oct 2005 08:40:29 +0900, mover****@hct***** wrote: > On Friday 14 October 2005 07:51, YamaKen wrote: > > ・NULL|tagによく使う定数をエンコード。大抵のアーキテクチャで > > immediate operandに収まる事を期待。CONSP等にNULLチェックが必要 > > になるけどそこは妥協 > たぶん僕の弱いマシン寄りの話だと思うのですが、ここの意味がちと分からないの > で、少し説明して貰えませんか? 32bit定数を扱う場合は大抵以下のような2命令使う流れになるんですが、 1) レジスタに32bit定数をロードする(重めの操作) 2) 1)でロードされたレジスタを使って比較・演算等を行う 前述のNULL|tag形式だと値が3bitに収まるので、以下のように1命令で 済む場合があります。 1) 命令中に埋め込まれた狭bit幅の値を使って直接比較・演算等を行 う たぶん今太田さんが触ってるM32Rでも後者の操作はできると思うんで、 命令表を確認してみると違いが実感できると思います。 それからCONSPの方も一応説明しとくと、tagを確認した後に!NULLも確 認しないとconsだと確定できなくなるって事です。 ------------------------------- ヤマケン yamak****@bp*****