英特爾 XScale(R) 技術主題MIAxy - 乘法與內部累加

語法

MIA xy [ condition ] acc0, op1 , op2

其中:

 x

以下情況之一:
B(暫存器底部,包含暫存器 op1 的下一半)
T(暫存器頂部,包含暫存器 op1 的上一半)

 y

以下情況之一:
B(暫存器底部,包含暫存器 op2 的下一半)
T(暫存器頂部,包含暫存器 op2 的上一半)

 condition

16 個條件之一。請參閱條件程式碼狀態

 acc0

內部 40 位累加器

 op1

包含被乘數的暫存器

 op2

包含乘數的暫存器

說明

MIAxy 指令執行以下操作:

if ConditionPassed ( condition ) then
if (bit[17] == 0)
operand1
= op1[15:0]
else
operand1
= op1[31:16]
if (bit[16] == 0)
operand2
= op2[15:0]
else
operand2
= op2[31:16]
acc0[39:0] = sign_extend ( operand1 * operand2 ) + acc0[39:0]

 

使用 MIAxy 指令執行 16 位有符號乘法,結果加到一個 40 位累加器上。x 代表暫存器 op1 的上一半或下一半。
y
代表暫存器 op2 的上一半或下一半。助記符 T(代表頂部)對應暫存器的位 [31:16],使用值 1H 選擇。值 0H 可選擇暫存器的位 [15:0],它使用助記符 B(代表底部)指定。

備註

指令中指定的條件必須與條件程式碼狀態匹配,否則不執行指令。

影響的標誌

編碼

31

 

28

27

26

25

24

23

22

21

20

19

18

17

16

15

 

12

11

10

9

8

7

6

5

4

3

 

0

condition

1

1

1

0

0

0

1

0

1

1

x

y

op2

0

0

0

0

0

0

0

1

op1

示例

1                          @.text
2                          @.globl funcmiaxy
3                          @.align 0
4
5                          @ * * * MIAxy * * *
6
7                    AREA example, CODE, READONLY
8
9    00000000   E3A00000   MOV     R0, #2147483647
10   00000004   E3A01001   MOV     R1, #1
11   00000008   E5801000   STR     R1, [R0]
12   00000012   E5902000   LDR     R2, [R0]
13
14   00000016   E3A0100A   MOV     R1, #10
15   00000020   E3A02002   MOV     R2, #2
16   00000024   E5812000   STR     R2, [R1]
17   00000028   E591308C   LDR     R3, [R1, #0x8c]
18
19   00000032   EE2C3012   MIABB   acc0, R2, R3
20   00000036   EEAFFF12   MIABT   acc1, R2, R3
21   00000040   EEAFFF12   MIATT   acc2, R2, R3
22                         END

更多資訊

請參閱 MIA 指令
請參閱 MIAPH 指令