|
昨日のカウンタ: 今日のカウンタ: |
PXA250の乗算は 32bit×32bit → 64bit という事らしいんですが、
long long int a, b, c; c = a * b;
だと当然 a, b の上位桁の計算までしちゃうんですよねぇ。入力はそこまで要らないんですが、
long int a, b; long long int c; c = a * b;
だと a * b を long int で計算してしまうような気も。んー。
gcc が吐き出すアセンブリのコードを読めと言われそう。(^^;)
ガイアの夜明けとか観ながら Linux Zaurus上のgcc 2.95.1で gcc -S してみました。
よく分かんないながらLinux Zaurusでアセンブリプログラミングを参考に眺めてみると
・long a, b, c; c = a * b; では mul とかいう命令(32bit * 32bit → 32bit)
・long a, b; long long c; c = a * b; でも同様
・long long a, b, c; c = a * b; では umull (32bit * 32bit → 64bit) の命令がっ。でも、その後に mul が二回出てきてて、当然上位桁まで計算してる模様。それ、要らないんですが・・
・long a, b; long long c; c = (long long)a * (long long)b; では smull (符号付き 32bit * 32bit → 64bit) の命令がっ。他によくわかんない命令がたくさん出てますが、多分かけ算関連はこれだけ。わーい。
これなら PetitePeinture の中でアセンブリのコードを直接書かなくても平気。
つーか、家に帰らずに何やってんだか。(泣) よーし、WBS観ながら今度こそ仕事だっ。(;_;) ←バカ過ぎ