2004年12月2日木曜日

インラインアセンブラでのCマクロ

インラインアセンブラでCのマクロを使いたくなることがあります。
例えば以下のようなマクロ。WORDの掛け算をします。

#define MULLWD(mmDst, mmVal, mmTmp) \
movq mmTmp, mmDst \
pmullw mmDst, mmVal \
pmulhw mmTmp, mmVal \
punpcklwd mmDst, mmTmp

で、このマクロをインラインアセンブラ中で使用します。
__asm {
......
MULLWD(mm0, mm2, mm3)
MULLWD(mm1, mm2, mm3)
......
}

しかしこれはコンパイルできません。
MULLWDマクロは以下のように解釈され、改行が抜けてしまっているからです。

#define MULLWD(mmDst, mmVal, mmTmp) movq mmTmp, mmDst pmullw mmDst, mmVal pmulhw mmTmp, mmVal punpcklwd mmDst, mmTmp

VCでは以下のように各命令の前に __asm と書くことでコンパイルできるようになります。

#define MULLWD(mmDst, mmVal, mmTmp) \
__asm movq mmTmp, mmDst \
__asm pmullw mmDst, mmVal \
__asm pmulhw mmTmp, mmVal \
__asm punpcklwd mmDst, mmTmp

2004年11月10日水曜日

Ganttproject

Ganttproject なるものをたまたまsourceforgeで見つけたので触ってみたらなかなか良さそう。
今度ガントチャートを書く必要に迫られたら使ってみようと思います。

2004年10月23日土曜日

Win32 GUI Generics

Win32 GUI Generics というライブラリを見つけました。
Windows の GUI プログラミングをかなりC++っぽくできそうで、かなり興味ありです。
でもまだまだ発展途上のようで、今後に期待!
WTL とどちらが使いやすいかな?

2004年10月12日火曜日

Numerical Recipes in C

9月は本買いませんでしたが、10月は Numerical Recipes in C を買いました。
数値計算の問題にあたったときに手元あれば便利ですね。
内容はぱらぱらとしか読んでいませんが、面白そうな項目から目を通していこうかなと。

ちなみに、洋書では新しい版が出ているらしいですが、日本のも改訂されないのかなー。
英語のは、下のURLからオンラインで読むこともできます。
http://www.nr.com/

2004年9月16日木曜日

MFCメモ

モードレスダイアログをつくるとき、newでインスタンスをつくったら
PostNcDestroyをオーバーライドしてその中でdelete thisする。
そうすると、ダイアログが閉じられたときに自動的にdeleteされる。

2004年9月1日水曜日

VisualCの最適化 - 拡張命令セットの有効化

VisualC++2003ではコンパイルオプションに「拡張命令セットの有効化」というのがあります。
これをSSEにすると、なんとCで書いた普通のfloat計算のコードがSSEのスカラー演算命令を使ったコードとしてコンパイルされて出力されます!
今まではsqrtなどの組み込み関数がSSEで最適化されたされたやつに切り替わるくらいかなと思っていたのですが予想以上の効果があるようです。
同様にオプション設定でSSE2を選択するとdouble計算のコードも最適化されるものと思われます。(こっちは未確認)


2004年8月7日土曜日

Hacker's Delight

今月はHacker's Delightを買いました。
かなり以前から欲しいと思っていた本なのですが、後回しになっていました。

内容はまだほとんど読んでいないですが、
ビット演算だけでびっくりするようなことをしています。

計算速度が要求されるようなプログラムを書く人にとってはすごく参考になる本です。

  © Blogger template 'Isolation' by Ourblogtemplates.com 2008

Back to TOP