| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
asm の引数には、可能な限り、汎用の制約文字を使ったほうが良い。
その方が読む人に意味が伝わりやすくなるからだ。
汎用の制約文字では駄目な場合は、色々なアーキテクチャで同じような
意味を持つ制約文字を使うようにする。最も共通して良く使われるのは、
‘m’ と ‘r’ である。それぞれ、メモリと汎用レジスタを表す。
see section 単純制約
それに、‘I’ が、最も一般的な即値定数の形式を表す文字として使われる。
マシンアーキテクチャ毎に、‘config/machine.h’ というファイルで、
固有の制約を追加定義している。これらの制約は、asm 文だけでなく、
コンパイラ自身の命令の生成に使われる。
このため、制約のうちいくつかは、asm 文に使うにはあまり意味の
ないものがある。
制約は以下のマクロ群によって定義される。
REG_CLASS_FROM_LETTERレジスタクラスの制約(普通は小文字だけである)。
CONST_OK_FOR_LETTER_P即値定数の制約。ワード長、あるいはそれより短い精度の、非浮動小数点定数 向けである。通常、大文字である。
CONST_DOUBLE_OK_FOR_LETTER_P即値定数の制約。全ての浮動小数点定数とワード長を越える精度の定数 向けである。通常、大文字である。
EXTRA_CONSTRAINTレジスタまたはメモリの特別な場合。 このマクロは必須ではなく、少数のマシンでのみ定義されている。
本コンパイラのソースの、読者のマシン向けのマクロ定義を調べるのが、 正しい制約を使っているかどうかを確認するのに一番良い方法である。 とはいうものの、以下に幾つかの特定の機種で使える機種依存の制約を 要約しておく。
f浮動小数点レジスタ
F浮動小数点定数 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0 のどれか一つ
G符号反転したときに制約 ‘F’ を満たす浮動小数点定数
zFPR-GPR 間移動用の ‘FPMEM’ スタックメモリ
Iデータ処理命令の即値オペランドとして有効な整数。 すなわち、0 から 255 の間の整数を 2 の倍数分回転したものである。
J-4095 〜 4095 の範囲の整数
Kビット反転(1の補数)したときに制約 ‘I’ を満たす整数
L符号反転(2の補数)したときに制約 ‘I’ を満たす整数
M0 〜 32 の範囲の整数
Q正確なアドレスが一個のレジスタにある場合のメモリ参照
(asm 文の場合には、‘m’ の方が良い)。
R定数領域に置かれるデータ
S現在ファイルのテキストセグメント中のシンボル
lローカルレジスタ 0
bバイトポインタ(‘BP’)レジスタ
q‘Q’ レジスタ
h特殊目的のレジスタ
A第一アキュムレータレジスタ
a他のアキュムレータレジスタ
f浮動小数点レジスタ
I0 より大きく、0x100 より小さい定数
J0 より大きく、0x1000 より小さい定数
K上位 24 ビットがオン(1)の定数
L上位 8 ビットがオン(1) の 16 ビット定数
M上位 16 ビットがオン(1) の 32 ビット定数
N8ビットに収まる 32ビットの負の定数。
O定数 0x80000000か、あるいは、29050 の場合は、下位16ビットが 0 である 任意の32ビット定数。
P8ビットに収まる 16ビットの負の定数。
GH浮動小数点定数(asm 文では、代わりに機種独立の ‘E’ か ‘F’
を使うこと。)
bアドレスベースレジスタ
f浮動小数点レジスタ
h‘MQ’, ‘CTR’, ‘LINK’ レジスタ
q‘MQ’ レジスタ
c‘CTR’ レジスタ
l‘LINK’ レジスタ
x‘CR’ レジスタ(条件レジスタ)の 0 番
y‘CR’ レジスタ(条件レジスタ)
zFPR-GPR 間転送用の ‘FPMEM’ スタックメモリ
I符号付きの 16 ビット定数
J下位16ビットが 0 の定数
K上位の 16 ビットが 0 の定数
Lマスク用オペランドとして適切な定数
M31 より大きい定数
N2 の正確な冪乗
Oゼロ
P符号反転したものが符号付き 16 ビット定数になる定数
G一ワードにつき一回の命令でレジスタにロード可能な浮動小数点定数。
Qあるレジスタからのオフセットであるメモリオペランド
(asm 文の場合は、‘m’ の方が良い)。
RAIX の TOC エントリ
S64ビットのマスク・オペランドとして適した定数。
USystem V Release 4 の小データ領域の参照
q‘a’、b、c、d レジスタ
A‘a’、d レジスタ(64ビット int 向け)
f浮動小数点レジスタ
t第一(スタックの一番上の)浮動小数点レジスタ
u第二浮動小数点レジスタ
a‘a’ レジスタ
b‘b’ レジスタ
c‘c’ レジスタ
d‘d’ レジスタ
D‘di’ レジスタ
S‘si’ レジスタ
I0〜31 の定数(32ビットのシフト用)
J0〜63 の定数(64ビットのシフト用)
K‘0xff’
L‘0xffff’
M0、1、2、3(lea 命令のシフト数である)
N0 から 255 の範囲の定数(out 命令用)
G80387 標準の浮動小数点定数
f浮動小数点レジスタ(fp0 から fp3)
lローカルレジスタ(r0 から r15)
bグローバルレジスタ(g0 から g15)
d任意のローカルまたはグローバルレジスタ
I0 から 31 の整数
J0
K-31 から 0 の整数
G浮動小数点の 0
H浮動小数点の 1
d汎用整数レジスタ
f浮動小数点レジスタ(もしあれば)
h‘Hi’ レジスタ
l‘Lo’ レジスタ
x‘Hi’ または ‘Lo’ レジスタ
y汎用整数レジスタ
z浮動小数点ステータスレジスタ
I符号付き 16 ビット定数(算術演算命令向け)
Jゼロ
Kゼロ拡張された 16 ビット定数(論理命令向け)
L下位16ビットがゼロの定数(lui でロード可能)
M32ビット定数のうち、ロードするのに 2 命令必要なもの(‘I’ でも ‘K’ でも ‘L’ でもない定数)
N負の16ビット定数
O二の冪乗
P正の 16 ビット定数
G浮動小数点のゼロ
Q一個以上の命令でロード可能なメモリ参照
(asm 文の場合は、‘m’ の方が良い)。
R一個の命令でロード可能なメモリ参照
(asm 文の場合は、‘m’ の方が良い)。
S外部 OSF/rose PIC 形式でのメモリ参照
(asm 文の場合は、‘m’ の方が良い)。
aアドレスレジスタ
dデータレジスタ
f利用可能なら、68881 の浮動小数点レジスタ
x利用可能なら、Sun の FPA の浮動小数点レジスタ。
y利用可能なら、Sun の FPA の浮動小数点レジスタの最初の 16 個。
I1 〜 8 までの整数
J16 ビットの符号付きの数
K絶対値が 0x80 より大きい符号付き整数。
L-8 〜 -1 の整数
M絶対値が 0x100 より大きい符号付き整数。
G68881 の定数ではない浮動小数点定数。
HSun の FPA で使用可能な浮動小数点定数。
f32 ビットまたは 64 ビットの値を保持できる浮動小数点レジスタ。
e64 ビットまたは 128 ビットの値を保持できる浮動小数点レジスタ。
I13ビットの符号付き定数
Jゼロ
K下位12ビットが 0 の 32ビット定数(sethi 命令でロード可能な
定数)
G浮動小数点数のゼロ。
H13 ビットの符号付き定数で、32 ビットまたは 64 ビットに符号拡張される。
Q1命令でロード可能なメモリ参照(‘m’ の方が、asm 文には
もっと適している。)
S定数、またはメモリアドレス
T8バイト境界に整合されたメモリアドレス
U偶数レジスタ
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated
using texi2html 1.78.