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

[WitchTech 00658] Re: ご返事ありがとうございました。



なるなると申します。

# うえけんさんは当然わかっておられるでしょうけど ...

 > <3A71A49B.44260BCC@pluto.dti.ne.jp>
 > From: ueken@pluto.dti.ne.jp
 > Date: Sat, 27 January 2001 01:23:55 +0900

 > Cで最適化する場合の注意点は、

 > 2.構造体のメンバー配置に気をつける。確かターボCは構造体
 > をそのまま並べて配置したはずなので、奇数番地から2バイトの
 > メンバーが開始しないようにする。

# そのままって padding が入らないという意味ですよね。(自動的に並べ替えるコ
ンパイラはないと思うので)

変数を word align (TC2 でできるかどうかはしりません) させて、奇数バイトの
メンバーは構造体の後半にうまく並べて書く。でしょう。


 > 4.ビットフィールドは使わない。unsignedも使わない(多くの
 > 場合unsignedは不要)。2のべき乗の乗除算はシフトにする。
 > 扱う数値にマイナスがありえないからといって、安易にunsigned
 > を使わないこと。

2 のべき乗の除算をシフトで書けるのは場合によります。(必要な精度によっては
問題にならないでしょうけど。)


あと 1. と同じことですが、

1.1 共通部分式を手で括りだす。たとえば

	c3 = csrc[3*2+j];
	c2 = csrc[2*2+j];
	c1 = csrc[1*2+j];
	c0 = csrc[0*2+j];
	cdst[0*2+j] =
		(c3 & 0x80) >> 4 |
		(c2 & 0x80) >> 5 |
		(c1 & 0x80) >> 6 |
		(c0 & 0x80) >> 7 ;
	cdst[1*2+j] =
		(c3 & 0x40) >> 3 |
		(c2 & 0x40) >> 4 |
		(c1 & 0x40) >> 5 |
		(c0 & 0x40) >> 6 ;

	/* cdst + j も計算してしまったほうが良いかも */

こんな感じです。(効果が出るとは限りませんが ...)

# 前に話題になったコードに関していうと cdst と csrc が重ならない保証がない
ので、コンパイラにはこの書き換えは行えません。(危ない最適化オプションを指
定すれば別ですが。)



ML Archives