最終更新:2014-04-01 (火) 16:27:56 (3675d)  

オペランド制約
Top / オペランド制約

http://gcc.gnu.org/onlinedocs/gcc/Constraints.html

http://www.sra.co.jp/public/sra/product/wingnut/gcc/gcc-j.html#Constraints

単純制約

  • 空白文字無視される
    mメモリオペランドを指定
    oメモリオペランドを指定。ただし、許されるアドレスは「オフセット指定可能な」アドレスだけ
    Vオフセット指定可能でないメモリオペランドを指定
    <自動デクリメントのアドレスのメモリオペランドを指定
    >自動インクリメントのアドレスのメモリオペランドを指定
    rレジスタオペランドが許される。ただし、レジスタは汎用レジスタ
    i整数の即値オペランド(定数値のもの)が許される
    n既知の数値を持つ整数即値のオペランドが許される
    I, J, K, ... P機種依存の方法で、指定された範囲の明示された整数値を持つ整数の即値オペランドを許すように定義することができる
    E浮動小数点の即値オペランド(式コードは const_double)が許される
    F浮動小数点の即値オペランド(式コードは const_double)が許される
    G,HG と H は、機種依存の方法で、特定の範囲の値の浮動小数点即値オペランドを許すように定義することができる。
    s値が明示的な整数ではない、整数即値オペランドが許される。
    g任意のレジスタ、メモリ、整数の即値のオペランドが許される。ただし、汎用レジスタでないレジスタは除く
    Xどんなオペランドでも、たとえ general_operand を満たさないものであっても許される
    0,1,2,...9指定したオペランド番号にマッチするオペランドが許される
    p有効なメモリアドレスであるオペランドが許される
    その他d, a and f are defined on the 68000/68020 to stand for data, address and floating point registers.

制約修飾子文字

  • =オペランドは書き込み専用
    +オペランドが読み込みと書き込みの両方に使われる
    &(ある特定の選択肢において)このオペランドが早期破壊 オペランドであることを意味する。早期破壊オペランドとは、命令が入力オペランドを使い終わる前に変更されるオペランド
    %このオペランドと次のオペランドが交換可能であることを指示する
    #次に続く文字からコンマまでの全ての文字を制約としては使わない
    *次に続く文字がレジスタ選択の際には無視される

i386

aeaxレジスタを割り当てる
bebx?レジスタを割り当てる
cecx?レジスタを割り当てる
dedx?レジスタを割り当てる
Sesi?レジスタを割り当てる
Dsdi?レジスタを割り当てる