タグ

gccに関するtermoshttのブックマーク (7)

  • memologue - __attribute__((init_priority(N))) で、C++のグローバル変数の初期化順序を制御する

    g++の __attribute__)((init_priority(N)))( なる機能の日語の解説が見当たらないので、いつものように紹介文を書いてみます。これは、C++のグローバル変数の初期化順序を制御するためのGCCの拡張機能(attribute)です。 ごく短い説明 動的な初期化が必要なC++のグローバル変数の定義に__attribute__)((init_priority(N)))(をくっつけると、.oファイル上で、その変数の初期化関数(コンストラクタ等)のアドレスが.ctorsではなく.ctors.M セクションに入ります。M は左0パディング5桁固定の数値で、M = 65535 - N です。あとは、shinhさんの2005/11の記事を。特に、リンカスクリプトのSORTのとこに注目、これにより初期化順がinit_priorityで指定した通りになります。Nが小さい程先に初

    memologue - __attribute__((init_priority(N))) で、C++のグローバル変数の初期化順序を制御する
  • めくるめくマシン記述の世界 - .mjtの日記復帰計画

    prev: http://d.hatena.ne.jp/mjt/20100811/p1 コンパイラやJITCを作る上で、マシン記述(MachineDescription)は現代的には必須のテクニックになっている。例えば、IA32やARMの世界ではCPUのモデル毎に使用できる命令が大幅に異なり、Xtensaのように生成的なプロセサも存在する。コンパイラを特定のCPUにべったり依存する形で書くことは殆んどなく、何らかのかたちで、 CPUにはどのようなレジスタが有るのか CPUの使える命令は何か CPU命令が利用/破壊するレジスタは何か といったことを統一的なフォーマットで記述し、可能なかぎりマシン依存部を減らす努力が求められている。 http://wiki.osdev.info/?MachineDescription gccのケース: CGENと.md GCCは.mdという形で、CPUが利用で

    めくるめくマシン記述の世界 - .mjtの日記復帰計画
  • Linux共有ライブラリの簡単なまとめ - wagavulinの日記

    Linuxで共有ライブラリ(*.so)を作るようになったのでちょっと勉強してみた。今までは使うだけだったので、以下のようなことは知っていた。作るときはgccの-sharedオプションを使う。使うときはgccの"-lライブラリ名"でリンクするライブラリを指定する。リンク時のライブラリ探索パスは-Lオプションで指定する。実行時のライブラリ探索パスは/etc/ld.so.confに書いてあるディレクトリ。環境変数LD_LIBRARY_PATHでも指定可能。ライブラリを作るときは、.cから.oを作るときに-fPICをつけるといいらしい。新しくライブラリを入れたときはldconfigするといいらしい。逆に今まであまり知らなかったこと。ほとんどのライブラリはlibhoge.so, libhoge.so.1, libhoge.so.1.1のように3つくらいのファイルがあり、libhoge.soやlibh

  • Link time and inter-procedural optimization improvements in GCC 5

    GCC-5.1 release candidate 1 just branched. Lets take a look what changed in the inter-procedural optimization (IPA) and link-time optimization (LTO) frameworks. Link time optimization (LTO) in GCC 4.5 - GCC 4.9 Last year I wrote quite detailed post on the history of LTO in GCC. Here is a quick summary of where we stand now. Reliability and scalability Link-time optimization was merged into GCC 4.5

    termoshtt
    termoshtt 2015/04/24
    Honza Hubička's Blog: Link time and inter-procedural optimization improvements in GCC 5
  • なんでGCCはa*a*a*a*a*a を (a*a*a)*(a*a*a) に最適化できないの?っと

    c - Why doesn't GCC optimize a*a*a*a*a*a to (a*a*a)*(a*a*a)? - Stack Overflow 俺は科学技術計算の数値計算の最適化をしてたんだけどさ。GCCはpow(a, 2)をa*aにしてくれるんだな。うん。で、pow(a, 6)は最適化されずに、ライブラリ関数であるpowを呼んじゃうんだ。パフォーマンス的に最悪。(Intel C++ Compilerはpow(a,6)のライブラリ関数呼び出しを消し去ってくれるんだけどな) どうもよくわからんのが、pow(a, 6)をa*a*a*a*a*aで置き換えて、GCC 4.5.1をオプション"-O3 -lm -funroll-loops -msse4"で使ったら、mulsd命令を5個使う。 movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd

  • clang+llvmでさりげなくすごいコードが生成されていた話。 - 組み込みの人。

    先日llvm 3.3がリリースされました。aarch64(arm 64bit)のコードが生成できるようになったということなので、ソースからビルドして遊んでいたのですが、さりげなく凄く最適化されたコードが生成されているのに気がつきました。aarch64だと今は実行して確認できる環境が手元に無いので、普通のarmv7-aで同じことを試しました。 ここで使ったコードとその結果はgistに貼りました。 https://gist.github.com/tetsu-koba/5835724 ソースコード int sum(int x) { int sum = 0; int i; for (i = 1; i <= x; i++) { sum += i; } return sum; } 1からnまでの総和を求める関数です。1から100までの総和が5050なのはガウス少年の逸話で有名ですね。 gcc 4.8.

    clang+llvmでさりげなくすごいコードが生成されていた話。 - 組み込みの人。
  • 本の虫: Clang VS 自由ソフトウェア

    オープンソースで有名なEric S. Raymondが、自由ソフトウェアで有名なRichard Stallmanに、GCCのアンチプラグインポリシーについて突っ込んでいる。 GCCは、長年、コンパイラーのモジュール化を政治的な理由で行っていなかった。もし、例えばパーサーや意味解析だけを分離して使えるようにしたり、内部表現を規格化したりしてしまうと、GCCの一部が、不自由なソフトウェアに取り込まれたり、あるいは不自由なソフトウェアがGCCのプラグインという形で入り込むことになってしまう。これは、利用者の自由を第一とする自由ソフトウェアにとって、悪夢のような未来である。そのような未来を未然に防ぐために、政治的な理由で、GCCのはプラグインに反対するポリシーを採用している。もし、GCCを改良したければ、自由なソフトウェアとなるべきなのだ。そして、GCCのプロジェクトに参加するべきなのだ。 とはい

  • 1