- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:07:39 ]
- 史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。
GNU本家のGCCページ gcc.gnu.org/ Binutils - Collection of binary utilities ←これも必要だぞ。 www.gnu.org/directory/GNU/binutils.html GNU Binutils sources.redhat.com/binutils/ GCC online documentation gcc.gnu.org/onlinedocs/ Installing GCC gcc.gnu.org/install/ GCC Timeline gcc.gnu.org/releases.html#timeline Calendar gcc.gnu.org/develop.html#timeline 前スレ GCCについて part7 pc11.2ch.net/test/read.cgi/tech/1145357824/l50
- 708 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 12:22:48 ]
- お疲れ。
double func(double a, double b){double c; return (a+b);} でreturn (a+b); とc=a+b;return c;の違いは何?
- 709 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:12:02 ]
- >>708
浮動小数点な数値のプロセッサ内での保持方法の差だっけ。 どっかのブログでSunの科学計算の手引きみたいなページが紹介されてた。
- 710 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:30:28 ]
- 参考にさせてもらいます。
> gcc kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8828.c を、これで修正したら動いた理由が知りたいのですが。 pc11.2ch.net/test/read.cgi/tech/1232029287/350
- 711 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:17:01 ]
- どうやら、fld dword ptr 抜けが原因らしいです。
gcc version 3.4.4 (gcc Win/on Win2000) では、戻り値がdoubleの関数は、return 文の所で 演算していはいけない。必ずglobalかlocalの変数に結果を入れてから、 return 変数名; としないと、いけないようだ。
- 712 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:03:28 ]
- >gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
無問題。
- 713 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:13:02 ]
- gcc に-O3 のオプション付きでなら良いみたい。
- 714 名前:712 mailto:sage [2009/02/07(土) 15:14:01 ]
- つけてもつけなくても8228.cで問題が出ない。
- 715 名前:713 mailto:sage [2009/02/07(土) 15:29:08 ]
- そうですか、こちらのPCはLavie C LC60H 確か32bitです。
exeか、逆アセンブル結果でも、掲示板に張って送ります? -O3 無し =7>===== 00401050 push ebp 00401051 mov ebp, esp 00401053 fld qword ptr [ebp+10h] 00401056 fadd qword ptr [ebp+18h] 00401059 fadd qword ptr [ebp+20h] 0040105C pop ebp 0040105D ret
- 716 名前:712 mailto:sage [2009/02/07(土) 15:53:53 ]
- それの何が問題だと言いたいのか判らない。
--8228.s:total() _total: pushl %ebp movl %esp, %ebp fldl 16(%ebp) faddl 24(%ebp) faddl 32(%ebp) popl %ebp ret -- 確かに-O3つけたらインライン展開されるから関数自体見えなくはなるけど。
- 717 名前:713 mailto:sage [2009/02/07(土) 16:01:34 ]
- fadd した結果が消えて、return値にセットされているか?
fadd の次はpopなので、結果の値が消えるのでは。
- 718 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:03:10 ]
- はぁ? 何を寝ぼけたことを。
- 719 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:04:29 ]
- ・faddした結果はどこに格納されるか
・pop ebpは何をどこに戻すか ・doubleの戻り値はどこに格納されるか 少し勉強してこい。
- 720 名前:713 mailto:sage [2009/02/07(土) 16:28:54 ]
- すみません。
それで、問題はfunction側に有るのでは無くて、call側です。 戻ってきた直後で、ストアじゃなくてロードすると、以前の内容が レジスタから消えます。 -O3 無し 00401400 call 00401050h 00401405 fld qword ptr [ebp-10h]
- 721 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:35:22 ]
- fldはプッシュなんだよ
- 722 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:59:47 ]
- >>720
数多の天才が気付かずに使っているコンパイラのバグを、浅学無能非才のあんたに見つけられるというのか? 思慮が足りないにも程があるぞ。
- 723 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:07:29 ]
- すみません、exe おいておきます。どうぞ参考に。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8840.zip cygwin1.dll version 1005.25.0.0 (0.156 2008-06-12 19:34)
- 724 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:18:27 ]
- Cのソースは?
- 725 名前:723 mailto:sage [2009/02/07(土) 17:23:24 ]
- どぞ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8841.zip
- 726 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:47:35 ]
- で、結局何がしたいんだ?
デバッグだったら一人で勝手にやってろよ。 勿論、その場合はスレ違いだ。
- 727 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:51:49 ]
- gccに-O3オプションは必須か?
- 728 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:53:05 ]
- >>727
質問の意図は? >723の言っていることなら只の世迷言だから無視しておけ。
- 729 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:57:19 ]
- >>714
- 730 名前:711 mailto:sage [2009/02/07(土) 19:05:31 ]
- どぞ
- 731 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:47:18 ]
- ソートでスタック喰いつぶしるような?
- 732 名前:711 mailto:sage [2009/02/07(土) 19:57:07 ]
- 戻り値を一旦変数に代入すれば大丈夫?
354 :325 :2009/02/07(土) 04:54:11 >>326 double a; do{ while((a=total(st[pl])) > x) pl++; while((a=total(st[pr])) < x) pr--; 355 :325 :2009/02/07(土) 05:01:10 >>326 double a; do{ pc = (pl + pr) / 2; if((a=total(st[pc])) == key) return pc; else if((a=total(st[pc])) > key)
- 733 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:58:54 ]
- 浮動小数点演算ではまった話
0xcc.net/blog/archives/000164.html これかな…?
- 734 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:08:49 ]
- いいえ。8828.cがまともに動かないのは自前で実装したクイックソートが腐っている所為。
- 735 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:40:06 ]
- total関数をコメント側のコードにすると動く。
- 736 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:19:06 ]
- 結果がスタック渡しなのに、結果をスタックに書き込んでないからみたい。
- 737 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:47:30 ]
- >結果がスタック渡しなのに
いいえ、FPUレジスタ渡しです。
- 738 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:50:46 ]
- でも、>>720のコードになってる?
- 739 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 22:30:25 ]
- だから、FPUの勉強してこい。FPUレジスタはFPU内部(と言っても今や単にCPU内部だが)で
スタック上に利用するようになっている。だからfldを繰り返したら複数のレジスタに順に格納されるわけ。
- 740 名前:713 mailto:sage [2009/02/07(土) 22:36:24 ]
- >>733 参考にしました。結局、gcc 3.4.4はdoubleを使うと「ときどき」桁落ちする。
double total(){return (st.ascore + st.bscore + st.cscore);} =7>===== 00401050 push ebp 00401051 mov ebp, esp 00401053 fld qword ptr [ebp+10h] 00401056 fadd qword ptr [ebp+18h] 00401059 fadd qword ptr [ebp+20h] ;;結果はFPUスタックに置く(80bit値) 0040105C pop ebp 0040105D ret if(st[pc].number == key) 00401153 call 00401050h 00401158 fld qword ptr [ebp+10h] ;;keyメモリ内容をFPUスタックに入れる(sp=sp+1)(64bit値) 0040115B fxch st(1) 0040115D fucompp ;;数値比較(80bit値 : 64bit値) double a; if((a=st[pc].number) == key) 00401153 call 00401050h 00401158 fstp qword ptr [ebp-18h] ;;メモリ内容をFPUスタックから出す(sp=sp-1)(64bit値) 0040115B fld qword ptr [ebp-18h] ;;メモリ内容をFPUスタックに入れる(sp=sp+1)(64bit値) 0040115E fld qword ptr [ebp+10h] ;;keyメモリ内容をFPUスタックに入れる(sp=sp+1)(64bit値) 00401161 fxch st(1) 00401163 fucompp ;;数値比較(64bit値 : 64bit値)
- 741 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:22:43 ]
- return (st.ascore + st.bscore + st.cscore);
と double a = (st.ascore + st.bscore + st.cscore); return a; では、吐く汗のコードに違いがあるのですが、何が違うのでしょうか?
- 742 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:30:28 ]
- return (st.ascore + st.bscore + st.cscore);
結果の戻り値の数値が80bit表現 double a = (st.ascore + st.bscore + st.cscore); return a; 結果の戻り値の数値が64bit表現
- 743 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:34:10 ]
- なるほど。なんとなく、わかりました。
- 744 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:03:32 ]
- GCC関係なく、x86一般の話のようにしか思えない。
- 745 名前:706 mailto:sage [2009/02/08(日) 02:51:15 ]
- >>744 何告白ってるんだ。
ソフト板 pc11.2ch.net/software/
- 746 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 04:22:49 ]
- うぜえ
- 747 名前:デフォルトの名無しさん [2009/02/14(土) 06:48:19 ]
- gcc -S でコンパイルしたときにコンパイラオプションをアセンブラソースに出力する
オプションってありますか?
- 748 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 07:44:24 ]
- -fverbose-asm
- 749 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 08:43:07 ]
- >>748
ありがとうございます
- 750 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:15:00 ]
- gcc *.c -S
とするとAT&T Syntaxで*.sができますが、Intel Syntaxで出すことはできますか?
- 751 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 02:40:48 ]
- -masm=intel
間違った命令を吐いてしまうという噂を聞いたことがある。 最近の状況はわからん。
- 752 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:18:14 ]
- >>751 へー。知らんかった
- 753 名前:750 mailto:sage [2009/03/06(金) 23:58:24 ]
- >>751
tnx
- 754 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:03:18 ]
- 生成コードが心配ならgccには普通にオブジェクト作らせて、objdumpに
欲しい方のシンタックスでダンプさせるのはどう?
- 755 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:37:29 ]
- そっちもおかしかったりして。
てことはないと思うが、読みにくくなるからなあ。
- 756 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 05:26:47 ]
- そもそも噂ってなんだよ?w
毎週snapshotが出て、全世界で最も多く使われているコンパイラが、 判りやすいbugをいつまでもほっとくわけ無いだろ。 最も多く使われている筈のOSは、10年もディレクトリ掴んだまま 放さないbugが取れなくて、たまにイライラするけどな。
- 757 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 09:48:26 ]
- masmバックエンドって使われてないだろうし
- 758 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 11:41:18 ]
- 組み込み系で結構使われてますよ。> masm=intel
まあnasmでなんとかなる昨今ですが。
- 759 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:12:36 ]
- >>767
なれりゃAT&Tでも特に困らんしなあ。 あれは完全におまけ機能だよなあ。 >>768 たぶんそのmasmは関係無いと思う。
- 760 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:14:02 ]
- >>759
gcc -masm=intel → 組み込み評価ボードのアセンブラ(by Intel)
- 761 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:13:31 ]
- >>759
767と768に期待
- 762 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 00:59:10 ]
- 64bit環境で
gcc -O2でコンパイルする場合と gcc -m64を付ける場合でゲロったバイナリの内容って異なることは ありえないですよね?
- 763 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 02:22:11 ]
- ありえるのでは?
gcc -O2とgcc -m64 -O2が違うのはあり得ないというのならともかく。
- 764 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 18:24:57 ]
- 4.5
|

|