条件コードでスキップ 条件コードでスキップ 条件コードでスキップ 条件コードでスキップ
処理 処理 処理
処理: if (condition IMM4 is true)
then begin
if (Mem16[PC + 2] is PFX) then PC← PC + 6 else PC← PC + 4 end
アセンブラの構文 アセンブラの構文 アセンブラの構文
アセンブラの構文: SKPS cc_IMM4 例
例 例
例: SKPS cc_ne
BSR SendIt ; Z フラグがクリアの場合にのみ呼び出し NOP ; (遅延スロット) どちらの場合でも実行 説明
説明 説明
説明: 指定した条件が真の場合、次の命令をスキップします。 次の命令が PFX の場合、
PFX とその次の命令を一緒にスキップします。
条件コード 条件コード 条件コード
条件コード: 設定:
cc_c 0x0 (C) cc_nc 0x1 (not C)
cc_z 0x2 (Z) cc_nz 0x3 (not Z) cc_mi 0x4 (N)
cc_pl 0x5 (not N) cc_ge 0x6 (not (N xor V))
cc_lt 0x7 (N xor V) cc_le 0x8 (Z or (N xor V)) cc_gt 0x9 (Not (Z or (N xorV)))
cc_v 0xa (V) cc_nv 0xb (not V)
cc_la 0xc (C or Z) cc_hi 0xd (not (C or Z)) 補足的に利用できるエイリアス・フラグ: cc_cs = cc_c
cc_eq = cc_z
cc_n = cc_mi cc_vs = cc_v
cc_cc = cc_nc cc_ne = cc_nz
cc_vc = cc_nv cc_p = cc_pl
これらのコードは、if 〜を表します。例えば、skps cc_eq は if equal と同じです。
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: i4w 命令フィールド
命令フィールド 命令フィールド
命令フィールド: IMM4 = 4 ビットの即値
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 0 1 1 1 0 IMM4
ST
32 ビット・データをメモリに格納
ビット・データをメモリに格納 ビット・データをメモリに格納 ビット・データをメモリに格納
処理 処理 処理
処理: 前に前に前に前に PFX がないがないがないがない: Mem32[align32(RB)]← RA 前に
前に 前に
前に PFX があるがあるがあるがある:
Mem32[align32(RB + (σ(K) x 4))]← RA アセンブラの構文
アセンブラの構文 アセンブラの構文
アセンブラの構文: ST [%rB],%rA 例
例 例
例: 前に前に前に前に PFX がないがないがないがない:
ST [%g0],%i3 ; %g0 はポインタ、%i3 をストア 前に
前に 前に
前に PFX があるがあるがあるがある:
PFX 3 ; ワード・オフセット ST [%g0],%i3 ; %g0 + 12 をストア 説明
説明 説明
説明: 前に前に前に前に PFX がないがないがないがない:
RA の 32 ビット・データ値をメモリに格納します。 データは常にRB のビット 31..2 で指定されたワード・アラインされたアドレスに書き込まれます (RB の 2 つの LSB は無視されます)。
前に 前に 前に
前に PFX があるがあるがあるがある:
K の値は符号拡張され、ワード・スケールされた符号付オフセットとして使用 されます。 このオフセットはベース・ポインタ・アドレス RB (ビット 1..0 は無
視) に加算され、最終的にワード・アラインされたアドレスにデータが書き込ま
れます。
条件コード 条件コード 条件コード
条件コード: フラグ: 影響なし
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: RR 命令フィールド
命令フィールド 命令フィールド
命令フィールド: A = オペランド RA のレジスタ・インデックス B = オペランド RB のレジスタ・インデックス
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 1 1 B A
N V Z C
- - -
-2
命命命命令 令令令 セセセセッ ッッット トトト
ST16D
16 ビット・データをメモリに格納
ビット・データをメモリに格納 ビット・データをメモリに格納 ビット・データをメモリに格納 ( 算出したハーフ・ワード・ポインタ・アドレス 算出したハーフ・ワード・ポインタ・アドレス 算出したハーフ・ワード・ポインタ・アドレス 算出したハーフ・ワード・ポインタ・アドレス
)処理 処理 処理
処理: 前に前に前に前に PFX がないがないがないがない:
hnMem32[align32(RA)]← hn%r0、ここで n = RA[1]
前に 前に 前に
前に PFX があるがあるがあるがある:
hnMem32[align32(RA + (σ(K) x 4))]← hn%r0、ここで n = RA[1]
アセンブラの構文 アセンブラの構文 アセンブラの構文
アセンブラの構文: ST16d [%rA],%r0 例
例 例
例: 前に前に前に前に PFX がないがないがないがない:
FILL16 %r0,%g7 ; %r0 で %g7 の short を複製
ST16d [%o3],%r0 ; %r0 の %o3[1] 番目の short int を [%o3] にストア ;第 2 オペランドは %r0 でなければなりません。
前に 前に 前に
前に PFX があるがあるがあるがある: FILL16 %r0,%g3 PFX 5
ST16d [%o3],%r0 ; 上記と同じメモリに 20 バイト・オフセット 説明説明
説明説明: 前に前に前に前に PFX がないがないがないがない:
RA で指定しているハーフ・ワード・アラインされたメモリのアドレスに、%r0 の 2 つのハーフ・ワードのいずれかを格納します。 ビット RA[1] は、格納すべ き %r0 のハーフ・ワードを選択します (ハーフ・ワード 1 は最上位です)。 RA[0]
は無視されます。
ST16d は FILL16 と組み合わせて、2 つの命令でハーフ・ワードのストアを実行
します。 レジスタ %rX のビット 15..0 にハーフ・ワードがある場合、以下のシー
ケンスによって RA で与えられるハーフ・ワード・アラインされたメモリ・ア ドレスにこのハーフ・ワードが書き込まれます。
FILL16 %r0,%rX ST16d [%rA],%r0 前に
前に 前に
前に PFX があるがあるがあるがある:
K の値は符号拡張され、ワード・スケールされた符号付オフセットとして使用 されます。 このオフセットは、ベース・アドレス RA に加算され、最終的なバイ ト・アドレスにデータが書き込まれます。
条件コード 条件コード 条件コード
条件コード: フラグ: 影響なし
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: Rw 命令フィールド
命令フィールド 命令フィールド
命令フィールド: A = オペランド RA のレジスタ・インデックス
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 0 0 0 1 A
N V Z C
- - -
-ST16S
16 ビット・データをメモリに格納
ビット・データをメモリに格納 ビット・データをメモリに格納 ビット・データをメモリに格納 ( 静的ハーフ・ワード・オフセット・アドレス 静的ハーフ・ワード・オフセット・アドレス 静的ハーフ・ワード・オフセット・アドレス 静的ハーフ・ワード・オフセット・アドレス
)処理 処理 処理
処理: 前に前に前に前に PFX がないがないがないがない:
hnMem32[align32(RA)]← hn%r0、ここで n = IMM1 前に
前に 前に
前に PFX があるがあるがあるがある:
hnMem32[align32(RA + (σ(K) x 4))]← hn%r0、ここで n = IMM1 アセンブラの構文
アセンブラの構文 アセンブラの構文
アセンブラの構文: ST16s [%rA],%r0,IMM1 例
例 例
例: ST16s [%g8],%r0,1
説明 説明 説明
説明: 前に前に前に前に PFX がないがないがないがない:
%r0 の 2 つのハーフ・ワードのいずれかを、(RA[31..2] + IMM1 x 2) で指定する ハーフ・ワード・アラインされたメモリ・アドレスに格納します。 2 つのビット RA[1..0] は無視されます。 IMM2 は、%r0 の格納すべきハーフ・ワードを選択し ます (ハーフ・ワード #1 は最上位です)。
ST16s は FILL16 と組み合わせて、ワード・アラインしたベース・アドレスから ハーフ・ワード・オフセットした位置に、ハーフ・ワードのストアを実行しま
す。 レジスタ %rX のビット 15..0 にハーフ・ワードがある場合、以下のシーケ
ンスによって、(RA + Y x 2) で与えられるハーフ・ワード・アラインされたメモ リ・アドレスにこのハーフ・ワードが書き込まれます (RA にワード・アライン されたポインタがあると仮定)。
FILL16 %r0,%rX PFXY >> 2
ST16s [%rA],%r0,(Y >> 1) & 1 前に
前に 前に
前に PFX があるがあるがあるがある:
K と IMM1 を連結して、12 ビットの符号付きハーフ・ワード・スケールされた オフセットが作成されます。このオフセット (K : IMM1) は ハーフ・ワード・ス ケール (2 で乗算 ) され、さらに 32 ビットに符号拡張されて、ST 処理のハー フ・ワード・オフセットとして使用されます。
条件コード 条件コード 条件コード
条件コード: フラグ: 影響なし
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: Rilu 命令フィールド
命令フィールド 命令フィールド
命令フィールド: A = オペランド RA のレジスタ・インデックス IMM1 = 1 ビットの即値
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 0 1 1 0 1 IMM1 0 A
N V Z C
- - -
-2
命命命命令 令令令 セセセセッ ッッット トトト
ST8D
8 ビット・データをメモリに格納
ビット・データをメモリに格納 ビット・データをメモリに格納 ( ビット・データをメモリに格納 算出したバイト・ポインタ・アドレス 算出したバイト・ポインタ・アドレス 算出したバイト・ポインタ・アドレス 算出したバイト・ポインタ・アドレス
)処理 処理 処理
処理: 前に前に PFX がない前に前に がないがないがない:
bnMem32[align32(RA)]← bn%r0、ここで n = RA[1..0]
前に前に前に
前に PFX があるがあるがあるがある:
bnMem32[align32(RA +σ(K) x 4)]]← bn%r0、ここで n = RA[1..0]
アセンブラの構文 アセンブラの構文 アセンブラの構文
アセンブラの構文: ST8d [%rA],%r0 例
例 例
例: 前に前に前に前に PFX がないがないがないがない:
FILL8 %r0,%g7 ; %r0 で %g7 の下位バイトを倍増 ST8d [%o3],%r0 ; %r0 の %o3[1..0] 番目のバイトを ;[%o3] に格納
;第 2 オペランドは %r0 でなければなりません。
前に PFX がある: FILL8 %r0,%g3 PFX 5
ST8d [%o3],%r0 ; 上記と同じメモリに 20 バイト・オフセット 説明
説明 説明
説明:7 前に前に前に前に PFX がないがないがないがない:
%r0 の 4 つのバイトのいずれかを、RA で指定しているバイト・アドレスでメ モリに格納します。 2ビット RA[1..0] は、%r0 の格納すべきバイトを選択します (バイト 3 は最上位です)。
ST8d は FILL8 と組み合わせて、2 つの命令でバイトのストアを実行します。 レ
ジスタ %rX のビット 7..0 にバイトがある場合、以下のシーケンスによって、RA で与えられるバイト・アドレスのメモリにこのバイトが書き込まれます。
FILL8 %r0,%rX ST8d [%rA],%r0 前に PFX がある:
K の値は符号拡張され、ワード・スケールされた符号付オフセットとして使用 されます。 このオフセットは、ベース・アドレス RA に加算され、最終的なバイ ト・アドレスにデータが書き込まれます。
条件コード 条件コード 条件コード
条件コード: フラグ: 影響なし
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: Rw 命令フィールド
命令フィールド 命令フィールド
命令フィールド: A = オペランド RA のレジスタ・インデックス
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 0 0 0 0 A
N V Z C
- - -
-ST8S
8 ビット・データをメモリに格納
ビット・データをメモリに格納 ビット・データをメモリに格納 ビット・データをメモリに格納 ( 静的バイト・オフセット・アドレス 静的バイト・オフセット・アドレス 静的バイト・オフセット・アドレス 静的バイト・オフセット・アドレス
)処理 処理 処理
処理: 前に前に前に前に PFX がないがないがないがない:
bnMem32[align32(RA)]← bn%r0、ここで n = IMM2 前に
前に 前に
前に PFX があるがあるがあるがある:
bnMem32[align32(RA + (σ(K) x 4))]← bn%r0、ここで n = IMM2 アセンブラの構文
アセンブラの構文 アセンブラの構文
アセンブラの構文: ST8s [%rA],%r0,IMM2 例
例 例
例: 前に前に前に前に PFX がないがないがないがない: MOVI %g4,12
ST8s [%g4],%r0,3 ; %r0 の上位バイトを mem[15] に格納 前に
前に 前に
前に PFX があるがあるがあるがある: PFX 9
ST8s [%g4],%r0,2 ; %r0 のバイト 2 を ; mem[%g4 + 36 + 2] に格納 説明
説明 説明
説明: 前に前に前に前に PFX がないがないがないがない:
%r0 の 4 つのバイトのいずれかを、(RA[31..2] + IMM2) で指定しているメモリ のバイト・アドレスに格納します。 2 つのビット RA[1..0] は無視されます。 IMM2 は、%r0 の格納すべきバイトを選択します (バイト 3 は最上位です)。
ST8s は FILL8 と組み合わせて、ワード・アラインしたベース・ポインタにバイ ト・オフセットした位置にバイトのストアを実行します。 レジスタ %rX のビッ ト 7..0 にバイトがある場合、以下のシーケンスによって、(RA + Y) で与えられ るメモリのバイト・アドレスにこのバイトが書き込まれます (RA にワード・ア ラインされたポインタがあると仮定)。
FILL8 %r0,%rX PFXY >> 2
ST8s [%rA],%r0,Y & 3 前に
前に 前に
前に PFX があるがあるがあるがある:
バイト・スケールされた 13 ビットの符号付きオフセットは、K と IMM2 を連結 して作成されます。 このオフセット (K : IMM2) は 32 ビットに符号拡張され、ST 処理のバイト・オフセットとして使用されます。
条件コード 条件コード 条件コード
条件コード: フラグ: 影響なし
命令のフォーマット 命令のフォーマット 命令のフォーマット
命令のフォーマット: Ri2u 命令フィールド
命令フィールド 命令フィールド
命令フィールド: A = オペランド RA のレジスタ・インデックス IMM2 = 2 ビットの即値
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 0 1 1 0 0 IMM2 A
N V Z C
- - -