元スレGCCについて part8
gcc覧 / PC版 /みんなの評価 : ☆
701 = :
/usrにある既存環境上書きしてるはずだから、単純にアンインストールすると酷い目に合いそうな気が。
1) インストールされたファイル/ディレクトリの一覧を作る。
2) 標準のパッケージでインストールされるファイル/ディレクトリの一覧を作る。
3) 標準のパッケージを再インストール。
4) (1)に有って(2)に無いファイル/ディレクトリを消す。
これくらいやる必要あるんじゃない?
702 = :
>>698にあるcppと
C++もインストールした場合のlibstdc++くらいじゃないかな。
システムのクリティカルなところに使われてる可能性あるのは。
ld, libcは入ってないし、crt関係はsoじゃないし。
703 = :
>>695
ちなみにGCCのmake uninstallは効かない。それとprefix=/usrだったらまずディストリ標準の/usr/bin/gcc同じくg++,c++や
cppやgcjなどが完全に上書きされてる。フォートランは違う名前かもしれん。
一番問題は多分/usr/libのlibstdc++が上書きされてる点かな。下手するとgcc4.3入れたその前後にmakeしたアプリなどが
動かなくなるかも。てか運が悪いと既にそこへ入れた時点でlibstdc++の関連で動かなくなるアプリとか出るときあるお。
結果から言うと自分で手作業で探して削除した後、再度デフォルトで入ってたgcc系とlibstdc++のパッケージを再インスコ。
ぶっちゃけ手作業で削除しなくても多分gcc系とlibstdc++の再インスコで上書きされるから平気だと思うよ。
ただしgcc系ってのはgcc,c++,cpp,gcj,fortlanあとなんかあったような気がするけど忘れたw まあその辺全部再インスコね。
そうすれば手作業で消さなくても問題無い位復旧できるはず。
まあ違うバージョンのgccは/optとかにインスコしといた方が無難。/optにおいてもldがちゃんと機能してればlib関連は
/opt/gcc***/libを見に行くはずだから。
704 = :
OS再インストールした方が早かったりしてね。
705 = :
基本的に複数バージョン同居できるようになってるからそこまで大変じゃない。
パッケージからgcc関連入れ直して/usr/include/c++/4.3.3、
/usr/lib/gcc/$target/4.3.3、/usr/libexec/gcc/$target/4.3.3を消せば大丈夫。
707 = :
>>706
向こう見に行くの面倒だから、聞きたいポイントを整理して書け。
708 = :
お疲れ。
double func(double a, double b){double c; return (a+b);}
でreturn (a+b);
とc=a+b;return c;の違いは何?
709 = :
>>708
浮動小数点な数値のプロセッサ内での保持方法の差だっけ。
どっかのブログでSunの科学計算の手引きみたいなページが紹介されてた。
711 = :
どうやら、fld dword ptr 抜けが原因らしいです。
gcc version 3.4.4 (gcc Win/on Win2000)
では、戻り値がdoubleの関数は、return 文の所で
演算していはいけない。必ずglobalかlocalの変数に結果を入れてから、
return 変数名;
としないと、いけないようだ。
712 = :
>gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
無問題。
713 = :
gcc に-O3 のオプション付きでなら良いみたい。
714 = :
つけてもつけなくても8228.cで問題が出ない。
715 = :
そうですか、こちらの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
718 = :
はぁ? 何を寝ぼけたことを。
720 = :
すみません。
それで、問題はfunction側に有るのでは無くて、call側です。
戻ってきた直後で、ストアじゃなくてロードすると、以前の内容が
レジスタから消えます。
-O3 無し
00401400 call 00401050h
00401405 fld qword ptr [ebp-10h]
722 = :
>>720
数多の天才が気付かずに使っているコンパイラのバグを、浅学無能非才のあんたに見つけられるというのか?
思慮が足りないにも程があるぞ。
723 = :
すみません、exe おいておきます。どうぞ参考に。
http://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)
725 = :
どぞ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8841.zip
726 = :
で、結局何がしたいんだ?
デバッグだったら一人で勝手にやってろよ。
勿論、その場合はスレ違いだ。
727 = :
gccに-O3オプションは必須か?
728 = :
>>727
質問の意図は? >723の言っていることなら只の世迷言だから無視しておけ。
729 = :
730 = :
どぞ
731 = :
ソートでスタック喰いつぶしるような?
732 = :
戻り値を一旦変数に代入すれば大丈夫?
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 = :
浮動小数点演算ではまった話
http://0xcc.net/blog/archives/000164.html
これかな…?
734 = :
いいえ。8828.cがまともに動かないのは自前で実装したクイックソートが腐っている所為。
736 = :
結果がスタック渡しなのに、結果をスタックに書き込んでないからみたい。
738 = :
でも、>>720のコードになってる?
740 = :
>>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 = :
return (st.ascore + st.bscore + st.cscore);
と
double a = (st.ascore + st.bscore + st.cscore);
return a;
では、吐く汗のコードに違いがあるのですが、何が違うのでしょうか?
742 = :
return (st.ascore + st.bscore + st.cscore);
結果の戻り値の数値が80bit表現
double a = (st.ascore + st.bscore + st.cscore);
return a;
結果の戻り値の数値が64bit表現
743 = :
なるほど。なんとなく、わかりました。
744 = :
GCC関係なく、x86一般の話のようにしか思えない。
745 = :
>>744 何告白ってるんだ。
ソフト板 http://pc11.2ch.net/software/
746 = :
うぜえ
748 = :
-fverbose-asm
749 = :
>>748
ありがとうございます
750 = :
gcc *.c -S
とするとAT&T Syntaxで*.sができますが、Intel Syntaxで出すことはできますか?
みんなの評価 : ☆
類似してるかもしれないスレッド
- GCCについて part9 (1001) - [95%] - 2011/9/2 21:17 ○
- GCCについて part10 (538) - [90%] - 2018/7/5 20:30
- Cygwin + MinGW + GCC 相談室 Part 8 (938) - [18446744073709551610%] - 2022/10/28 8:00
トップメニューへ / →のくす牧場書庫について