1 名前:デフォルトの名無しさん [2006/04/18(火) 19:57:04 ] 史上最強かもしれないツール、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
856 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:40:30 ] >>854 言語にはライセンス/コピーライトがありません。
857 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:41:48 ] マジレス禁
858 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:42:35 ] やけに伸びてるな、というときは期待できない と予め思いつつ見たけど、やっぱりウゼェ…… なんでこういうのにだけは以上に喰い付きがいいんだ
859 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 10:49:09 ] マジで言ってるわけじゃないだろw
860 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 13:11:54 ] ぐくっ
861 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:19:13 ] >>856 言語の仕様書がGFDLなんだろう、たぶん。
862 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:02:05 ] ADAスレがもう織田信長スレしか無い件
863 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:02:58 ] 違った武田信玄だったけどもう落ちてるオワタ
864 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:16:05 ] 英語は発音大事と言ってはいるものの、実際に インペろぅベド(imperoved)とか言われるとムカッと来るからな。
865 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 17:17:55 ] グロゥバロゥとかヴァアミアンとかね
866 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 01:22:29 ] 織田信長って言語まじであるの?
867 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:28:47 ] >>864 そんな英単語は無い
868 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 11:11:33 ] いまgdbのバグ?みたいなものを追いかけてて、再現条件が ・ある64bitローカル変数(long long)が ・最適化によってもoptimized outされずに ・スタックに取られずレジスタに直接アサインされる というあたりにあるのではないかと考えてます。この時 (gdb) p var の 出力での sign bit のハンドリングが違うような感じ>gdbのバグ? で、これの再現コードを作ろうとしているのですが、 ・レジスタに乗せる方向に誘導 -> register ・最適化させない -> volatile? にすると、register は無視で普通にメモリに乗ってしまってうまく いきません。で、 volatile register int64_t max asm("%edi:%esi"); でそんな風にならないかと試し中なのですが、↑はレジスタ1つ(32bit)なら いけるものの、2つで64bit変数を表したい時の書き方がわかりません。 どなたか教えてくださいませ・・・
869 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 12:47:51 ] アセンブリ手で書けばいいじゃん
870 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:00:44 ] デバッガから見える変数にバインドされるレジスタを、どうやって アセンブリ手書きで設定するのか、正直わかりません。 シンボルデバッグ情報に変数<->レジスタ・メモリアドレスマッピングは 入っていると思うんですが、これも手書きできるということ?もしかして インラインアセンブラではなく、フルアセンブラで書くという話なら それはちょっと自分の能力を越えてるような・・・
871 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:05:42 ] >>870 こんな関数でもコンパイルしてみりゃ何をすればいいか判るんじゃね? -- long long func(long long foo) { return foo; }
872 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 18:20:08 ] >>971 それって .debug_* セクションを自分で作れとやっぱり言ってる? info gdb-int してみたけど、激しくハードル高い・・・
873 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 18:37:11 ] >>872 戻り値は64bitのレジスタ変数と同じ状態になるわけだが。 ついでに、gcc -S-gすればデバッグ情報が漏れなく埋め込まれるわけだが。 もしかして、その程度の知識もないのにデバッガを疑っちゃってるわけ?
874 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 19:19:00 ] >>873 gdbが黒だとは言ってなくて、ただgdbからの見え方がその条件差で 必ず違うので、もっと詳しく見たいと思ってます。 そのコードだとgdbからは変数はレジスタにバインドされて見えないので 別の方法をまだ考えてますが、-Sのダンプでデバッグ情報埋め込み方法を 調べられるという考えは頭から抜けてました。やってみます。
875 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 09:32:01 ] もっと謙虚になって出直せ。
876 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:52:19 ] gdb のソース読めばいいのでは?
877 名前:868 mailto:sage [2007/09/16(日) 22:08:28 ] すみません、>>875 の通り、私ごときのレベルでしていい話ではなかったと 痛感しているので、全部なかったことにして下さい。このスレに書いていいと 認めてもらえる程度になるまでROMってます。
878 名前:デフォルトの名無しさん [2007/09/18(火) 13:32:01 ] i686環境で例えばPPC用に何らかのアプリなどをクロスコンパイリンゲすると 本当にPPC環境で動くもんなの??? 玄箱HGでも買おうかと思うのだが、さすがに玄箱でビルドとかすると、 PPC266MHzじゃつからろうなあ、と思って、 できれば速いi686環境でPPCにガチガチに最適化してから玄箱に転送できれば。
879 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:49:25 ] 何をビルドするの? ほとんどバイナリパッケージが揃っているけど? > 玄箱debian 「ガチガチに最適化」とかヲタ臭いことがやりたいなら、 ソースからバイナリパッケージを再ビルドすれば?
880 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:49:31 ] >>878 簡単なテストプログラム書いて、動くかどうかやってみればいいんじゃないの?
881 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:59:31 ] >>880 まだ買ってないだろw
882 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 14:01:16 ] >>881 linuxじゃないけど、クロス環境でやったことあるけど...
883 名前:デフォルトの名無しさん [2007/09/18(火) 14:28:24 ] クロス・ダァイッチュラント
884 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 14:29:50 ] kurohako遅いよ
885 名前:デフォルトの名無しさん [2007/09/18(火) 14:58:58 ] ゲーツェーツェーを来んあぴるするのに4時間くらいかかりそうだな Pentium3 500MHzでさえ4時間かかったのだから
886 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:04:49 ] コンパイルを4時間とか考えられないし見たことも無い俺は素人
887 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:24:52 ] X68kでgcc1.3のコンパイルに一晩かかった時代もありました
888 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:32:21 ] 動画のエンコードをやるようになると、4時間というのは大した時間に思えなくなる。 2passで47時間とかあるからな。
889 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:31:48 ] それはさすがにPCごと買い替えとか考えるべき時間のかかりようだと思う。
890 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:06:07 ] 24時間ビーテレだから 1時間2時間コンテンツでそれだけかかったらアレだが。
891 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:06:17 ] >>885 もっとかかったような気もするが… 寝る前にmakeしておくと、起きるまでには終わってるくらい。
892 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:13:12 ] 起きたらエラーで止まってたとか?
893 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:59:15 ] 昔は X11 をコンパイルするのに12時間とか普通やったよねぇ…
894 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:19:35 ] 今はOpenOfficeが身近で最もヤヴァいヤツだと思うんだがどうよ?
895 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:22:28 ] Qtのビルドはまいったな。ホントに一晩かかってしまった。
896 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:04:58 ] 時間かけたくないから、クロスコンパイルするって話じゃないのか?
897 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 09:59:48 ] 今でもクロスコンパイルが難しいアプリもあるけどね。 コンパイル時に実行ファイルを生成して利用するような奴。 昔Linux Zaurusで結構苦労した。
898 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:18:38 ] ちゃんとしたプロジェクトなら configure等でhostとtargetを指定できる
899 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:15:18 ] そもそも、クロスと名の付く奴はどれもこれもむずかしい。 「クロスカウンター」狙ってできる奴などいないであろうほど難しい。 「クロスコンパイル」やり方がまず難しいし、それでいいのかどうかの判断も難しい。 「マクロス」ガンダムのパクリなのか何なのか、評価の付け方が難しい。 「セクロス」難しい。
900 名前:デフォルトの名無しさん [2007/09/19(水) 15:25:33 ] GCC5になって3系で作ったときのバイナリの実行速度と4系の新機能がついに統合される夢を見たこともある。
901 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:33:37 ] ia32の最適化は限界なんだろ? 世の流れは爆速、爆熱CPUを求めてるみたいだね?
902 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:31:06 ] 流れは爆数コア、爆並列だ。
903 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:31:48 ] え、OSがついていけてないような?
904 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:44:53 ] 時代はオプテロン
905 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:55:13 ] >>903 そこで仮想化ですよ
906 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:48:48 ] いきなり豆知識 「殺菌灯」 ディパートメントゥストゥア(英語は発音大事だがこのように書くと非常にムカつくので注意が必要)などでよくある殺菌灯は 何か特別なものだと思い込んでいるのもいるが、あれは蛍光灯と同じである。 蛍光灯というのは水銀蒸気を封入し、そこに電荷をかけることで強力なUV-Cと呼ばれる紫外線を発生させる。 (封入されているのは水銀蒸気であるから、割れた蛍光管のそばにいるのは危険である) 蛍光灯と殺菌等の違いは、この紫外線をどう利用するかによって異なり、 蛍光物質で紫外線を吸収して可視光線に変換するのが蛍光灯 そういうことをせず、直にUV-Cを出すのが殺菌灯 というわけだ。 UV-C領域の紫外線は殺菌性に優れるが、皮膚に深く浸透して細胞まで害を及ぼすため 直視してはいけないのである。
907 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:50:44 ] GCCとどういった関係が
908 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:09:59 ] >>907 >水銀蒸気で殺菌する まで読んだ
909 名前:デフォルトの名無しさん [2007/09/19(水) 21:35:13 ] ↓で誘導されますた マルチスレッドプログラミング相談室 その6 pc11.2ch.net/test/read.cgi/tech/1187008532/ 【OS】 Debian Etch Linux kernel 2.6.18 【言語】 C pthread 【実行環境】 GNU gdb 6.4.90-debian gcc (GCC) 4.1.2 gdbでのマルチスレッドのデバッグ中、任意のスレッドでステップ実行をしていると とつぜんカレントスレッドが切り替わり、 ステップ実行していたスレッドの実行位置が失われる現象に遭遇します。 デバッグ対象のプログラムは、動作確認がとれているオープンソースのプログラムです。 原因、回避法等ご存知のかた、ご教示いただけないでしょうか
910 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:59:00 ] >>909 裏のブレークも引っかかった
911 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:12:45 ] >>910 仮に別スレッドのブレークポイントでスレッドが切り替わったとしても threadコマンドで元スレッドにもどれますよね? 切り替わった時点でステップ実行していたスレッドの現在位置が??() (こんな表示) になって元に戻れなくなってしまいます。
912 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:39:25 ] GCC4.2.2を使ってました。このスレを読んでいたら4.1か4.3にした方が良いような気がしてきたので 4.3をコンパイルしたらエラーもなく終わったのでインストール。 しかし。。。カーネルのコンパイルが出来ません(TT) getnstimeofdayとかudivdi3とかのエラー関係がでます。おとなしく4.1系に戻そう・・
913 名前:デフォルトの名無しさん [2007/09/22(土) 23:26:06 ] Linux(x86,32bit)で下記プロセサを使っている場合、-mXXX や -mcpu=XXX や -march=XXX には何を書くのが良いのでしょうか? processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 47 model name : AMD Athlon(tm) 64 Processor 3200+ stepping : 2 cpu MHz : 999.876 cache size : 512 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm ts fid vid ttp tm stc bogomips : 3537.29 clflush size : 64
914 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:46:49 ] -march=athlon
915 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:26:42 ] -march=athlon64
916 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 00:59:43 ] >>913 ゲントとかいうLinuxのサイトからですが gentoo-wiki.com/Safe_Cflags
917 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:33:38 ] じぇんつー
918 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:39:33 ] >>913 -march=k8 -msse3
919 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:43:46 ] 頼むからmarchを「マーチ」ちゅうのやめてくれと。
920 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 23:47:09 ] マーチです
921 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:23:18 ] ですマーチ
922 名前:920 mailto:sage [2007/09/24(月) 01:34:19 ] 予想通り
923 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 01:59:33 ] さりげな・く〜♪
924 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 10:05:21 BE:23579377-2BP(1)] >>913 -march=native
925 名前:デフォルトの名無しさん [2007/09/24(月) 18:27:32 ] gcc -Wp,hogehoge の-Wpって何をするオプションですか?
926 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 18:38:12 ] そんなんも知らんのか バカじゃねぇのw
927 名前:デフォルトの名無しさん [2007/09/24(月) 18:42:32 ] 質問を変えよう。 Fedoraのrpmのspecファイルを見ていると、CFLAGSに-Wp,-DXXX=YYYという指定をしている例がみられるの だけど、単に-DXXX=YYYとしない理由は何か考えられますか? gcc-4.1.2のinfoだと、-Wpはなるべく使うなと書かれているのだが...。 よろしくおねがいします。
928 名前:デフォルトの名無しさん [2007/09/24(月) 18:43:53 ] >>926 よろしく。
929 名前:デフォルトの名無しさん [2007/09/24(月) 21:57:37 ] 天才926降臨期待age
930 名前:デフォルトの名無しさん [2007/09/26(水) 12:27:49 ] MinGWの中の人がいつかきっとGCC3.4.6 for MinGWをリリースしてくれると信じてる。
931 名前:デフォルトの名無しさん [2007/09/27(木) 00:33:49 ] MinGW ゴールデンウィークが最小限なこと。 休みが一日しかないに違いない。
932 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:49:16 ] ゴールデンウィークなんて死語だぜ
933 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:50:02 ] ゴールデンウィークなんて(毎年)仕事だぜ
934 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:48:27 ] GCC online docs ジーシーシー オンライン ドクス なんだよドクスって ドクスとか言うな!!
935 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 13:04:36 ] >>931 2008年や2014年の 5月3日 = 土曜日 5月4日 = 日曜日 5月5日 = 月曜日 のことかー!!! # でも4月29日の昭和の日が火曜日だから、4/26(土)・27(日)・28(月)・29(火)の連休もとりやすいんだよねw
936 名前:935 mailto:sage [2007/09/27(木) 13:06:58 ] # やべっ、忘れてた。法改正されたから、2008年や2014年は5月6日が振替休日!
937 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 14:59:21 ] 掴もうぜ ゴールデンボール
938 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 15:55:44 ] gcc4.2.2rcが先月末にあがってたので入れてみた。 マーチネイチブ、エムチュンネイチブ、何気にいいですね。なんかアプリの動きが早くなった。
939 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 16:05:31 ] >>938 >なんかアプリの動きが早くなった。 たぶん気のせいだよw
940 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 16:28:39 ] >>939 気のせいかなwww 4.2が正式リリースされてすぐに入れた時は逆に遅くなったような気がしたけど、今度のはいい感じなんだけど なあ。mplayerなんかではgcc関連の値をセットしなくてもconfigureかけるとアプリが勝手に-mtune=nativeに 設定してくるね。
941 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 12:21:41 ] >>938 mtuneをエムチュンと読むのにmarchがマーチと読む心は?
942 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 22:06:39 ] >>941 エムアーチ
943 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 22:21:24 ] えむつね/えむあーち
944 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 23:02:36 ] むちゅーん むあーき
945 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 23:41:23 ] むとーね まるは
946 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 00:47:05 ] まーくエッチ
947 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:21:57 ] こうして日々GCCは進化していくのであった
948 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 17:34:00 ] エムアークゥィティクチュワ!
949 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:45:18 ] ウィキピィーディア
950 名前:デフォルトの名無しさん [2007/10/06(土) 18:25:57 ] gccの--paramって、gcc4から使えるオプションだっけ? あと、paramってコマンドラインでしか指定できないの?#pragmaで指定できると嬉しいのだが。
951 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 18:32:43 ] >>950 3でも使える。pragmaの件は知らん。
952 名前:大槻 [2007/10/06(土) 19:00:47 ] すべてはpragmaのせいです。
953 名前:デフォルトの名無しさん [2007/10/07(日) 00:18:12 ] ストールマンって今何してんの? まだemacsでオナニーしてんの?
954 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 08:52:40 ] 秀○やSAKURAでオナニーするよりよっぽど良いべ。
955 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:15:57 ] 少なくとも人の役にたってるオナニーだからいいじゃねぇか
956 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 09:38:54 ] 公開オナニーてっこと?
957 名前:デフォルトの名無しさん mailto:sega [2007/10/08(月) 01:29:18 ] あるデバッグオプションを有効にしてコンパイルすると、 Segmentation faultで落ちたときにソースのファイル名と 行番号を表示するという機能があるらしいんですが どのオプションでしょうか
958 名前:デフォルトの名無しさん [2007/10/08(月) 01:39:02 ] >>957 OSがわからんからLinuxだとエスパー。 行番号情報をバイナリに埋めるには、gcc -g だ。できあがったバイナリをstripしないこと。 % file ./your_broken_software して、not stripped と表示されることを確認。 でも、SEGV食らったときに自動で落ちた場所を表示するコードを埋める機能はgccには無いよ。 一部のLinuxには、catchsegvというコマンドがついてるからそれ使え。 % catchsegv ./your_broken_software
959 名前:デフォルトの名無しさん [2007/10/08(月) 01:46:54 ] うそだ、ごめん。catchsegvだと、PCの値とかバックトレースはでるけど、行番号は出ないね。 素直にgdb上で実行するのがよいと思うが?
960 名前:957 mailto:sage [2007/10/08(月) 02:39:57 ] >>959 catchsegvか・・・ オッケー、刻んだ!
961 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 03:56:23 ] PCがわかれば addr2line -e a.out pc で行番号わかるよ。
962 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 09:29:06 ] $ gcc -g foo.c $ gdb --batch -ex 'run あれば引数' ./a.out
963 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 11:05:30 ] gccのループ展開の抑制について質問させてください。 コードサイズの評価をしようとして、常用している -O3 に ループ展開の抑制だけを加えて -O3 -fno-unroll-loops -fno-peel-loops と したんですが、ループ展開を止めてくれません。どうやればいいんでしょう? gccのバージョンは4.1.2(tarballから展開・パッチなし)、 実行環境はi686-pc-linux-gnuとpowerpc-linuxです(どちらでも現象は同じ)。 問題のコードを直接晒せないので、再現コードを書きます: #define N 5 int foo(int a[]) { int t = 0, i; for (i = 0; i < N; i++) t += a[i]; return t; } 上のように定数回の小ループがあって、ループ回数が少ないと展開するようです。 展開した場合は、ループ構造は削除され、中身が回数分反復されます。 -O2 とすればループ展開を行わなくなります。 でも、ループ展開以外の最適化は -O3 のままにしておきたいんです。
964 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 11:47:28 ] トゥーチャノー(英語は発音大事)での、話のループを抑制したい。 こればっかりは、流れ石のGCC様の-Oも効かんでのう〜ゴホゴホッ(持病の癪が)
965 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:06:44 ] >>964 癪は胸部腹部の痛みの総称なので、癪で咳き込む人はいない
966 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:38:41 ] ボケ殺し……
967 名前:デフォルトの名無しさん [2007/10/09(火) 21:19:18 ] GCC 4.2.2 リリース age
968 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:51:46 ] >>963 4.1.2で色々やってみたけど抑制できなかった
969 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:02:20 ] そこだけソース別けて-O2でコンパイルするとか...
970 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:04:35 ] >>967 了解。今から長いコンパイルを開始します。
971 名前:963 mailto:sage [2007/10/10(水) 00:53:43 ] >>968 どもです。お手数おかけしてます。やっぱり地味に難しいんでしょうか。 >>969 避けてしまうのはどうにでもできるんですが、ほしいのは 「このコードをこういう条件でコンパイルするとこういう結果になります」という コード評価でして。コードの一部だけ最適化条件を変えるのは できるだけしたくない、という事情です。 ただ、ここで詰まっていてもしょうがないので、 適当なところで見切りをつけますけどね。全体を-O2にしてしまうとか。 4.1.2のmanを調べたら「-O3は-O2に-finline-functions -funswitch-loops -fgcse-after-reloadを足したもの」と書いてあったのですが、 -O2にこれらを足しても-O3と等しくはなりませんでした。うーむ。
972 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 02:02:49 ] -O3 -fno-unroll-loops でいいんでないの?
973 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 04:53:20 ] >>971 manは結構いいかげんなのでソースを当たるべし。
974 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 08:52:16 ] さんざん既出だが、 自分で細かくコントロールしたければ、 -O3, -O2などを使ってはいけない。
975 名前:868 mailto:sage [2007/10/10(水) 11:29:11 ] 逆に考えて -O2 に -O3 で追加されるような -fhogehoge 追加してけば?
976 名前:私立ミンミンゼミ [2007/10/10(水) 12:24:09 ]
977 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:01:37 ] 念のため聞くけど、>>972 とか>>975 はギャグだよね……??
978 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:18:43 ] >>975 の何がおかしいのかわからない。
979 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:22:26 ] きっと、-fhogehogeって名前のフラグがあると思ってるんだと推測。
980 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:29:25 ] >>978-979 >>971 に既にその方法でやってるが、manでは正確ではないようだ という話が出てるのに>>975 を敢えて書くってのは自爆ギャグとか かと考えないと、辻褄が合いそうにない。 ま、ギャグだとしても全然面白くないけど。 てか、おまえらも注意力散漫なんだな。
981 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 15:35:05 ] GNU製品のmanなんて宛てにしないでソースで正確なの調べろよ。
982 名前:デフォルトの名無しさん [2007/10/10(水) 18:33:46 ] GNU製品のmanなんて信用せずに素直にinfo見ろよな
983 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 18:58:49 ] GNU製かどうかは関係ない。 ソースから生成してるのでもないかぎり文書は不正確なもの。
984 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 19:45:03 ] いや、info見ろよ。
985 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 20:57:03 ] infoもこう書いてあるけど `-O3' Optimize yet more. `-O3' turns on all optimizations specified by `-O2' and also turns on the `-finline-functions', `-funswitch-loops' and `-fgcse-after-reload' options.
986 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:53:56 ] >>983 でもさ、それって実装であって設計じゃないよね ソフトウェア工学的にはうんこだよな
987 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 22:31:46 ] >>986 いまだにMDAとか言ってる位に仕様書からの実装合成はhype気味なんだから 一介のフリーソフトがそこまでできてなくてもしょうがないだろう。だって人間だもの(みつを
988 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 08:03:19 ] >>975 -O2使ったとたんに他の指定は上書きされるのが現実です。 個別に設定しても必ずその通りになるものではないし。 最適化技法間の制約があるので。 暗黙に無効、有効にする時に、Warningも出しません。 ソース読むしかないんです。
989 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:27:31 ] どの最適化をするかくらいならすぐ読めるよね
990 名前:963 mailto:sage [2007/10/12(金) 00:58:21 ] ソースを読みました。opts.c の decode_options() に最適化オプション読み込みの 基本部分がありました。大雑把には次のような構造でした。 for (i = 1; i < argc; i++) { /* すべての-Oxオプションを通し読み */ } if (optimize >= 1) { flag_hoge = 1; ... } /* -O1以上でのフラグ設定を適用 */ if (optimize >= 2) { flag_geho = 1; ... } /* -O2以上でのフラグ設定を適用 */ ... handle_options(argc, argv, ...); /* 各オプションを処理 */ optimize >= 3 では、flag_inline_functions と flag_unswitch_loops と flag_gcse_after_reload を 1 にしていました。 その箇所だけ読むとmanやinfoの記述は正しいことになるんですが、はて。 結局追いきれませんでした。 それから、>>988 の通り、フラグ変数を書き換えてもその情報をどこにも伝えません。 ちょっと不便なような。。。 で、別解なんですが、「-O3 --param max-completely-peeled-insns=0」 と指定してpeelingを止めてしまえば目的を果たせることがわかりました。 この指定で行こうと思います。
991 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 01:22:28 ] いや、該当するフラグ変数を全ソースで検索しないと。 コンパイル中にフラグの値変ることもあるし。
992 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 02:23:32 ] >>991 ヒントありがとうございます。flag_unroll_loops と flag_peel_loops に 当たりをつけて探してみました。これだろうな、ってのが出てきました。 tree-ssa-loop.c: static void tree_complete_unroll (void) { if (!current_loops) return; tree_unroll_loops_completely (current_loops, flag_unroll_loops || flag_peel_loops || optimize >= 3); } "optimize" でも軽く眺めてみましたが、フラグではなく最適化レベルの数値を 最適化の適用条件にしている箇所はそれなりに珍しいようです。
993 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 08:47:02 ] > optimize >= 3 ワラ イヤだねー
994 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 09:03:27 ] 将来を見据えた設計なのでは?
995 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 12:37:26 ] >>994 断言できる。何も考えてないだけ。
996 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:06:08 ] >>987 いや、ストールマンって趣味ならとても楽しくやりそうだけど 絶対に一緒に仕事やりたくない人種だよな
997 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:10:13 ] 次スレ建てられなかった 誰か頼む
998 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:08:45 ] GCCについて part8 pc11.2ch.net/test/read.cgi/tech/1192201659/
999 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:36:21 ] >>998 乙 次スレでもみんなよろしく
1000 名前:デフォルトの名無しさん [2007/10/13(土) 00:37:18 ] 1000
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。