5.1.8 命令フォーマットの最適選択

RXファミリの命令には、同一処理に対して複数の命令フォーマットを持つものがあります。

アセンブラでは、命令およびアドレッシングモードの指定に応じて、最短コードの命令フォーマットを選択する最適選択を行います。

(1)

即値について

アセンブラではオペランドに即値を持つ命令である場合、オペランドに指定された即値の範囲に従い選択可能なアドレッシングから最適選択を行います。以下に即値の範囲について優先順位の高い順に示します。

表 5.12

即値の範囲

#imm

10進記法

16進記法

#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倍した値となります。

(2)

ADC, SBB命令

ADC, SBB命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

最適選択対象とならない命令フォーマットとオペランドは記述していません。表内の処理サイズは、特に明記がない場合は"L"となります。

表 5.13

ADC, SBB命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

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に即値を指定することはできません。

(3)

ADD命令

ADD命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.14

ADD命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

(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

(4)

AND, OR, SUB, MUL命令

AND, OR, SUB, MUL命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.15

AND, OR, SUBおよびMUL命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

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を指定することはできません。

(5)

BMCnd命令

BMCnd命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.16

BMCnd命令の命令フォーマット

命令フォーマット

処理

サイズ

対象

コードサイズ[バイト]

src

src2

dest

BMCnd src,dest

B

B

#imm:3

#imm:3

-

-

dsp:8[Rs].B

dsp:16[Rs].B

4

5

(6)

CMP命令

CMP命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.17

CMP命令の命令フォーマット

命令フォーマット

処理

サイズ

対象

コードサイズ[バイト]

src

src2

dest

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命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

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命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

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を指定することはできません。

(9)

MVTC, STNZ, STZ命令

MVTC, STNZ, STZ命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.20

MVTC, STNZおよびSTZ命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

MVTC/STNZ/STZ

src,dest

#simm:8

#simm:16

#simm:24

#imm:32

-

-

-

-

Rd

Rd

Rd

Rd

4

5

6

7

(10)

MOV命令

MOV命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.21

MOV命令の命令フォーマット

命令

フォーマット

size

処理

サイズ

対象

コード

サイズ

[バイト]

src

src2

dest

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

(11)

MOVU命令

MOVU命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.22

MOVU命令の命令フォーマット

命令フォーマット

size

処理

サイズ

対象

コードサイズ

[バイト]

src

src2

dest

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

(12)

PUSH命令

PUSH命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.23

PUSH命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

PUSH src

dsp:8[Rs]

dsp:16[Rs]

-

-

-

-

3

4

(13)

ROUND命令

ROUND命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.24

ROUND命令の命令フォーマット

命令フォーマット

対象

コードサイズ[バイト]

src

src2

dest

ROUND src,dest

dsp:8[Rs]

dsp:16[Rs]

-

-

Rd

Rd

4

5

(14)

SCCnd命令

SCCnd命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.25

SCCnd命令の命令フォーマット

命令フォーマット

size

対象

コードサイズ[バイト]

src

src2

dest

SCCnd(.size) src,dest

B/W/L

B/W/L

-

-

-

-

dsp:8[Rd]

dsp:16[Rd]

4

5

(15)

XCHG命令

XCHG命令に対して、最適選択の対象となる命令フォーマットとオペランドを優先順位の高い順に示します。

表 5.26

XCHG命令の命令フォーマット

命令フォーマット

処理

サイズ

対象

コードサイズ[バイト]

src

src2

dest

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命令の命令フォーマット

命令フォーマット

処理

サイズ

対象

コードサイズ[バイト]

src

src2

dest

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