[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 04/06 12:52 / Filesize : 164 KB / Number-of Response : 765
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

GCCについて part8



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

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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<164KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef