MIAPH [ condition ] acc0, op1 , op2
其中:
condition |
16 個條件之一。請參閱條件程式碼狀態。 |
acc0 |
內部 40 位累加器 |
op1 |
包含被乘數的暫存器 |
op2 |
包含乘數的暫存器 |
MIAPH 指令執行以下操作:
if ConditionPassed (condition ) then
acc0 = sign_extend ( (op1[31:16] * op2[31:16]) +(op1[15:0] * op2[15:0]) ) + acc0[39:0]
使用 MIAPH 指令在壓縮半字數據上執行兩個 16 位有符號乘法。結果加到一個 40 位累加器。
首先將暫存器 op1 中的值的低 16 位與暫存器 op2 中的值的低 16 位相乘。然後將暫存器 op1 中的值的高 16 位與暫存器 op2 中的值的高 16 位相乘。兩種情況下的結果都是有符號 32 位乘積。這些乘積加到 40 位累加器中的值上。
指令中指定的條件必須與條件程式碼狀態匹配,否則將指令當作 NO 操作。
無
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 |
0 |
0 |
0 |
op2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
op1 |
1 @.text
2 @.globl funcmiaph
3 @.align 0
4
5 @ * * * MIAPH * * *
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 E1D020F0 LDRSH R2, [R0]
13
14 00000016 E3A0100A MOV R1, #10
15 00000020 E3A02002 MOV R2, #2
16 00000024 E5812000 STR R2, [R1]
17 00000028 E15138FC LDRSH R3, [R1, #0x8c]
18
19 00000032 EE283012 MIAPH acc0, R2, R3
20 END