ループ命令
昨日、というか今朝のエントリに、もなかさんよりコメントをいただきました。
ループを実装するときにループ命令を使うか条件ジャンプを使うかですが、速度が必要なければもちろんどちらでもいいです。どちらでもいいだけに趣味の時には真剣に考えねば(w
ハードウェア・ループの利点は次の3点に集約できます。
私の場合、もっぱら最後の理由でループ命令を使っています。「えーと、N回のループをまわすときって、ループ変数の初期値はNでよかったんだっけ。デクリメントはループ・トップ?ボトム?」といったことを考え出すと、それだけで混乱するたちなのです。また、信号処理という分野の性質上、ハードウェア・ループを使わなくてもいい場面ではC言語を使うことが多いのも一因かもしれません。はっきりいってハードウェア・ループが不要な場面ではC言語です。そんな風ですので、今回のように速度がいらなくても、ついつい慣れているのでループ命令を使っています。
ループ命令には独特の難点もあります。
こういったことはDSPのハードウェア・ループが実行ユニットではなくプリフェッチ・ユニットに実装されていることからきています。プリフェッチ・ユニットは汎用RISCの場合おまけ的な存在です。しかしDSPにおけるプリフェッチ・ユニットはハードウェア・ループというDSPの存在意義にかかわる命令の実行をゆだねられています。
*1:たとえばDSP56000とか