SH-2A、SH2A-FPU
6. 各命令の説明
6.1 新規命令の概要
SH-2A/SH2A-FPU
では、SH2EのCPU
命令(最上位4
ビットが0000~1110
の命令コード)とSH4
のFPU
命令(最上位4
ビットが1111
の命令コード)に割り当てた命令コード以外の空いている箇所 に新規命令を追加しています。ただし、SH4のFPU
命令である、(a) XDm/XDnを指定するFMOV
命 令と(b)FRCHG命令と(c) FIPR、FTRV命令については、サポートしていません。本章では、その新規命令の各々について、詳しく説明します。
0000···
SH-2A
1110···
1111···
㨪CPU
㧔SH2E㧗ᣂⷙ㧕
FPU
㧔abcએᄖߩSH4㧕
新規命令は下記(1)~(14)です。(1)~(3)は、32ビット固定長命令、(4)~(14)は、16ビット固定長命 令です。
(1)
イミディエイト転送命令MOVI20, MOVI20S
命令コード内の
20
ビットイミディエイトデータをレジスタに転送する命令です。本命令との組み 合わせで、28
ビットアドレスを容易に生成できるため、最大256M
バイトまでオンチップメモリのア ドレスを指定することが可能となります。(2)
構造体アクセス用命令MOV.B/W/L Rm,@(disp12, Rn), MOV.B/W/L @(disp12, Rm), Rn MOVU.B/W @(disp12, Rm), Rn
FMOV.S FRm, @(disp12, Rn), FMOV.S @(disp12, Rm), FRn FMOV.D DRm, @(disp12, Rn), FMOV.D @(disp12, Rm), DRn
命令コードの中に配置した
12
ビットのディスプレースメントを指定してメモリを参照する命令で す。また、ゼロ拡張の実行を自動的に行う、符号なしロード命令MOVU
を追加しています。(3)
ビット操作命令(メモリ対象)BAND.B #imm3, @(disp12, Rn), BOR.B #imm3, @(disp12,Rn) BCLR.B #imm3, @(disp12, Rn), BSET.B #imm3, @(disp12, Rn) BST.B #imm3, @(disp12, Rn), BLD.B #imm3, @(disp12, Rn) BXOR.B #imm3, @(disp12, Rn)
BANDNOT.B #imm3, @(disp12, Rn), BORNOT.B #imm3, @(disp12,Rn) BLDNOT.B #imm3, @(disp12, Rn)
BAND.B
命令とBOR.B
命令とBXOR.B
命令は、メモリ中の1ビットとT
ビットとの論理演算を行6.
各命令の説明Rev.4.00 2011.02.22 6-2 R01US0031JJ0400
SH-2A、SH2A-FPU
い、その結果を
T
ビットに格納する命令です。BCLR.B命令とBSET.B
命令は、メモリ中の1
ビット を操作する命令です。BST.B命令とBLD.B
命令は、メモリ中の1
ビットとT
ビット間の転送を実行 する命令です。また、BANDNOT.B命令と
BORNOT.B
命令は、メモリ中の1
ビットを反転した値とT
ビットとの 論理演算を行い、その結果をT
ビットに格納する命令です。BLDNOT.B
命令は、メモリ中の1
ビットを反転しT
ビットに格納する命令です。指定されたビット以外は影響を受けません。
(4)
ビット操作命令(汎用レジスタ対象)BCLR #imm3, Rn, BSET #imm3, Rn BST #imm3, Rn , BLD #imm3, Rn
BCLR
命令とBSET命令は、汎用レジスタRn
のLSB側8
ビット中の1ビットを操作する命令です。BST
命令とBLD
命令は、汎用レジスタRn
のLSB
側8
ビット中の1ビットとT
ビット間の転送を実 行する命令です。指定されたビット以外は影響を受けません。(5)
乗算結果Rn
格納命令MULR
32
ビット×32ビットの乗算を行い、乗算結果の下位32
ビットを汎用レジスタRn
に格納する命令 です。(6)
一括除算命令DIVS, DIVU
32
ビット÷32ビットの除算を一括で行う命令です。DIVU
命令は無符号のデータを除算する命令、DIVS
命令は符号付きのデータを除算する命令です。(7)
飽和値比較命令CLIPS, CLIPU
飽和値との比較を行い、汎用レジスタ
Rn
が飽和上限値を上回るときは飽和上限値を、飽和下限値 を下回るときは飽和下限値を、汎用レジスタRn
に格納します。なお、バイト、ワードの飽和値のみ をサポートしています。(8)
バレルシフト命令SHAD, SHLD
任意のビットをシフトする命令です。算術シフトと論理シフトの
2
種類の命令を用意しています。(9)
複数レジスタ退避・復帰命令MOVML, MOVMU
複数の連続したレジスタをメモリへ退避する、あるいはメモリから復帰する命令です。汎用レジ スタ
Rn
を指定し、指定したRn
より上位もしくは下位の連続した汎用レジスタの退避や復帰をする ことが可能となります。(10) T
ビット反転転送命令MOVRT, NOTT
T
ビットを反転して汎用レジスタRn
あるいはT
ビットに転送する命令です。(11)
レジスタバンク関連命令RESBANK, STBANK, LDBANK
割り込み処理の高速化のために搭載した、レジスタバンクに関する命令です。
6.
各命令の説明Rev.4.00 2011.02.22 6-3 R01US0031JJ0400 SH-2A、SH2A-FPU
(12)
逆スタック転送命令MOV.B/W/L
スタックの伸長する方向が逆である転送命令です。
(13)
遅延スロットなし無条件分岐命令JSR/N, RTS/N
不要な
NOP
命令の削減によりコードサイズを削減するため、遅延スロットを持たない命令を提供 しています。(14)
キャッシュ関連命令PREF
SH3-DSP
のキャッシュ関連命令を提供しています。6.
各命令の説明Rev.4.00 2011.02.22 6-4 R01US0031JJ0400
SH-2A、SH2A-FPU
ドキュメント内
SH-2A、SH2A-FPU ユーザーズマニュアル ソフトウェア編
(ページ 71-74)