2010年01月22日
GCC ARM バックエンドの中の O’Caml プログラム
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 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。
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 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。