RXファミリの命令には、同一処理に対して複数の命令フォーマットを持つものがあります。
アセンブラでは、命令およびアドレッシングモードの指定に応じて、最短コードの命令フォーマットを選択する最適選択を行います。
アセンブラではオペランドに即値を持つ命令である場合、オペランドに指定された即値の範囲に従い選択可能なアドレッシングから最適選択を行います。以下に即値の範囲について優先順位の高い順に示します。
|
|
|
#imm:1
|
1〜2
|
1H〜2H
|
#imm:2
|
0〜3
|
0H〜3H
|
#imm:3
|
0〜7
|
0H〜7H
|
#imm:4
|
0〜15
|
0H〜0FH
|
#imm:5
|
0〜31
|
0H〜1FH
|
#imm:8
|
-128〜255
|
-80H〜0FFH
|
#uimm:8
|
0〜255
|
0H〜0FFH
|
#simm:8
|
-128〜127
|
-80H〜7FH
|
#imm:16
|
-32768〜65535
|
-8000H〜0FFFFH
|
#simm:16
|
-32768〜32767
|
-8000H〜7FFFH
|
#simm:24
|
-8388608〜8388607
|
-800000H〜7FFFFFH
|
#imm:32
|
-2147483648〜4294967295
|
-80000000H〜0FFFFFFFFH
|
注 1. | 16進表記は32ビット表記も可能です。
例:10進表記”-127”、16進表記”-7FH”は”0FFFFFF81H”と表記できます。 |
注 2. | INT命令のsrcの#immの範囲は0〜255となります。 |
注 3. | RTSD命令のsrcの#immの範囲は#uimm:8を4倍した値となります。 |
ADC, SBB命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
注 | 最適選択対象とならない命令フォーマットとオペランドは記述していません。表内の処理サイズは、特に明記がない場合は"L"となります。 |
表 5.13 | ADC, SBB命令の命令フォーマット |
|
|
|
|
|
|
ADC src,dest
|
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
|
Rd
Rd
Rd
Rd
|
4
5
6
7
|
ADC/SBB src,dest
|
dsp:8[Rs].L
dsp:16[Rs].L
|
-
-
|
Rd
Rd
|
4
5
|
SBB命令では、srcに即値を指定することはできません。
ADD命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
(1) ADD src,dest
|
#uimm:4
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
|
Rd
Rd
Rd
Rd
Rd
|
2
3
4
5
6
|
dsp:8[Rs].memex
dsp:16[Rs].memex
|
-
-
|
Rd
Rd
|
3(memex =UB), 4(memex ≠ UB)
4(memex =UB), 5(memex ≠ UB)
|
(2) ADD src,src2,dest
|
#simm:8
#simm:16
#simm:24
#imm:32
|
Rs
Rs
Rs
Rs
|
Rd
Rd
Rd
Rd
|
3
4
5
6
|
AND, OR, SUB, MUL命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
表 5.15 | AND, OR, SUBおよびMUL命令の命令フォーマット |
|
|
|
|
|
|
AND/OR/SUB/MUL
src,dest
|
#uimm:4
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
|
Rd
Rd
Rd
Rd
Rd
|
2
3
4
5
6
|
dsp:8[Rs].memex
dsp:16[Rs].memex
|
-
-
|
Rd
Rd
|
3(memex = UB), 4(memex ≠ UB)
4(memex = UB), 5(memex ≠ UB)
|
SUB命令では、srcに#simm:8/16/24, #imm32を指定することはできません。
BMCnd命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
BMCnd src,dest
|
B
B
|
#imm:3
#imm:3
|
-
-
|
dsp:8[Rs].B
dsp:16[Rs].B
|
4
5
|
CMP命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
CMP src,src2
|
L
L
L
L
L
L
|
#uimm:4
#uimm:8
#simm:8
#simm:16
#simm:24
#imm:32
|
Rd
Rd
Rd
Rd
Rd
Rd
|
-
-
-
-
-
-
|
2
3
3
4
5
6
|
L
L
|
dsp:8[Rs].memex
dsp:16[Rs].memex
|
Rd
Rd
|
-
-
|
3(memex = UB), 4(memex ≠ UB)
4(memex = UB), 5(memex ≠UB)
|
(7) | DIV, DIVU, EMUL, EMULU, ITOF, MAX, MIN, TST, XOR命令 |
DIV, DIVU, EMUL, EMULU, ITOF, MAX, MIN, MUL, TST, XOR命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
表 5.18 | DIV, DIVU, EMUL, EMULU, ITOF, MAX, MIN, TSTおよびXOR命令の命令フォーマット |
|
|
|
|
|
|
DIV/DIVU/
EMUL/EMULU/ITOF/
MAX/MIN/TST/XOR
|
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
|
Rd
Rd
Rd
Rd
|
4
5
6
7
|
src,dest
|
dsp:8[Rs].memex
dsp:16[Rs].memex
|
-
-
|
Rd
Rd
|
4(memex=UB), 5(memex ≠ UB)
5(memex=UB), 6(memex ≠ UB)
|
ITOF命令では、srcに#simm:8/16/24, #imm32を指定することはできません。
(8) | FADD, FCMP, FDIV, FMUL, FTOI命令 |
FADD, FCMP, FDIV, FMUL, FTOI命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
表 5.19 | FADD, FCMP, FDIV, FMULおよびFTOI命令の命令フォーマット |
|
|
|
|
|
|
FADD/FCMP/FDIV/
FMUL/FTOI
src,dest
|
#imm:32
dsp:8[Rs].L
dsp:16[Rs].L
|
-
-
-
|
Rd
Rd
Rd
|
7
4
5
|
FTOI命令では、srcに#imm32を指定することはできません。
MVTC, STNZ, STZ命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
表 5.20 | MVTC, STNZおよびSTZ命令の命令フォーマット |
|
|
|
|
|
|
MVTC/STNZ/STZ
src,dest
|
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
|
Rd
Rd
Rd
Rd
|
4
5
6
7
|
MOV命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
|
MOV(.size) src,dest
|
B/W/L
|
size
|
Rs(Rs=R0-R7)
|
-
|
dsp:5[Rd](Rd=R0-R7)
|
2
|
B/W/L
|
L
|
dsp:5[Rs](Rs=R0-R7)
|
-
|
Rd(Rd=R0-R7)
|
2
|
B/W/L
|
L
|
#uimm:8
|
-
|
dsp:5[Rd](Rd=R0-R7)
|
3
|
L
L
L
L
L
L
|
L
L
L
L
L
L
|
#uimm:4
#uimm:8
#simm:8
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
-
|
Rd
Rd
Rd
Rd
Rd
Rd
|
2
3
3
4
5
6
|
B
W/L
W
L
L
L
|
B
W/L
W
L
L
L
|
#imm:8
#simm:8
#imm:16
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
-
|
[Rd]
[Rd]
[Rd]
[Rd]
[Rd]
[Rd]
|
3
3
4
4
5
6
|
B
W/L
W
L
L
L
|
B
W/L
W
L
L
L
|
#imm:8
#simm:8
#imm:16
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
-
|
dsp:8[Rd]
dsp:8[Rd]
dsp:8[Rd]
dsp:8[Rd]
dsp:8[Rd]
dsp:8[Rd]
|
4
4
5
5
6
7
|
B
W/L
W
L
L
L
|
B
W/L
W
L
L
L
|
#imm:8
#simm:8
#imm:16
#simm:16
#simm:24
#imm:32
|
-
-
-
-
-
-
|
dsp:16[Rd]
dsp:16[Rd]
dsp:16[Rd]
dsp:16[Rd]
dsp:16[Rd]
dsp:16[Rd]
|
5
5
6
6
7
8
|
B/W/L
B/W/L
|
L
L
|
dsp:8[Rs]
dsp:16[Rs]
|
-
-
|
Rd
Rd
|
3
4
|
B/W/L
B/W/L
|
size
size
|
Rs
Rs
|
-
-
|
dsp:8[Rd]
dsp:16[Rd]
|
3
4
|
B/W/L
B/W/L
|
size
size
|
[Rs]
[Rs]
|
-
-
|
dsp:8[Rd]
dsp:16[Rd]
|
3
4
|
B/W/L
B/W/L
|
size
size
|
dsp:8[Rs]
dsp:16[Rs]
|
-
-
|
[Rd]
[Rd]
|
3
4
|
B/W/L
B/W/L
|
size
size
|
dsp:8[Rs]
dsp:8[Rs]
|
-
-
|
dsp:8[Rd]
dsp:16[Rd]
|
4
5
|
B/W/L
B/W/L
|
size
size
|
dsp:16[Rs]
dsp:16[Rs]
|
-
-
|
dsp:8[Rd]
dsp:16[Rd]
|
5
6
|
MOVU命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
|
MOVU(.size) src,dest
|
B/W
|
L
|
dsp:5[Rs](Rs=R0-R7)
|
-
|
Rd(Rd=R0-R7)
|
2
|
B/W
B/W
|
L
L
|
dsp:8[Rs]
dsp:16[Rs]
|
-
-
|
Rd
Rd
|
3
4
|
PUSH命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
PUSH src
|
dsp:8[Rs]
dsp:16[Rs]
|
-
-
|
-
-
|
3
4
|
ROUND命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
ROUND src,dest
|
dsp:8[Rs]
dsp:16[Rs]
|
-
-
|
Rd
Rd
|
4
5
|
SCCnd命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
SCCnd(.size) src,dest
|
B/W/L
B/W/L
|
-
-
|
-
-
|
dsp:8[Rd]
dsp:16[Rd]
|
4
5
|
XCHG命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
|
|
|
|
|
|
|
XCHG src,dest
|
L
L
|
dsp:8[Rs].memex
dsp:16[Rs].memex
|
-
-
|
Rd
Rd
|
4(memex = UB), 5(memex ≠ UB)
5(memex = UB), 6(memex ≠ UB)
|
(16) | BCLR, BNOT, BSET, BTST命令 |
BCLR, BNOT, BSET, BTST命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。
表 5.27 | BCLR, BNOT, BSETおよびBTST命令の命令フォーマット |
|
|
|
|
|
|
|
BCLR/BNOT/BSET/BTST
src,dest
|
B
B
|
#imm:3
#imm:3
|
-
-
|
dsp:8[Rd].B
dsp:16[Rd].B
|
3
4
|
B
B
|
Rs
Rs
|
-
-
|
dsp:8[Rd].B
dsp:16[Rd].B
|
4
5
|