WSAD - 求和與累加

語法

WSADlength[Z][condition] dest, op1, op2

其中:

length 所操作的數據長度,可以由以下字元之一指定:
B -- 8 位(位元組)SIMD 欄位
H -- 16 位(半字)SIMD 欄位
Z 可選。如果字元 Z 放入指令助記符:
在累加之前“目標”將置零
condition 可選。16 個條件之一。請參閱條件執行
dest 目標,“英特爾(R) 無線 MMX™”技術數據暫存器
op1 第一個源運算元,“英特爾(R) 無線 MMX™”技術數據暫存器
op2 第二個源運算元,“英特爾(R) 無線 MMX™”技術數據暫存器
 

說明

確定 op1 與 op2 相應向量的絕對差值,然後將它們累加在一起。隨後將此累加結果加到目標暫存器 dest 中任何現有的值上。
執行加法之前,可以選擇將目標暫存器 dest 置零。
此操作可以在 8 位或 16 位無符號數據向量上執行。

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

備註

僅限將結果累加到 32 位,dest 最高的字總設定為 0。

編碼

31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Cond
1110
0h0z
op1
dest
0001
001
0
op2
 

子欄位編碼

限定符
欄位
B
h
0
H
h
1
Z
z
1
無 Z
z
0

影響的 SIMD 標誌

不影響 SIMD PSR 標誌 (wCASF) 或“飽和”標誌 (wCSSF)。

操作

wRd[word 1] = 0;

if (B specified) then

dest[word 0] = (Z Specified) ?0: dest[word 0]

+ abs(op1[byte 7] - op2[byte 7])

+ abs(op1[byte 6] - op2[byte 6])

+ abs(op1[byte 5] - op2[byte 5])

+ abs(op1[byte 4] - op2[byte 4])

+ abs(op1[byte 3] - op2[byte 3])

+ abs(op1[byte 2] - op2[byte 2])

+ abs(op1[byte 1] - op2[byte 1])

+ abs(op1[byte 0] - op2[byte 0])

else if (H specified) then

dest[word 0] = Z Specified) ?0: dest[word 0]

+ abs(op1[half 3] - op2[half 3])

+ abs(op1[half 2] - op2[half 2])

+ abs(op1[half 1] - op2[half 1])

+ abs(op1[half 0] - op2[half 0])

更多資訊

WACC
WADD

WAVG2
WMAX

WMIN

WMOV

WSUB

WZERO