Format |
Syntax: |
Operation: |
Operands: |
Architecture revision |
Opcode | ||||||||||||||||
1 |
macsathh.w Rd, Rx:<part>, Ry:<part> |
If (Rx-part == t) then operand1 = SE(Rx[31:16]) else operand1 = SE(Rx[15:0]); If (Ry-part == t) then operand2 = SE(Ry[31:16]) else operand2 = SE(Ry[15:0]); If (operand1 == operand2 == 0x8000) product = 0x7FFF_FFFF; else product = (operand1 × operand2) << 1; Rd = Sat(product + Rd); |
{d, x, y} ∈ {0, 1, …, 15} part ∈ {t,b} |
Rev1+ |
|
Multiplies the two halfword registers specified, shifts the results one position to the left and stores the result as a temporary word-sized product. If the two operands equals -1, the product is saturated to the largest positive 32-bit fractional number. The halfword registers are selected as either the high or low part of the operand registers. The temporary product is added with sat- uration to Rd.
Q: |
Set if saturation occurred, or if the accumulation overflows, or previously set. |
V: |
Not affected. |
N: |
Not affected. |
Z: |
Not affected. |
C: |
Not affected. |
macsathh.wR10, R2:t, R3:b will perform R10 = Sat (Sat(( SE(R2[31:16]) × SE(R3[15:0]) ) << 1) + R10)