[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.14.12 IBM RS/6000 と PowerPC オプション

以下の ‘-m’ オプションが IBM RS/6000 と PowerPC 用に定義されている。

-mpower
-mno-power
-mpower2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64

GCC は、RS/6000 と PowerPC について、二つの関係のある命令セットを サポートしている。 POWER 命令セットは、最初の RS/6000 システムで使われていた ‘rios’ チップセットでサポートされていた命令セットである。 PowerPC 命令セットは、モトローラのマイクロプロセッサ MPC5xx、 MPC6xx、MPC8xx と IBM のマイクロプロセッサ 4xx のアーキテクチャである。

どちらのアーキテクチャも他方のサブセットにはなっていない。 しかし、両方でサポートされている共通の命令の大きなサブセットがある。 POWER アーキテクチャをサポートするプロセッサには MQ レジスタが含まれている。

これらのオプションを使って、自分のプロセッサで利用可能な命令を指定する ことができる。これらのオプションのデフォルト値は、 GCC のコンフィギュレーション時に決定される。 ‘-mcpu=cpu_type’ を指定すると、これらのオプションの指定を 上書きする。 上に列挙したオプションではなく、‘-mcpu=cpu_type’ オプションを 使うことをお勧めする。

-mpower’ オプションを指定すると、POWER アーキテクチャ にのみ存在する命令を生成したり、MQ レジスタを使うことを GCC に許す。 ‘-mpower2’ を指定すると、‘-power’ を含んだうえに、 POWER2 アーキテクチャには存在するが、元々の POWER アーキテクチャには 存在しない命令を生成することを GCC に許す。

-mpowerpc’ オプションを指定すると、PowerPC アーキテクチャの 32ビット版のサブセットにのみ存在する命令の生成を GCC に許す。 ‘-mpowerpc-gpopt’ を指定すると、‘-mpowerpc’ を含んだうえに、 PowerPC アーキテクチャの General Purpose グループのオプションの命令を 使うことができるようになる。これには、浮動小数点平方根命令も 含まれる。‘-mpowerpc-gfxopt’ を指定すると、‘-mpowerpc’ を 含んだうえに、PowerPC アーキテクチャの Graphics グループのオプションの 命令を使うことができるようになる。これには浮動小数点選択命令も 含まれる。

-mpowerpc64’ オプションを指定すると、GCC は 完全な PowerPC64 アーキテクチャにある 64 ビット命令を追加で 生成し、GPR を 64 ビットの倍語量として取り扱う。 デフォルトは ‘-mno-powerpc64’ である。

-mno-power’ と ‘-mno-powerpc’ の両方を指定すると、 GCC は両方のアーキテクチャに共通する命令サブセットに加えて 幾つかの特別なAIX 共通モード呼出し命令のみを使い、MQ レジスタは 使わないようになる。‘-mpower’ と ‘-mpowerpc’ を 両方指定すると、どちらのアーキテクチャのどの命令でも使うことが可能になり、 MQ レジスタも使うようになる。Motorola MPC601 にはこの両方を指定すること。

-mnew-mnemonics
-mold-mnemonics

どのニーモニックを生成されるアセンブラコードで使うかを選ぶ。 ‘-mnew-mnemonisc’ を指定すると、PowerPC アーキテクチャ向けに 定義されたアセンブラニーモニックを使って出力する。 一方、‘-mold-mnemonisc’ を指定すると、POWER アーキテクチャ用に 定義されたアセンブラニーモニックを使用する。 一つのアーキテクチャでしか定義されていない命令は、ニーモニックは 一種類しかない。GCC は、一種類しかないニーモニックは、どのオプションが 指定されたかに関係なく、それを使う。

GCC では使われているアーキテクチャに適したニーモニックをデフォルトで 使う。 ‘-mcpu=cpu_type’ を指定すると、これらのオプションの値が 変わることもある。クロスコンパイラを作るのでない限り、 普通は ‘-mnew-mnemonics’ や ‘-mold-mnemonics’ を指定するのでは なく、代わりにデフォルトを受け入れるようにすべきである。

-mcpu=cpu_type

アーキテクチャ型、レジスタ使用法、ニーモニックの選択、命令スケジューリング のパラメータを、機種 cpu_type 用に設定する。 cpu_type として使えるのは、‘rs6000’、‘rios1’、 ‘rios2’、‘rsc’、‘601’、‘602’、‘603’、 ‘603e’、‘604’、‘604e’、‘620’、‘740’、 ‘750’、‘power’、‘power2’、‘powerpc’、‘403’、 ‘505’、‘801’、‘821’、‘823’、‘860’、‘common’ である。 ‘-mcpu=power’、‘-mcpu=power2’、‘-mcpu=powerpc’ は、 POWER、POWER2、それに純粋な PowerPC(つまり、MPC601 は含まない) アーキテクチャの汎用の機種を指定する。スケジューリング用には、 適切な汎用プロセッサモデルを想定する。

オプション ‘-mcpu=rios1’、‘-mcpu=rios2’、‘-mcpu=rsc’、 ‘-mcpu=power’、‘-mcpu=power2’ のどれかを指定すると、 ‘-mpower’ オプションが有効になり、‘-mpowerpc’ オプションが 無効になる。 ‘-mcpu=601’ を指定すると、‘-mpower’ と ‘-mpowerpc’ の両方が 有効になる。 ‘-mcpu=602’、‘-mcpu=603’, ‘-mcpu=603e’、‘-mcpu=604’、‘-mcpu=604e’, ‘-mcpu=620’、‘-mcpu=403’、‘-mcpu=505’、‘-mcpu=801’, ‘-mcpu=821’、‘-mcpu=823’、‘-mcpu=860’、 ‘-mcpu=powerpc’ のどれかを指定すると、‘-mpowerpc’ オプションを有効 にし、‘-mpower’ オプションを無効にする。 全く同様に、‘-mcpu=403’、‘-mcpu=505’、‘-mcpu=821’、 ‘-mcpu=860’、‘-mcpu=powerpc’ を指定すると、‘-mpowerpc’ を 有効にし、‘-mpower’ を無効にする。 ‘-mcpu=common’ は、‘-mpower’ と ‘-mpowerpc’ の両方を無効にする。

AIX バージョン 4 以降は、デフォルトで ‘-mcpu=common’ を選択し、 コードがRS/6000 と PowerPC 一族の全メンバで動作するようになっている。 その場合、GCC は両方のアーキテクチャに共通のサブセットに、 幾つかの特別な AIX 共通モード呼び出しを加えたものだけを使い、 MQ レジスタは使わない。GCC は、スケジューリングの際には 汎用のプロセッサモデルを想定する。

-mcpu=rios1’、‘-mcpu=rios2’、 ‘-mcpu=rsc’、‘-mcpu=power’、‘-mcpu=power2’ のどれかを指定することでも、‘new-mnemonics’ オプションを無効にする。 ‘-mcpu=601’、‘-mcpu=602’、‘-mcpu=603’、‘-mcpu=603e’、 ‘-mcpu=604’、‘620’、‘403’、‘-mcpu=powerpc’ のどれかを指定することでも、‘new-mnemonics’ オプションを 有効にする。

-mcpu=403’、‘-mcpu=821’、‘-mcpu=860’ の どれかを指定することでも ‘-msoft-float’ オプションを有効にする。

-mtune=cpu_type

命令スケジューリングのパラメータを機種 cpu_type 用に 設定する。しかし、アーキテクチャ型、レジスタ使用法、ニーモニックの 選択といった、 ‘-mcpu=cpu_type がやる設定は行なわない。 cpu_type の値としては、‘-mcpu=cpu_type に使ったのと 同じものを、‘-mtune=cpu_type に対して使う。 ‘-mtune=cpu_type オプションは、‘-mcpu=cpu_type オプションが設定したものを、命令スケジューリングのパラメータで上書きする。

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc

TOC(Table Of Contents) の生成の仕方を変える。 TOC は各実行形式ファイル毎に作られる。‘-mfull-toc’ オプションが デフォルトで選ばれている。その場合、GCC は、プログラム内の 一意的で自動変数でない変数の参照一つ毎に、少なくとも一つの TOC エントリを割り当てる。GCC は、浮動小数点定数も TOC に置く。 だが、TOC に入れられるエントリ数は、16,384 しかない。

リンカが、利用可能な TOC 空間が溢れたというエラーメッセージを 出した場合は、TOC の使用量を ‘-mno-fp-in-toc’ オプションや ‘-mno-sum-in-toc’ オプションで減らすことができる。 ‘-mno-fp-in-toc’ を指定すると、浮動小数点定数を TOC に 置くのを止める。‘-mno-sum-in-toc’ を指定すると、あるアドレスと ある定数の和を TOC に置く変わりに、実行時にその和を計算するコードを 生成する。この二つのオプションは、どちらか指定しても良いし、 両方指定しても良い。どちらも、TOC 空間を保存することの代償として、 ほんのちょっとだけ、コードが遅く、大きくなる。

両方指定してもまだ TOC が足りないという場合は、代わりに ‘-mminimal-toc’ を指定すること。このオプションを指定すると、 GCC は、各ファイルに一つしか TOC エントリを作らない。 このオプションを指定すると、遅く、大きなコードを生成するが、 TOC 空間は非常にわずかしか使わない。 このオプションを使うのは、あまり頻繁に実行されないコードしか 入っていないファイルに限るのが良いだろう。

-maix64
-maix32

AIX の 64 ビット ABI と呼出し規約を有効にする。すなわち、 64ビットポインタ、64ビット long 型、それにそれらをサポートするのに 必要なインフラストラクチャが有効になる。 ‘-maix64’ を指定すると、‘-mpwoerpc64’ と ‘-mpowerpc’ も 暗に指定される。一方、‘-maix32’ を指定すると 64ビット ABI を 無効にし、暗に ‘-mno-powerpc64’ を指定する。GCC のデフォルトは ‘-maix32’ である。

-mxl-call
-mno-xl-call

AIX で、プロトタイプ付きの関数に対する浮動小数点引数を、 引数用 FPR に加えて、レジスタセーブ領域(register save area, RSA) を 越えてスタックに渡される。 AIX の呼出し規約は、引数のアドレスをとり、宣言されたよりも少ない 引数しか渡さない関数を呼び出す、K&R の曖昧な場合を扱うように 拡張されているが、最初はドキュメントにその記述がなかった。 AIX XL コンパイラは、RSA に収まらない浮動小数点引数は、最適化なしで サブルーチンが最適化なしでコンパイルされたときは、スタックからアクセスする。 浮動小数点引数を常にスタックに格納するのは効率が悪いし、滅多に必要に ならない。このため、このオプションはデフォルトでは有効になっていない。 必要になるのは、AIX XL コンパイラで最適化なしでコンパイルしたサブルーチン を呼び出すときだけである。

-mthreads

AIX Threads をサポートする。 pthreads を使って書かれたアプリケーションを、特別なライブラリと スタートアップコードにリンクして、アプリケーションの実行を 可能にする。

-mpe

IBM RS/6000 SPParallel Environment (PE) を サポートする。メッセージパッシングを使うように書かれているアプリケーションは、 特別なスタートアップコードとリンクして、そのアプリケーションが 正しく動作するようにする。システムには PE が標準の位置 (‘/usr/lpp/ppe.poe/’)にインストールされていなければならない。 標準の位置にない場合は、‘-specs=’ オプションで適切なディレクトリ 位置を指定するように ‘specs’ ファイルを上書きする必要がある。 Parallel Environment はスレッドをサポート指定位なので、 ‘-mpe’ オプションと ‘-mthreads’ オプションは互換性がない。

-msoft-float
-mhard-float

浮動小数点レジスタセットを使わない(使う)コードを生成する。 ‘-msoft-float’ オプションを指定した場合、ソフトウェア浮動小数点 エミュレーションが提供されており、このオプションがリンク時に GCC に 渡される。

-mmultiple
-mno-multiple

複数語のロード命令とストア命令を使う(使わない)コードを生成する。 これらの命令は、POWER システムではデフォルトで生成され、 PowerPC システムでは生成されない。リトルエンディアンを 使用している PowerPC システムでは ‘-mmultiple’ を 使わないこと。これらの命令はリトルエンディアンモードでは正しく 動作しないからである。 例外は PPC740 と PPC750 で、これらの命令をリトルエンディアンモードで 使うことを許している。

-mstring
-mno-string

ロード・ストリング命令とストア・ストリング命令を使って、複数レジスタを セーブし、小さなブロック移動を行なうコードを生成する。 これらの命令は、POWER のシステムではデフォルトで生成され、 PowerPC のシステムでは生成されない。リトル・エンディアンの PowerPC システムでは ‘-mstring’ オプションを使わないこと。 これらの命令は、リトル・エンディアン・モードのプロセッサでは 動作しないからである。 例外は PPC740 と PPC750 で、これらの命令をリトルエンディアンモードで 使うことを許している。

-mupdate
-mno-update

ベースレジスタを計算後のメモリアドレスに更新するロード命令あるいは ストア命令を使う(使わない)コードを生成する。これらの命令はデフォルトで 生成される。‘-mno-upate’ を指定すると、スタックポインタが更新 されるのと直前のフレームのアドレスが更新されるのと間に間があき、 割り込みやシグナルを越えてスタックフレームを歩き回るコードがあると、 正しくないデータを受け取る可能性がある。

-mfused-madd
-mno-fused-madd

浮動小数点積和命令を使う(使わない)コードを生成する。 これらの命令は、ハードウェアによる浮動小数点演算が使われる場合は デフォルトで生成される。

-mno-bit-align
-mbit-align

System V.4 と組み込み PowerPC システムで、ビットフィールドを含む 構造体や共用体を、ビットフィールドの基本型に強制的に整合させる (整合させない)

例えば、長さが 1 の unsigned のビットフィールド 8 個だけしか 含まない構造体は、デフォルトでは、4バイト境界に整合され、大きさが 4バイトになる。‘-mno-bit-align’ を使うと、この構造体は 1 バイト 境界に整合されるようになり、大きさも 1 バイトになる。

-mno-strict-align
-mstrict-align

System V.4 と組み込み PowerPC システムで、整合のとれていない メモリ参照がシステムにより取り扱われると仮定しない(仮定する)。

-mrelocatable
-mno-relocatable

組み込み PowerPC システムで、実行時に異なるアドレスに再配置される コードを生成することを許す(許さない)。モジュールを一個でも ‘-mrelocatable’ を指定してコンパイルしたなら、一緒にリンクする オブジェクトは全て ‘-mrelocatable’ か ‘-mrelocatable-lib’ を 指定してコンパイルしなければならない。

-mrelocatable-lib
-mno-relocatable-lib

組み込み PowerPC システムで、実行時に異なるアドレスに再配置される コードを生成することを許す(許さない)。 ‘-mrelocatable-lib’ を指定してコンパイルしたモジュールは、 ‘-mrelocatable’ や ‘-mrelocatable-lib’ なしでコンパイル したモジュールでも、‘-mrelocatable’ 付きでコンパイルしたモジュールでも リンク可能である。

-mno-toc
-mtoc

System V.4 と組み込み PowerPC システムで、レジスタ 2 が、 プログラムで使われるアドレス群を指すグローバル領域へのポインタである ことを想定しない(想定する)。

-mlittle
-mlittle-endian

System V.4 と組み込み PowerPC システムでは、リトルエンディアンモードに あるプロセッサ向けに、コードをコンパイルする。 ‘-mlittle-endian’ オプションは ‘-mlittle’ オプションと同じである。

-mbig
-mbig-endian

System V.4 と組み込み PowerPC システムでは、ビッグエンディアンモードに あるプロセッサ向けに、コードをコンパイルする。 ‘-mbig-endian’ オプションは ‘-mbig’ オプションと同じである。

-mcall-sysv

System V.4 と組み込み PowerPC システムでは、「System V Application Binary Interface, PowerPC processor supplement」の 1995年3月版ドラフトに 従った呼び出し規約を使って、コードをコンパイルする。 GCC を ‘powerpc-*-eabiaix’ でコンフィギュレーションしない 場合は、これがデフォルトになる。

-mcall-sysv-eabi

-mcall-sysv’ と ‘-meabi’ の両方のオプションを指定する。

-mcall-sysv-noeabi

-mcall-sysv’ と ‘-mno-eabi’ の両方のオプションを指定する。

-mcall-aix

System V.4 と組み込み PowerPC システムでは、AIX で使われている 呼び出し規約に類似の呼び出し規約を使ってコードをコンパイルする。 GCC を ‘powerpc-*-eabiaix’ でコンフィギュレーションした 場合は、これがデフォルトになる。

-mcall-solaris

System V.4 と組み込み PowerPC システムでは、Solaris オペレーティング システム向けにコードをコンパイルする。

-mcall-linux

System V.4 と組み込み PowerPC システムでは、Linux ベースの GNU システム向けにコードをコンパイルする。

-mprototype
-mno-prototype

System V.4 と組み込み PowerPC システムでは、全ての可変数引数関数への 呼出しは、正しくプロトタイプ宣言されていると想定する。 想定しない場合は、GCC は、プロトタイプ宣言なしの呼出し毎に その直前に命令を一個挿入して、関数が可変数引数を取る場合、 浮動小数点値が浮動小数点レジスタで渡されたかどうかを指示するために、 条件コードレジスタ(CR)のビット 6 を立てるか落とすかしなければ ならない。‘-mprototype’ を指定すると、プロトタイプ宣言された 可変数引数関数への呼出しでのみ、ビット 6 を立てたり落としたりする。

-msim

組み込み PowerPC システムで、起動モジュールが ‘sim-crt0.o’ であり、 標準 C ライブラリは ‘libsim.a’ と ‘libc.a’ であることを 仮定する。これは、‘powerpc-*-eabisim’ のデフォルトである。

-mmvme

組み込み PowerPC システムで、起動モジュールが ‘crt0.o’ であり、 標準 C ライブラリは ‘libmvmem.a’ と ‘libc.a’ であることを 仮定する。

-mads

組み込み PowerPC システムで、起動モジュールが ‘crt0.o’ であり、 標準 C ライブラリは ‘libads.a’ と ‘libc.a’ であることを 仮定する。

-myellowknife

組み込み PowerPC システムで、起動モジュールが ‘crt0.o’ であり、 標準 C ライブラリは ‘libyka.a’ と ‘libc.a’ であることを 仮定する。

-memb

組み込み PowerPC システムで、ELF フラグヘッダの PPC_EMB ビットを 立てることで、‘eabi’ 拡張再配置情報が使われることを指示する。

-meabi
-mno-eabi

System V.4 と組み込み PowerPC システムで、 組み込みアプリケーション・バイナリ・インターフェース (Embedded Applications Binary Interface (eabi)) を 遵守する(遵守しない)。 eabi は、System V.4 の仕様に対する一群の修正である。 -meabi を選ぶと、スタックは 8 バイト境界に整合が行なわれ、 関数 __eabimain から呼び出され、 eabi 環境の設定が行なわれ、さらに ‘-msdata’ オプションを 使った場合、r2r13 の両方を使い、二つの小さなデータ領域を 指すことができるようになる。 -mno-eabi を選ぶと、スタックは 16 バイト境界に整合が行なわれ、 main から初期化関数を呼び出さず、 ‘-msdata’ オプションを指定しても、r13 だけが使われ、 小さなデータ領域を一個しか指さない。 ‘-meabi’ オプションは、GCC を ‘powerpc*-*-eabi*’ オプションの どれか一つを使ってコンフィギュレーションした場合は、デフォルトで 有効になる。

-msdata=eabi

System V.4 と組み込み PowerPC システムでは、小さな初期化済みで const のグローバルデータと静的データをセクション ‘.sdata2’ に 置く。‘.sdata2’ セクションはレジスタ r2 が指す。 小さな初期化済みで非 const のグローバルデータと静的データを セクション ‘.sdata’ に置く。‘.sdata’ セクションは レジスタ r13 が指す。小さな非初期化グローバルデータと静的データを セクション ‘.sbss’ セクションに置く。 ‘.sbss’ は、セクション ‘.sdata’ の直後に置かれる。 オプション ‘-msdata=eabi’ は、‘-mrelocatable’ オプションとは 互換性がない。‘-msdata=eabi’ はまた、‘-memb’ オプションも 設定する。

-msdata=sysv

System V.4 と組み込み PowerPC システムでは、小さなグローバルデータと 静的データをセクション ‘.sdata’ に置く。‘.sdata’ セクションは レジスタ r13 が指す。小さな非初期化グローバル データと静的データをセクション ‘.sbss’ に置く。‘.sbss’ は、 セクション ‘.sdata’ の直後に置かれる。 オプション ‘-msdata=sysv’ は、‘-mrelocatable’ オプションとは 互換性がない。

-msdata=default
-msdata

System V.4 と組み込み PowerPC システムで、‘-meabi’ が 指定されている場合は、‘-msdata=eabi’ が指定されている場合と 同じようにコードをコンパイルする。‘-meabi’ が指定されていないと、 ‘-msdata=sysv’ と同じようにコードをコンパイルする。

-msdata-data

System V.4 と組み込み PowerPC システムでは、小さなグローバルデータと 静的データをセクション ‘.sdata’ に置き、小さな非初期化グローバル データと静的データをセクション ‘.sbss’ に置く。しかし、 この小さなデータを参照するのにレジスタ r13 を使わない。 これは、他の ‘-msdata’ オプションが指定されない限り、デフォルトになる。

-msdata=none
-mno-sdata

組み込み PowerPC システムでは、全ての初期化済みグローバルデータと 静的データをセクション ‘.data’ に置き、全ての非初期化データを セクション ‘.bss’ に置く。

-G num

組み込み PowerPC システムでは、num バイト以下のグローバルデータと 静的データを、通常の data あるいは bss セクションではなく、小さな data あるいは小さな bss セクションに置く。デフォルトでは、num は 8 である。‘-G num’ は、リンカにも渡される。 全てのモジュールを同じ値の ‘-G num’ でコンパイルする必要がある。

-mregnames
-mno-regnames

System V.4 と組み込み PowerPC システムでは、アセンブリ言語出力で 記号形式を使ったレジスタ名を出力する(出力しない)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated using texi2html 1.78.