のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,895人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレGCCについて part8

    gcc覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - pragma + - spec + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    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 = :

    >>714

    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で出すことはできますか?


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - pragma + - spec + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について