[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: allegro



>>>>> On Thu, 10 Oct 2002 11:13:15 +0900, Osamu OISHI <oishi@ims.ac.jp> said:

>> mmx についてですが、mmx を使うように configure したバイナリって、mmx
>> なしの状況だと動作しないんでしょうか?
>> 
>> もし、動作するなら、デフォールトで使うようにしてしまって問題ないです
>> よね?

> 記憶が曖昧になって来てますが
> mmx関係はi386固有のアセンブラで記述されていて、
> 非mmxマシンでこれ叩くと誤動作します。

MMX命令やSSE命令は、その命令をサポートしていないCPUで実行すると、
当然 SIGILL などが発生して動作しなくなります。
しかし、起動時にCPUを判別して、MMX命令が存在すれば使う、存在しな
ければ使わないというように処理を分けることは可能です。

ですから、必ずしもMMXを有効にしてコンパイルしたアプリケーションが、
MMXなしのCPUでは動作しないとは限りません。もちろんこれはアプリケー
ションが、そこまで気を使って記述されているかに依存します。

で、allegro がどうなのかですが、ALLEGRO_MMX で #ifdef されている
アセンブリ言語のソースは下記の通りです。
	i386/iblit16.s
	i386/iblit32.s
	i386/iblit8.s
	i386/iscanmmx.s
	misc/icolconv.s
このうち、i386/iscanmmx.s 以外のソースは全て、cpu_capabilities を
参照して、MMX命令を使うか否かを動的に判別していることが分かります。

残る i386/iscanmmx.s ですが、これについては、pol3d.c:_get_scanline_filler()
で、やはり cpu_capabilities を参照して、MMX機能の存在するCPUだけで
i386/iscanmmx.s の関数を呼び出し、その他の CPU では i386/iscan.s の
関数を呼び出していることが分かります。

というわけで、allegro については、MMX を有効にしてコンパイルしたバイナ
リが、MMX なしの CPU でちゃんと動作しそうです。
ただし、ソースをちょっと覗いただけで、実際に走らせて確認したわけでは
ないのですが...

というわけで、allegro に関しては、(toolchain が MMX 命令をサポートして
いる限り) 常に MMX を有効にしてコンパイルしても問題ないと思うのですが、
どうでしょう?

>> build を行なうマシンでは、そもそも X server 自体がインストールされてい
>> ない ($DISPLAY を他のマシンに設定している)、ただし X client を build
>> するために、X のライブラリは一式インストールされているというような状況
>> もありうるわけです。

> これは同意します。
> X -versionを使っているのは現在はこれしか手が無いからで、
> mk.confあたりで指定してくれるのなら、それを使います。

これに関しては、
	Date: Wed, 9 Oct 2002 21:38:07 +0900 (JST)
	Message-Id: <200210091238.VAA10348@srapc342.sra.co.jp>
に書いた方法を使えば cross 環境でも動作しますから、こちらの方法で
問題ないですよね。

> mk.confあたりでUSE_MMX、USE_OSS、XFEE86_VERSIONあたり定義してくれるなら
> packageは今のところXの違いの2個だけになるので、分けてしまいます。

他の pkgsrc が XFree86-3.x と 4.x で pkgsrc を分けてないので、
allegro に関しても、一つにまとめちゃって良い気がします。
もし分けるなら、他の pkgsrc もちゃんと分けないと、あんまり意味が
ないような気がするので。

ちなみに DGA は、Direct Graphics Architecture の略で、X client 側が
frame buffer に直接アクセスするための extension だったと思います。
2D アプリケーションからも有効な拡張です。
--
soda