GCC

2014年09月18日

前回の記事で、GNU CPP の独自拡張 #include_next 指令を紹介しました。

「GNU CPP(GCC)の独自拡張#include_next指令」

このドキュメントは簡単な概要と例だけなので、ちょっと複雑なケースになると、この挙動は仕様なのか?バグなのか?という判断が難しくなります。

この間、私が悩んだ疑問は、過去に以下の ML で取り上げられた疑問とほぼ同じものでした。
gcc-help ML: #include_next: wrong search order?
この疑問を単純化して解説した後、私なりの解釈を説明します。
続きを読む

2014年09月11日

Warp の挙動を調べている時に、GCC のプリプロセッサの #include_next 指令の挙動にかなり悩んだので、備忘録も兼ねてドキュメントの日本語訳をアップロードします。

厳密な仕様が無く、あまり有名でもない(?)独自拡張なので(ARM CC や IBM XL C/C++ など、一応 GCC 以外のコンパイラのプリプロセッサにも取り入れられているようですが)、情報が少なく、実際にいろいろ動かして実験してみないと挙動がよくわからず、かなり混乱しました。以下の翻訳もあまり自信が無いので、何かお気づきの点があれば、コメント欄にてご指摘いただけると幸いです。(ただし、現在スパムコメントがあまりにも多いため、半角英数字のみのコメント、国外の IP アドレスからのコメント、改行が 10 個以上あるコメントは受け付けない設定になってます。ご注意ください。)

ちなみにこの記事は、問題を理解してもらうための布石で、実際に悩んだ問題は、また後日に解説します。

続きを読む

2014年01月23日

GCC のリリースノートを眺めていたら、4.7 からトランザクションメモリのサポートが入っていたことに気付いたので、少し調べてみました。

続きを読む

2013年07月17日

GCC はバージョン 4.8 から、実装言語が C++ になりました。というわけで、プラグインも今後は C++ で書きたいところです。また、せっかくなので、gcc ではなく g++ のプラグインを C++ で書いてみました。

続きを読む

2013年06月27日

以前にgccでNEONのSIMD命令を生成させる方法という記事を書きましたが、今はかなり状況が変わっています。コンパイラのオートベクタライズの最適化はずっと進化していて、簡単なコンパイルオプションをつけるだけでNEONのSIMD命令を活用することができるようになっています。

続きを読む

2013年06月27日

昨日の記事で GCC 4.7 をインストールしたので、ついでに Plugins 機能を試してみました。

続きを読む

2012年01月26日

SHのgccでは浮動小数点演算のオプションの指定方法が他のアーキテクチャと異なっています。

それぞれどんなコードが生成されるのか確認してみました。

続きを読む

2012年01月24日

昨日、自分で修正したプログラムが意図した通りに動作しなくて少し悩んだのですが、それはunsignedの型の変数に負数を代入して、0と比較している部分が正しく動かなかったためでした。unsignedの型の変数は0より小さくなることはありません。

でも、こんなケースではgccはwarningを出して教えてくれたはず。実はオプションの指定が必要でした。

続きを読む

2010年06月03日

gcc-in-cxx ブランチが 2009 年 6 月より動きが無く、GCC での C++ の使用はこのまま無かったことになりそうだなと思っていたところ、以下のようなニュースが飛び込んできました。

GCC開発者ら、GCCの開発にC++を導入することを決定、利用する機能を制限して複雑さを軽減 2010年06月02日 12:30

GCC begins move to C++
(via http://tabesugi.net/memo/cur/cur.html#021905)

続きを読む

2010年04月30日

GCC 本家のサイトトップに、「January 25, 2010 An experimental profile mode has been added. 」と出ているのが気になります。

これは C++ 標準ライブラリ(主にコンテナ系)の使い方についてアドバイスしてくれる機能で、効率改善に役立つとのことです。さっそく試してみました。

続きを読む

2010年04月16日

まだ has been released とは書いてないので微妙ですが、一応 GCC 4.5 が Current release series になり、各ミラーサイトに tar ball も上がっているようです。

4.5 の目玉の一つ LTO は、まだ Windows (PE-COFF target) では動かないようですが、patch が投げられているので、おそらく 4.5.1 あたりに入るのではないでしょうか。

[PATCH,4.6/4.5.1,PR42776] Implement LTO for Windows (PE-COFF) targets.

4.5 は他にも Plugin など、面白そうな機能がたくさん入っています。さっそくビルド… といきたいところですが、GMP/MPFR の他に、MPC/PPL/CLooG-PPL とさらに依存ライブラリが増えているので、ちょっと大変そうです。

とりあえずバイナリをダウンロードして試してみましょう。

続きを読む

2010年02月09日

GCC では -Wall を付けていても、条件コンパイル時に未定義のシンボル参照に対して警告が出ません。そのため、うっかり typo してしまった場合など、わかりにくいバグの原因となり得ます。
$ cat ifdef.c
#if UNDEFINED_SYMBOL
void f(void){}
#endif
$ gcc -Wall -c ifdef.c


-Wundef オプションにより、警告が出るようになります。
$ gcc -Wall -Wundef -c ifdef.c
ifdef.c:1:5: warning: "UNDEFINED_SYMBOL" is not defined
続きを読む

2010年01月22日

GCC のソースツリー中の gcc/config/arm/ 以下には、OCaml という関数型(プログラミングを支援する)言語 ML (Meta-Language) の方言で書かれたプログラムが存在しています。

NEON 命令のためのヘッダ、テストケース、ドキュメントなどを生成するために O'Caml プログラムが使われているようです。

Contents of /trunk/gcc/config/arm/neon-gen.ml
Contents of /trunk/gcc/config/arm/neon-schedgen.ml/a>
Contents of /trunk/gcc/config/arm/neon-testgen.ml
Contents of /trunk/gcc/config/arm/neon.ml
Contents of /trunk/gcc/config/arm/neon-docgen.ml

OCaml は言語処理系の開発によく使用される言語なのですが、まさか GCC の内部でも使われている(直接は関わっていないのですが。生成済みのヘッダが trunk に commit されているので、GCC のビルドの際には O'Caml 処理系は必要ありません。)とは思ってなかったので意外でした。(佐藤先輩に教えていただきました。)

参考リンク:

Modern Compiler Implementation in ML

有名なタイガーブックです。ML の他にも、Java と C による同内容の本が出ていて、Java が一番いろいろなところで参考文献として挙げられている気がします。

Fail-Safe C: 安全なC言語コンパイラ

O'Caml で書かれた C コンパイラです。

CIL (C Intermediate Language)

C のソースコードを解析して、解析が容易な形 (中間言語) に変換する O'Caml のライブラリです。ANSI C だけではなく、GNU 拡張や MS 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。

2010年01月20日

前回の記事で少し触れた、Linux で使われているソースコード解析ツールである sparse は、Linux Kernel 以外のソースコードに対しても有益そうです。

Sparse - a Semantic Parser for C

MinGW 環境で試してみたところ、ちゃんと GNU C のソースコードを解析することができました。

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード