SL-C3000一日目
まだOpenSSHとその設定のためのembeddedkonsoleしか入れてない。SL-C760も似たようなもんだったが。
iWMMXt
==== iwmmxt.c
main() { asm ("wzero wR0"); }
==== --
$ arm-linux-gcc-3.4.2 -mcpu=iwmmxt iwmmxt.c
$ ./a.out
illegal instruction
ちょっと焦った。iWMMXtのドキュメントを頭からじっくり読んで、コプロセッサCP0とCP1を有効にしないとSIGILLになりますよ、との記述を見つけて一安心。有効にすれば使えると考えてオーケー?
CP15って特権モードでなくてもいじれたっけ?無理だったらカーネルモジュールを書かないといかんな。カーネルソースまだ〜?(AA略
仮にコプロを有効したとして、Linuxカーネルがcontext switchの時にちゃんとiWMMXtレジスタを保存してくれるのかはちょっと疑問。
出来るかどうかわからない予定
Intelのドキュメントのメモ
- Intel(R) PXA27x Processor Family Video Decoder Display Performance Optimization Application Note / すっげー参考になる
- Optimization Technology for the Intel(R) PXA27x Processor Family White Paper / PXA27xで新たに導入された最適化技術についての概要
- Intel PXA27x Processor Family Developer's Manual / PXA27xのマニュアル(ソフトウェア開発者向け)
iWMMXt使えるみたい
CP15のCPARレジスタにアクセスするモジュールを作って、CP0/CP1を有効にした後にiWMMXt命令を実行すると、SIGILLが発生することはなかった。
しかし、予想通りというか、サスペンド->レジュームすると強制的にCP0/CP1が無効になる。SIGCONTが送られるタイミングにもよるが、iWMMXtを使うソフトを実行している間はサスペンドが出来ないってわけだ。この様子だと標準ソフトウェアは一切iWMMXtを使っていないと思う。
こちらの方のソースをもとに作ったモジュール。insmod -f xscale_cpar.oすると/proc/xscale/CPARが作成されるので、echo 3 >/proc/xscale/CPARなどとすればiWMMXtが使えるようになる。