|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADDS_A.df |
Vector Saturated Add of Absolute Values | |
ADDS_A.B wd,ws,wt |
MSA |
Vector Saturated Add of Absolute Values |
ADDS_A.H wd,ws,wt |
MSA |
Vector Saturated Add of Absolute Values |
ADDS_A.W wd,ws,wt |
MSA |
Vector Saturated Add of Absolute Values |
ADDS_A.D wd,ws,wt |
MSA |
Vector Saturated Add of Absolute Values |
Vector Saturated Add of Absolute Values
Vector saturated addition to vector of absolute values.
wd[i] = saturate_signed(absolute_value(ws[i]) + absolute_value(wt[i]))
The absolute values of the elements in v ector wt are added to the absolute values of the elements in v ector ws. The saturated signed result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADDS_A.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = adds_a(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
ADDS_A.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = adds_a(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
ADDS_A.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = adds_a(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
ADDS_A.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = adds_a(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function abs(tt, n)
if ttn-1 = 1 then
return -ttn-1...0
else
return ttn-1..0
endif
endfunction abs
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function adds_a(ts, tt, n)
t = (0 || abs(ts, n)) + (0 || abs(tt, n))
return sat_s(t, n+1, n)
endfunction adds_a
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADDS_S.df |
Vector Signed Saturated Add of Signed Values | |
ADDS_S.B wd,ws,wt |
MSA |
Vector Signed Saturated Add of Signed Values |
ADDS_S.H wd,ws,wt |
MSA |
Vector Signed Saturated Add of Signed Values |
ADDS_S.W wd,ws,wt |
MSA |
Vector Signed Saturated Add of Signed Values |
ADDS_S.D wd,ws,wt |
MSA |
Vector Signed Saturated Add of Signed Values |
Vector Signed Saturated Add of Signed Values
Vector addition to vector saturating the result as signed value.
wd[i] = saturate_signed(signed(ws[i]) + signed(wt[i]))
The elements in v ector wt are added to the ele ments in vector ws. Signed arithmetic is performed and overflows clamp to the largest and/or smallest representable signed values before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADDS_S.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = adds_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
ADDS_S.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = adds_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
ADDS_S.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = adds_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
ADDS_S.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = adds_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function adds_s(ts, tt, n)
t = (tsn-1 || ts) + (ttn-1 || tt)
return sat_s(t, n+1, n)
endfunction adds_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADDS_U.df |
Vector Unsigned Saturated Add of Unsigned Values | |
ADDS_U.B wd,ws,wt |
MSA |
Vector Unsigned Saturated Add of Unsigned Values |
ADDS_U.H wd,ws,wt |
MSA |
Vector Unsigned Saturated Add of Unsigned Values |
ADDS_U.W wd,ws,wt |
MSA |
Vector Unsigned Saturated Add of Unsigned Values |
ADDS_U.D wd,ws,wt |
MSA |
Vector Unsigned Saturated Add of Unsigned Values |
Vector Unsigned Saturated Add of Unsigned Values
Vector addition to vector saturating the result as unsigned value.
wd[i] = saturate_unsigned(unsigned(ws[i]) + unsigned(wt[i]))
The elements in v ector wt are added to the elements in vector ws. Unsigned arithmetic is performed and overflows clamp to the largest representable unsigned value before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADDS_U.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = adds_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
ADDS_U.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = adds_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
ADDS_U.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = adds_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
ADDS_U.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = adds_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_u(tt, n, b)
if ttn-1..b != 0n-b then
return 0n-b || 1b
else
return tt
endif
endfunction sat_u
function adds_u(ts, tt, n)
t = (0 || ts) + (0 || tt)
return sat_u(t, n+1, n)
endfunction adds_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADDV.df |
Vector Add | |
ADDV.B wd,ws,wt |
MSA |
Vector Add |
ADDV.H wd,ws,wt |
MSA |
Vector Add |
ADDV.W wd,ws,wt |
MSA |
Vector Add |
ADDV.D wd,ws,wt |
MSA |
Vector Add |
Vector Add
Vector addition to vector.
wd[i] = ws[i] + wt[i]
The elements in vector wt are added to the elements in vector ws. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADDV.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i + WR[wt]8i+7..8i
endfor
ADDV.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i + WR[wt]16i+15..16i
endfor
ADDV.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i + WR[wt]32i+31..32i
endfor
ADDV.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i + WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
u5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADDVI.df |
Immediate Add | |
ADDVI.B wd,ws,u5 |
MSA |
Immediate Add |
ADDVI.H wd,ws,u5 |
MSA |
Immediate Add |
ADDVI.W wd,ws,u5 |
MSA |
Immediate Add |
ADDVI.D wd,ws,u5 |
MSA |
Immediate Add |
Immediate Add
Immediate addition to vector.
wd[i] = ws[i] + u5
The 5-bit immediate unsigned value u5 is added to the elements in vector ws. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADDVI.B:
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i + t
endfor
ADDVI.H:
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i + t
endfor
ADDVI.W:
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i + t
endfor
ADDVI.D:
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i + t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ADD_A.df |
Vector Add Absolute Values | |
ADD_A.B wd,ws,wt |
MSA |
Vector Add Absolute Values |
ADD_A.H wd,ws,wt |
MSA |
Vector Add Absolute Values |
ADD_A.W wd,ws,wt |
MSA |
Vector Add Absolute Values |
ADD_A.D wd,ws,wt |
MSA |
Vector Add Absolute Values |
Vector Add Absolute Values
Vector addition to vector using the absolute values.
wd[i] = absolute_value(ws[i]) + absolute_value(wt[i])
The absolute values of the elements in v ector wt are added to the absolute values of the elements in v ector ws. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ADD_A.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = abs(WR[ws]8i+7..8i, 8) + abs(WR[wt]8i+7..8i, 8)
endfor
ADD_A.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = abs(WR[ws]16i+15..16i, 16) + abs(WR[wt]16i+15..16i, 16)
endfor
ADD_A.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = abs(WR[ws]32i+31..32i, 32) + abs(WR[wt]32i+31..32i, 32)
endfor
ADD_A.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = abs(WR[ws]64i+63..64i, 64) + abs(WR[wt]64i+63..64i, 64)
endfor
function abs(tt, n)
if ttn-1 = 1 then
return -ttn-1...0
else
return ttn-1..0
endif
endfunction abs
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00000 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
AND.V |
Vector Logical And | |
AND.V wd,ws,wt |
MSA |
Vector Logical And |
Vector Logical And
Vector by vector logical and.
wd = ws AND wt
Each bit of vector ws is combined with the corresponding bit of vector wt in a bitwise logical AND operation. The result is written to vector wd.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = WR[ws] and WR[wt]
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00 |
i8 |
ws |
wd |
I8 000000 |
|
6 |
2 |
8 |
5 |
5 |
6 |
ANDI.B |
Immediate Logical And | |
ANDI.B wd,ws,i8 |
MSA |
Immediate Logical And |
Immediate Logical And
Immediate by vector logical and.
wd[i] = ws[i] AND i8
Each byte element of vector ws is combined with the 8-bit immediate i8 in a bitwise logical AND operation. The result is written to vector wd.
The operands and results are values in integer byte data format.
No data-dependent exceptions are possible.
for i in 0 .. WRLEN/8-1 WR[wd]8i+7..8i = WR[ws]8i+7..8i and i87..0 endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ASUB_S.df |
Vector Absolute Values of Signed Subtract | |
ASUB_S.B wd,ws,wt |
MSA |
Vector Absolute Values of Signed Subtract |
ASUB_S.H wd,ws,wt |
MSA |
Vector Absolute Values of Signed Subtract |
ASUB_S.W wd,ws,wt |
MSA |
Vector Absolute Values of Signed Subtract |
ASUB_S.D wd,ws,wt |
MSA |
Vector Absolute Values of Signed Subtract |
Vector Absolute Values of Signed Subtract
Vector subtraction from vector of signed values taking the absolute value of the results.
wd[i] = absolute_value(signed(ws[i]) - signed(wt[i]))
The signed elements in v ector wt are subtracted from the signed elements in v ector ws. The absolute value of the signed result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ASUB_S.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = asub_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
ASUB_S.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = asub_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
ASUB_S.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = asub_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
ASUB_S.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = asub_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function asub_s(ts, tt, n)
t = (tsn-1 || ts) - (ttn-1 || tt)
if tn = 0 then
return tn-1..0
else
return (-t)n-1..0
endfunction asub_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ASUB_U.df |
Vector Absolute Values of Unsigned Subtract | |
ASUB_U.B wd,ws,wt |
MSA |
Vector Absolute Values of Unsigned Subtract |
ASUB_U.H wd,ws,wt |
MSA |
Vector Absolute Values of Unsigned Subtract |
ASUB_U.W wd,ws,wt |
MSA |
Vector Absolute Values of Unsigned Subtract |
ASUB_U.D wd,ws,wt |
MSA |
Vector Absolute Values of Unsigned Subtract |
Vector Absolute Values of Unsigned Subtract
Vector subtraction from vector of unsigned values taking the absolute value of the results.
wd[i] = absolute_value(unsigned(ws[i]) - unsigned(wt[i]))
The unsigned elements in vector wt are subtracted from the unsigned elements in vector ws. The absolute value of the signed result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ASUB_U.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = asub_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
ASUB_U.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = asub_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
ASUB_U.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = asub_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
ASUB_U.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = asub_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function asub_u(ts, tt, n)
t = (0 || ts) - (0 || tt)
if tn = 0 then
return tn-1..0
else
return (-t)n-1..0
endfunction asub_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
AVER_S.df |
Vector Signed Average Rounded | |
AVER_S.B wd,ws,wt |
MSA |
Vector Signed Average Rounded |
AVER_S.H wd,ws,wt |
MSA |
Vector Signed Average Rounded |
AVER_S.W wd,ws,wt |
MSA |
Vector Signed Average Rounded |
AVER_S.D wd,ws,wt |
MSA |
Vector Signed Average Rounded |
Vector Signed Average Rounded
Vector average rounded using the signed values.
wd[i] = (ws[i] + wt[i] + 1) / 2
The elements in vector wt are added to the elements in vector ws. The addition of the elements plus 1 (for rounding) is done signed with full precision, i.e. the result has one extra bit. Signed division by 2 (or arithmetic shift right by one bit) is performed before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
AVER_S.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = aver_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
AVER_S.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = aver_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
AVER_S.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = aver_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
AVER_S.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = aver_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function ave_s(ts, tt, n)
t = (tsn-1 || ts) + (ttn-1 || tt) + 1
return tn..1
endfunction aver_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
AVER_U.df |
Vector Unsigned Average Rounded | |
AVER_U.B wd,ws,wt |
MSA |
Vector Unsigned Average Rounded |
AVER_U.H wd,ws,wt |
MSA |
Vector Unsigned Average Rounded |
AVER_U.W wd,ws,wt |
MSA |
Vector Unsigned Average Rounded |
AVER_U.D wd,ws,wt |
MSA |
Vector Unsigned Average Rounded |
Vector Unsigned Average Rounded
Vector average rounded using the unsigned values.
wd[i] = (ws[i] + wt[i] + 1) / 2
The elements in vector wt are added to the elements in vector ws. The addition of the elements plus 1 (for rounding) is done unsigned with full precision, i.e. the result has one extra bit. Unsigned division by 2 (or logical shift right by one bit) is performed before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
AVER_U.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = aver_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
AVER_U.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = aver_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
AVER_U.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = aver_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
AVER_U.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = aver_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function ave_u(ts, tt, n)
t = (0 || ts) + (0 || tt) + 1
return tn..1
endfunction aver_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
AVE_S.df |
Vector Signed Average | |
AVE_S.B wd,ws,wt |
MSA |
Vector Signed Average |
AVE_S.H wd,ws,wt |
MSA |
Vector Signed Average |
AVE_S.W wd,ws,wt |
MSA |
Vector Signed Average |
AVE_S.D wd,ws,wt |
MSA |
Vector Signed Average |
Vector Signed Average
Vector average using the signed values.
wd[i] = (ws[i] + wt[i]) / 2
The elements in vector wt are added to the elements in vector ws. The addition is done signed with full precision, i.e. the result has one extra bit. Signed division by 2 (or arithmetic shift right by one bit) is performed before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
AVE_S.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = ave_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
AVE_S.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = ave_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
AVE_S.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = ave_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
AVE_S.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = ave_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function ave_s(ts, tt, n)
t = (tsn-1 || ts) + (ttn-1 || tt)
return tn..1
endfunction ave_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010000 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
AVE_U.df |
Vector Unsigned Average | |
AVE_U.B wd,ws,wt |
MSA |
Vector Unsigned Average |
AVE_U.H wd,ws,wt |
MSA |
Vector Unsigned Average |
AVE_U.W wd,ws,wt |
MSA |
Vector Unsigned Average |
AVE_U.D wd,ws,wt |
MSA |
Vector Unsigned Average |
Vector Unsigned Average
Vector average using the unsigned values.
wd[i] = (ws[i] + wt[i]) / 2
The elements in vector wt are added to the elements in vector ws. The addition is done unsigned with full precision, i.e. the result has one extra bit. Unsigned division by 2 (or logical shift right by one bit) is performed before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
AVE_U.B:
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = ave_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
AVE_U.H:
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = ave_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
AVE_U.W:
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = ave_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
AVE_U.D:
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = ave_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function ave_u(ts, tt, n)
t = (0 || ts) + (0 || tt)
return tn..1
endfunction ave_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
BCLR.df |
Vector Bit Clear | |
BCLR.B wd,ws,wt |
MSA |
Vector Bit Clear |
BCLR.H wd,ws,wt |
MSA |
Vector Bit Clear |
BCLR.W wd,ws,wt |
MSA |
Vector Bit Clear |
BCLR.D wd,ws,wt |
MSA |
Vector Bit Clear |
Vector Bit Clear
Vector selected bit position clear in each element.
wd[i] = bit_clear(ws[i], wt[i])
Clear (set to 0) one bit in each element of vector ws. The bit position is given by the elements in wt modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BCLR.B:
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[ws]8i+7..8i and (17-t || 0 || 1t)
endfor
BCLR.:
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[ws]16i+15..16i and (115-t || 0 || 1t)
endfor
BCLR.W:
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[ws]32i+31..32i and (131-t || 0 || 1t)
endfor
BCLR.D:
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[ws]64i+63..64i and (163-t || 0 || 1t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
BCLRI.df |
Immediate Bit Clear | |
BCLRI.B wd,ws,m |
MSA |
Immediate Bit Clear |
BCLRI.H wd,ws,m |
MSA |
Immediate Bit Clear |
BCLRI.W wd,ws,m |
MSA |
Immediate Bit Clear |
BCLRI.D wd,ws,m |
MSA |
Immediate Bit Clear |
Immediate Bit Clear
Immediate selected bit position clear in each element.
wd[i] = bit_clear(ws[i], m)
Clear (set to 0) one bit in each element of vector ws. The bit position is given by the immediate m modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BCLRI.B:
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i and (17-t || 0 || 1t)
endfor
BCLRI.H:
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i and (115-t || 0 || 1t)
endfor
BCLRI.W:
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i and (131-t || 0 || 1t)
endfor
BCLRI.D:
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i and (163-t || 0 || 1t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
BINSL.df |
Vector Bit Insert Left | |
BINSL.B wd,ws,wt |
MSA |
Vector Bit Insert Left |
BINSL.H wd,ws,wt |
MSA |
Vector Bit Insert Left |
BINSL.W wd,ws,wt |
MSA |
Vector Bit Insert Left |
BINSL.D wd,ws,wt |
MSA |
Vector Bit Insert Left |
Vector Bit Insert Left
Vector selected left most bits copy while preserving destination right bits.
wd[i] = bit_insert_left(wd[i], ws[i], wt[i])
Copy most significant (left) bits in each element of vector ws to elements in vector wd while preserving the least significant (right) bits. The number of bits to copy is given by the elements in vector wt modulo the size of the element in bits plus 1.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BINSL.B:
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[ws]8i+7..8i+7-t || WR[wd]8i+7-t-1..8i
endfor
BINSL.H:
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[ws]16i+15..16i+15-t || WR[wd]16i+15-t-1..16i
endfor
BINSL.W:
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[ws]32i+31..32i+31-t || WR[wd]32i+31-t-1..32i
endfor
BINSL.D:
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[ws]64i+63..64i+63-t || WR[wd]64i+63-t-1..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
BINSLI.df |
Immediate Bit Insert Left | |
BINSLI.B wd,ws,m |
MSA |
Immediate Bit Insert Left |
BINSLI.H wd,ws,m |
MSA |
Immediate Bit Insert Left |
BINSLI.W wd,ws,m |
MSA |
Immediate Bit Insert Left |
BINSLI.D wd,ws,m |
MSA |
Immediate Bit Insert Left |
Immediate Bit Insert Left
Immediate selected left most bits copy while preserving destination right bits.
wd[i] = bit_insert_left(wd[i], ws[i], m)
Copy most significant (left) bits in each element of vector ws to elements in vector wd while preserving the least significant (right) bits. The number of bits to copy is given by the immediate m modulo the size of the element in bits plus 1.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BINSLI.B:
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i+7-t || WR[wd]8i+7-t-1..8i
endfor
BINSLI.H:
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i+15-t || WR[wd]16i+15-t-1..16i
endfor
BINSLI.W:
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i+31-t || WR[wd]32i+31-t-1..32i
endfor
BINSLI.D:
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i+63-t || WR[wd]64i+63-t-1..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
BINSR.df |
Vector Bit Insert Right | |
BINSR.B wd,ws,wt |
MSA |
Vector Bit Insert Right |
BINSR.H wd,ws,wt |
MSA |
Vector Bit Insert Right |
BINSR.W wd,ws,wt |
MSA |
Vector Bit Insert Right |
BINSR.D wd,ws,wt |
MSA |
Vector Bit Insert Right |
Vector Bit Insert Right
Vector selected right most bits copy while preserving destination left bits.
wd[i] = bit_insert_right(wd[i], ws[i], wt[i])
Copy least significant (right) bits in each element of vector ws to elements in vector wd while preserving the most significant (left) bits. The number of bits to copy is given by the elements in vector wt modulo the size of the element in bits plus 1.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BINSR.B:
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[wd]8i+7..8i+t+1 || WR[ws]8i+t..8i
endfor
BINSR.H:
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[wd]16i+15..16i+t+1 || WR[ws]16i+t..16i
endfor
BINSR.W:
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[wd]32i+31..32i+t+1 || WR[ws]32i+t..32i
endfor
BINSR.D:
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[wd]64i+63..64i+t+1 || WR[ws]64i+t..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
BINSRI.df |
Immediate Bit Insert Right | |
BINSRI.B wd,ws,m |
MSA |
Immediate Bit Insert Right |
BINSRI.H wd,ws,m |
MSA |
Immediate Bit Insert Right |
BINSRI.W wd,ws,m |
MSA |
Immediate Bit Insert Right |
BINSRI.D wd,ws,m |
MSA |
Immediate Bit Insert Right |
Immediate Bit Insert Right
Immediate selected right most bits copy while preserving destination left bits.
wd[i] = bit_insert_right(wd[i], ws[i], m)
Copy least significant (right) bits in each element of vector ws to elements in vector wd while preserving the most significant (left) bits. The number of bits to copy is given by the immediate m modulo the size of the element in bits plus
1.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BINSRI.B:
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[wd]8i+7..8i+7+t+1 || WR[ws]8i+t..8i
endfor
BINSRI.H:
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[wd]16i+15..16i+t+1 || WR[ws]16i+t..16i
endfor
BINSRI.W:
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[wd]32i+31..32i+t+1 || WR[ws]32i+t..32i
endfor
BINSRI.D:
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[wd]64i+63..64i+t+1 || WR[ws]64i+t..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00100 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
BMNZ.V |
Vector Bit Move If Not Zero | |
BMNZ.V wd,ws,wt |
MSA |
Vector Bit Move If Not Zero |
Vector Bit Move If Not Zero
Vector mask-based copy bits on the condition mask being set.
wd = (ws AND wt) OR (wd AND NOT wt)
Copy to destination vector wd all bits from source v ector ws for which the corresponding bits from target vector wt are 1 and leaves unchanged all destination bits for which the corresponding target bits are 0.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = (WR[ws] and WR[wt]) or (WR[wd] and not WR[wt])
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00 |
i8 |
ws |
wd |
I8 000001 |
|
6 |
2 |
8 |
5 |
5 |
6 |
BMNZI.B |
Immediate Bit Move If Not Zero | |
BMNZI.B wd,ws,i8 |
MSA |
Immediate Bit Move If Not Zero |
Immediate Bit Move If Not Zero
Immediate mask-based copy bits on the condition mask being set.
wd[i] = (ws[i] AND i8) OR (wd[i] AND NOT i8)
Copy to destination vector wd all bits from source vector ws for which the corresponding bits from immediate i8 are 1 and leaves unchanged all destination bits for which the corresponding immediate bits are 0.
The operands and results are vector values in integer byte data format.
No data-dependent exceptions are possible.
WR[wd] = (WR[ws]8i+7..8i and i87..0) or (WR[wd]8i+7..8i and not i87..0)
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00101 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
BMZ.V |
Vector Bit Move If Zero | |
BMZ.V wd,ws,wt |
MSA |
Vector Bit Move If Zero |
Vector Bit Move If Zero
Vector mask-based copy bits on the condition mask being clear.
wd = (ws AND NOT wt) OR (wd AND wt)
Copy to destination vector wd all bits from source v ector ws for which the corresponding bits from target vector wt are 0 and leaves unchanged all destination bits for which the corresponding target bits are 1.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = (WR[ws] and not WR[wt]) or (WR[wd] and WR[wt])
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
01 |
i8 |
ws |
wd |
I8 000001 |
|
6 |
2 |
8 |
5 |
5 |
6 |
BMZI.B |
Immediate Bit Move If Zero | |
BMZI.B wd,ws,i8 |
MSA |
Immediate Bit Move If Zero |
Immediate Bit Move If Zero
Immediate mask-based copy bits on the condition mask being clear.
wd[i] = (ws[i] AND NOT i8) OR (wd[i] AND i8)
Copy to destination vector wd all bits from source vector ws for which the corresponding bits from immediate i8 are 0 and leaves unchanged all destination bits for which the corresponding immediate bits are 1.
The operands and results are vector values in integer byte data format.
No data-dependent exceptions are possible.
WR[wd] = (WR[ws] and not i87..0) or (WR[wd] and i87..0)
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
BNEG.df |
Vector Bit Negate | |
BNEG.B wd,ws,wt |
MSA |
Vector Bit Negate |
BNEG.H wd,ws,wt |
MSA |
Vector Bit Negate |
BNEG.W wd,ws,wt |
MSA |
Vector Bit Negate |
BNEG.D wd,ws,wt |
MSA |
Vector Bit Negate |
Vector Bit Negate
Vector selected bit position negate in each element.
wd[i] = bit_negate(ws[i], wt[i])
Negate (complement) one bit in each element of vector ws. The bit position is given by the elements in wt modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BNEG.B:
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[ws]8i+7..8i xor (07-t || 1 || 0t)
endfor
BNEG.H:
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[ws]16i+15..16i xor (015-t || 1 || 0t)
endfor
BNEG.W:
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[ws]32i+31..32i xor (031-t || 1 || 0t)
endfor
BNEG.D:
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[ws]64i+63..64i xor (063-t || 1 || 0t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
BNEGI.df |
Immediate Bit Negate | |
BNEGI.B wd,ws,m |
MSA |
Immediate Bit Negate |
BNEGI.H wd,ws,m |
MSA |
Immediate Bit Negate |
BNEGI.W wd,ws,m |
MSA |
Immediate Bit Negate |
BNEGI.D wd,ws,m |
MSA |
Immediate Bit Negate |
Immediate Bit Negate
Immediate selected bit position negate in each element.
wd[i] = bit_negate(ws[i], m)
Negate (complement) one bit in each element of vector ws. The bit position is given by the immediate m modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BNEGI.B:
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i xor (07-t || 1 || 0t)
endfor
BNEGI.H:
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i xor (015-t || 1 || 0t)
endfor
BNEGI.W:
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i xor (031-t || 1 || 0t)
endfor
BNEGI.D:
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i xor (063-t || 1 || 0t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
COP1 010001 |
111 |
df |
wt |
s16 |
|
6 |
3 |
2 |
5 |
16 |
BNZ.df |
Immediate Branch If All Elements Are Not Zero | |
BNZ.B wt,s16 |
MSA |
Immediate Branch If All Elements Are Not Zero |
BNZ.H wt,s16 |
MSA |
Immediate Branch If All Elements Are Not Zero |
BNZ.W wt,s16 |
MSA |
Immediate Branch If All Elements Are Not Zero |
BNZ.D wt,s16 |
MSA |
Immediate Branch If All Elements Are Not Zero |
Immediate Branch If All Elements Are Not Zero
Immediate PC offset branch if all destination elements are not zero.
if wt[i] != 0 for all i then branch PC-relative s16
PC-relative branch if all elements in wt are not zero. The branch instruction has a delay slot. s16 is a PC word offset, i.e. signed count of 32-bit instructions, from the PC of the delay slot.
Processor operation is UNPREDICTABLE if a branch is placed in the delay slot of a branch or jump.
BNZ.B:
branch(WR[wt]8i+7..8i != 0 for all i, s16)
BNZ.H:
branch(WR[wt]16i+15..16i != 0 for all i, s16)
BNZ.W:
branch(WR[wt]32i+31..32i != 0 for all i, s16)
BNZ.D:
branch(WR[wt]64i+63..64i != 0 for all i, s16)
function branch(cond, offset)
if cond then
I: target_offset = (offset9)GPRLEN-12 || offset9..0 || 0^^2
I+1: PC = PC + target_offset
endif
endfunction branch
Reserved Instruction Exception, MSA Disabled Exception.
|
COP1 010001 |
01111 |
wt |
s16 |
|
6 |
5 |
5 |
16 |
BNZ.V |
Immediate Branch If Not Zero (At Least One Element of Any Format Is Not Zero) | |
BNZ.V wt,s16 |
MSA |
Immediate Branch If Not Zero (At Least One Element of Any Format Is Not Zero) |
Immediate Branch If Not Zero (At Least One Element of Any Format Is Not Zero)
Immediate PC offset branch if destination vector is not zero.
if wt != 0 then branch PC-relative s16
PC-relative branch if at least one bit in wt is not zero, i.e at least one element is not zero regardless of the data format. The branch instruction has a delay slot. s16 is a PC word offset, i.e. signed count of 32-bit instructions, from the PC of the delay slot.
Processor operation is UNPREDICTABLE if a branch is placed in the delay slot of a branch or jump.
branch(WR[wt] != 0, s16)
function branch(cond, offset)
if cond then
I: target_offset = (offset9)GPRLEN-12 || offset9..0 || 0^^2
I+1: PC = PC + target_offset
endif
endfunction branch
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00110 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
BSEL.V |
Vector Bit Select | |
BSEL.V wd,ws,wt |
MSA |
Vector Bit Select |
Vector Bit Select
Vector mask-based copy bits from two source vectors selected by the bit mask value
wd = (ws AND NOT wd) OR (wt AND wd)
Selectively copy bits from the source v ectors ws and wt into destination vector wd based on the corresponding bit in wd: if 0 copies the bit from ws, if 1 copies the bit from wt.
The operands and results are bit vector values.
WR[wd] = (WR[ws] and not WR[wd]) or (WR[wt] and WR[wd])
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
10 |
i8 |
ws |
wd |
I8 000001 |
|
6 |
2 |
8 |
5 |
5 |
6 |
BSELI.B |
Immediate Bit Select | |
BSELI.B wd,ws,i8 |
MSA |
Immediate Bit Select |
Immediate Bit Select
Immediate mask-based copy bits from two source vectors selected by the bit mask value
wd = (ws AND NOT wd) OR (i8 AND wd)
Selectively copy bits from the the 8-bit immediate i8 and source v ector ws into destination vector wd based on the corresponding bit in wd: if 0 copies the bit from ws, if 1 copies the bit from i8.
The operands and results are bit vector values.
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i =
(WR[ws]8i+7..8i and not WR[wd]8i+7..8i) or (i87..0 and WR[wd]8i+7..8i)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
BSET.df |
Vector Bit Set | |
BSET.B wd,ws,wt |
MSA |
Vector Bit Set |
BSET.H wd,ws,wt |
MSA |
Vector Bit Set |
BSET.W wd,ws,wt |
MSA |
Vector Bit Set |
BSET.D wd,ws,wt |
MSA |
Vector Bit Set |
Vector Bit Set
Vector selected bit position set in each element.
wd[i] = bit_set(ws[i], wt[i])
Set to 1 one bit in each element of v ector ws. The bit position is given by the elements in wt modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BSET_S.B:
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[ws]8i+7..8i or (07-t || 1 || 0t)
endfor
BSET_S.H:
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[ws]16i+15..16i or (015-t || 1 || 0t)
endfor
BSET_S.W:
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[ws]32i+31..32i or (031-t || 1 || 0t)
endfor
BSET_S.D:
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[ws]64i+63..64i or (063-t || 1 || 0t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
BSETI.df |
Immediate Bit Set | |
BSETI.B wd,ws,m |
MSA |
Immediate Bit Set |
BSETI.H wd,ws,m |
MSA |
Immediate Bit Set |
BSETI.W wd,ws,m |
MSA |
Immediate Bit Set |
BSETI.D wd,ws,m |
MSA |
Immediate Bit Set |
Immediate Bit Set
Immediate selected bit position set in each element.
wd[i] = bit_set(ws[i], m)
Set to 1 one bit in each element of vector ws. The bit position is given by the immediate m. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
BSETI_S.B:
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i or (07-t || 1 || 0t)
endfor
BSETI_S.H:
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i or (015-t || 1 || 0t)
endfor
BSETI_S.W:
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i or (031-t || 1 || 0t)
endfor
BSETI_S.D:
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i or (063-t || 1 || 0t)
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
COP1 010001 |
110 |
df |
wt |
s16 |
|
6 |
3 |
2 |
5 |
16 |
BZ.df |
Immediate Branch If At Least One Element Is Zero | |
BZ.B wt,s16 |
MSA |
Immediate Branch If At Least One Element Is Zero |
BZ.H wt,s16 |
MSA |
Immediate Branch If At Least One Element Is Zero |
BZ.W wt,s16 |
MSA |
Immediate Branch If At Least One Element Is Zero |
BZ.D wt,s16 |
MSA |
Immediate Branch If At Least One Element Is Zero |
Immediate Branch If At Least One Element Is Zero
Immediate PC offset branch if at least one destination element is zero.
if wt[i] = 0 for some i then branch PC-relative s16
PC-relative branch if at least one element in wt is zero. The branch instruction has a delay slot. s16 is a PC word offset, i.e. signed count of 32-bit instructions, from the PC of the delay slot.
Processor operation is UNPREDICTABLE if a branch is placed in the delay slot of a branch or jump.
BZ.B:
for i in 0 .. WRLEN/8-1
branch(WR[wt]8i+7..8i = 0, s16)
endfor
BZ.H:
for i in 0 .. WRLEN/16-1
branch(WR[wt]16i+15..16i = 0, s16)
endfor
BZ.W:
for i in 0 .. WRLEN/32-1
branch(WR[wt]32i+31..32i = 0, s16)
endfor
BZ.D:
for i in 0 .. WRLEN/64-1
branch(WR[wt]64i+63..64i = 0, s16)
endfor
function branch(cond, offset)
if cond then
I: target_offset = (offset9)GPRLEN-12 || offset9..0 || 0^^2
I+1: PC = PC + target_offset
endif
endfunction branch
Reserved Instruction Exception, MSA Disabled Exception.
|
COP1 010001 |
01011 |
wt |
s16 |
|
6 |
5 |
5 |
16 |
BZ.V |
Immediate Branch If Zero (All Elements of Any Format Are Zero) | |
BZ.V wt,s16 |
MSA |
Immediate Branch If Zero (All Elements of Any Format Are Zero) |
Immediate Branch If Zero (All Elements of Any Format Are Zero)
Immediate PC offset branch if destination vector is zero.
if wt = 0 then branch PC-relative s16
PC-relative branch if all wt bits are zero, i.e. all elements are zero regardless of the data format. The branch instruction has a delay slot. s16 is a PC word offset, i.e. signed count of 32-bit instructions, from the PC of the delay slot.
Processor operation is UNPREDICTABLE if a branch is placed in the delay slot of a branch or jump.
branch(WR[wt] = 0, s16)
function branch(cond, offset)
if cond then
I: target_offset = (offset9)GPRLEN-12 || offset9..0 || 0^^2
I+1: PC = PC + target_offset
endif
endfunction branch
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 001111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CEQ.df |
Vector Compare Equal | |
CEQ.B wd,ws,wt |
MSA |
Vector Compare Equal |
CEQ.H wd,ws,wt |
MSA |
Vector Compare Equal |
CEQ.W wd,ws,wt |
MSA |
Vector Compare Equal |
CEQ.D wd,ws,wt |
MSA |
Vector Compare Equal |
Vector Compare Equal
Vector to vector compare for equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] = wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt elements are equal, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CEQ.B:
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i = WR[wt]8i+7..8i
WR[wd]8i+7..8i = c8
endfor
CEQ.H:
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i = WR[wt]16i+15..16i
WR[wd]16i+15..16i = c16
endfor
CEQ.W:
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i = WR[wt]32i+31..32i
WR[wd]32i+31..32i = c32
endfor
CEQ.D:
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i = WR[wt]64i+63..64i
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
s5 |
ws |
wd |
I5 000111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CEQI.df |
Immediate Compare Equal | |
CEQI.B wd,ws,s5 |
MSA |
Immediate Compare Equal |
CEQI.H wd,ws,s5 |
MSA |
Immediate Compare Equal |
CEQI.W wd,ws,s5 |
MSA |
Immediate Compare Equal |
CEQI.D wd,ws,s5 |
MSA |
Immediate Compare Equal |
Immediate Compare Equal
Immediate to vector compare for equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] = s5)
Set all bits to 1 in wd elements if the corresponding ws element and the 5-bit signed immediate s5 are equal, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CEQI.B:
t = (s54)3 || s54..0
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i = t
WR[wd]8i+7..8i = c8
endfor
CEQI.H:
t = (s54)11 || s54..0
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i = t
WR[wd]16i+15..16i = c16
endfor
CEQI.W:
t = (s54)27 || s54..0
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i = t
WR[wd]32i+31..32i = c32
endfor
CEQI.D:
t = (s54)59 || s54..0
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i = t
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0001111110 |
cs |
rd |
ELM 011001 |
|
6 |
10 |
5 |
5 |
6 |
CFCMSA |
GPR Copy from MSA Control Register | |
CFCMSA rd,cs |
MSA |
GPR Copy from MSA Control Register |
GPR Copy from MSA Control Register
GPR value copied from MSA control register.
rd = signed(cs)
The sign extended content of MSA control register cs is copied to GPR rd.
The read operation returns ZERO if cs specifies a reserved register or a register that does not exist.
if cs = 0 then
GPR[rd] = sign_extend(MSAIR, 64)
elseif cs = 1 then
GPR[rd] = sign_extend(MSACSR, 64)
elseif MSAIRWRP = 1 then
if cs = 2 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSAAccess, 64)
elseif cs = 3 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSASave, 64)
elseif cs = 4 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSAModify, 64)
elseif cs = 5 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSARequest, 64)
elseif cs = 6 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSAMap, 64)
elseif cs = 7 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
GPR[rd] = sign_extend(MSAUnmap, 64)
else
GPR[rd] = 0
endif
else
GPR[rd] = 0
endif
Reserved Instruction Exception, MSA Disabled Exception. Coprocessor 0 Unusable Exception.
|
MSA 011110 |
100 |
df |
s5 |
ws |
wd |
I5 000111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLEI_S.df |
Immediate Compare Signed Less Than or Equal | |
CLEI_S.B wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than or Equal |
CLEI_S.H wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than or Equal |
CLEI_S.W wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than or Equal |
CLEI_S.D wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than or Equal |
Immediate Compare Signed Less Than or Equal
Immediate to vector compare for signed less or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <= s5)
Set all bits to 1 in wd elements if the corresponding ws element is less than or equal to the 5-bit signed immediate s5, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLEI_S.B
t = (s54)3 || s54..0
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i <= t
WR[wd]8i+7..8i = c8
endfor
CLEI_S.H
t = (s54)11 || s54..0
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i <= t
WR[wd]16i+15..16i = c16
endfor
CLEI_S.W
t = (s54)27 || s54..0
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i <= t
WR[wd]32i+31..32i = c32
endfor
CLEI_S.D
t = (s54)59 || s5__4.. 0__
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i <= t
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
u5 |
ws |
wd |
I5 000111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLEI_U.df |
Immediate Compare Unsigned Less Than or Equal | |
CLEI_U.B wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than or Equal |
CLEI_U.H wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than or Equal |
CLEI_U.W wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than or Equal |
CLEI_U.D wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than or Equal |
Immediate Compare Unsigned Less Than or Equal
Immediate to vector compare for unsigned less or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <= u5)
Set all bits to 1 in wd elements if the corresponding ws element is unsigned less than or equal to the 5-bit unsigned immediate u5, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLEI_U.B
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
c = (0 || WR[ws]8i+7..8i) <= (0 || t)
WR[wd]8i+7..8i = c8
endfor
CLEI_U.H
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
c = (0 || WR[ws]16i+15..16i) <= (0 || t)
WR[wd]16i+15..16i = c16
endfor
CLEI_U.W
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i <= (0 || t)
WR[wd]32i+31..32i = c32
endfor
CLEI_U.D
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i <= (0 || t)
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 001111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLE_S.df |
Vector Compare Signed Less Than or Equal | |
CLE_S.B wd,ws,wt |
MSA |
Vector Compare Signed Less Than or Equal |
CLE_S.H wd,ws,wt |
MSA |
Vector Compare Signed Less Than or Equal |
CLE_S.W wd,ws,wt |
MSA |
Vector Compare Signed Less Than or Equal |
CLE_S.D wd,ws,wt |
MSA |
Vector Compare Signed Less Than or Equal |
Vector Compare Signed Less Than or Equal
Vector to vector compare for signed less or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <= wt[i])
Set all bits to 1 in wd elements if the corresponding ws elements are signed less than or equal to wt elements, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLE_S.B:
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i <= WR[wt]8i+7..8i
WR[wd]8i+7..8i = c8
endfor
CLE_S.H:
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i <= WR[wt]16i+15..16i
WR[wd]16i+15..16i = c16
endfor
CLE_S.W:
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i <= WR[wt]32i+31..32i
WR[wd]32i+31..32i = c32
endfor
CLE_S.D:
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i <= WR[wt]64i+63..64i
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 001111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLE_U.df |
Vector Compare Unsigned Less Than or Equal | |
CLE_U.B wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than or Equal |
CLE_U.H wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than or Equal |
CLE_U.W wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than or Equal |
CLE_U.D wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than or Equal |
Vector Compare Unsigned Less Than or Equal
Vector to vector compare for unsigned less or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <= wt[i])
Set all bits to 1 in wd elements if the corresponding ws elements are unsigned less than or equal to wt elements, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLE_U.B
for i in 0 .. WRLEN/8-1
c = (0 || WR[ws]8i+7..8i) <= (0 || WR[wt]8i+7..8i)
WR[wd]8i+7..8i = c8
endfor
CLE_U.H
for i in 0 .. WRLEN/16-1
c = (0 || WR[ws]16i+15..16i) <= (0 || WR[wt]16i+15..16i)
WR[wd]16i+15..16i = c16
endfor
CLE_U.W
for i in 0 .. WRLEN/32-1
c = (0 || WR[ws]__32i+31..32i_)_ <= (0 || WR[wt]32i+31..32i)
WR[wd]32i+31..32i = c32
endfor
CLE_U.D
for i in 0 .. WRLEN/64-1
c = (0 || WR[ws]64i+63..64i) <= (0 || WR[wt]64i+63..64i)
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
s5 |
ws |
wd |
I5 000111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLTI_S.df |
Immediate Compare Signed Less Than | |
CLTI_S.B wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than |
CLTI_S.H wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than |
CLTI_S.W wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than |
CLTI_S.D wd,ws,s5 |
MSA |
Immediate Compare Signed Less Than |
Immediate Compare Signed Less Than
Immediate to vector compare for signed less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] < s5)
Set all bits to 1 in wd elements if the corresponding ws element is less than the 5-bit signed immediate s5, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLTI_S.B
t = (s54)3 || s54..0
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i < t
WR[wd]8i+7..8i = c8
endfor
CLTI_S.H
t = (s54)11 || s54..0
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i < t
WR[wd]16i+15..16i = c16
endfor
CLTI_S.W
t = (s54)27 || s54..0
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i < t
WR[wd]32i+31..32i = c32
endfor
CLTI_S.D
t = (s54)59 || s5__4.. 0__
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i < t
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
u5 |
ws |
wd |
I5 000111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLTI_U.df |
Immediate Compare Unsigned Less Than | |
CLTI_U.B wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than |
CLTI_U.H wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than |
CLTI_U.W wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than |
CLTI_U.D wd,ws,u5 |
MSA |
Immediate Compare Unsigned Less Than |
Immediate Compare Unsigned Less Than
Immediate to vector compare for unsigned less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] < u5)
Set all bits to 1 in wd elements if the corresponding ws element is unsigned less than the 5-bit unsigned immediate u5, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLTI_U.B
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
c = (0 || WR[ws]8i+7..8i) < (0 || t)
WR[wd]8i+7..8i = c8
endfor
CLTI_U.H
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
c = (0 || WR[ws]16i+15..16i) < (0 || t)
WR[wd]16i+15..16i = c16
endfor
CLTI_U.W
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i < (0 || t)
WR[wd]32i+31..32i = c32
endfor
CLTI_U.D
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i < (0 || t)
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 001111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLT_S.df |
Vector Compare Signed Less Than | |
CLT_S.B wd,ws,wt |
MSA |
Vector Compare Signed Less Than |
CLT_S.H wd,ws,wt |
MSA |
Vector Compare Signed Less Than |
CLT_S.W wd,ws,wt |
MSA |
Vector Compare Signed Less Than |
CLT_S.D wd,ws,wt |
MSA |
Vector Compare Signed Less Than |
Vector Compare Signed Less Than
Vector to vector compare for signed less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] < wt[i])
Set all bits to 1 i n wd elements if the corresponding ws elements are signed less than wt elements, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLT_S.B
for i in 0 .. WRLEN/8-1
c = WR[ws]8i+7..8i < WR[wt]8i+7..8i
WR[wd]8i+7..8i = c8
endfor
CLT_S.H
for i in 0 .. WRLEN/16-1
c = WR[ws]16i+15..16i < WR[wt]16i+15..16i
WR[wd]16i+15..16i = c16
endfor
CLT_S.W
for i in 0 .. WRLEN/32-1
c = WR[ws]32i+31..32i < WR[wt]32i+31..32i
WR[wd]32i+31..32i = c32
endfor
CLT_S.D
for i in 0 .. WRLEN/64-1
c = WR[ws]64i+63..64i < WR[wt]64i+63..64i
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 001111 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
CLT_U.df |
Vector Compare Unsigned Less Than | |
CLT_U.B wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than |
CLT_U.H wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than |
CLT_U.W wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than |
CLT_U.D wd,ws,wt |
MSA |
Vector Compare Unsigned Less Than |
Vector Compare Unsigned Less Than
Vector to vector compare for unsigned less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] < wt[i])
Set all bits to 1 in wd elements if the corresponding ws elements are unsigned less than wt elements, otherwise set all bits to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
CLT_U.B
for i in 0 .. WRLEN/8-1
c = (0 || WR[ws]8i+7..8i) < (0 || WR[wt]8i+7..8i)
WR[wd]8i+7..8i = c8
endfor
CLT_U.H
for i in 0 .. WRLEN/16-1
c = (0 || WR[ws]16i+15..16i) < (0 || WR[wt]16i+15..16i)
WR[wd]16i+15..16i = c16
endfor
CLT_U.W
for i in 0 .. WRLEN/32-1
c = (0 || WR[ws]__32i+31..32i_)_ < (0 || WR[wt]32i+31..32i)
WR[wd]32i+31..32i = c32
endfor
CLT_U.D
for i in 0 .. WRLEN/64-1
c = (0 || WR[ws]64i+63..64i) < (0 || WR[wt]64i+63..64i)
WR[wd]64i+63..64i = c64
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0010 |
df/n |
ws |
rd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
COPY_S.df |
Element Copy to GPR Signed | |
COPY_S.B rd,ws[n] |
MSA |
Element Copy to GPR Signed |
COPY_S.H rd,ws[n] |
MSA |
Element Copy to GPR Signed |
COPY_S.W rd,ws[n] |
MSA |
Element Copy to GPR Signed |
COPY_S.D rd,ws[n] |
MIPS64, MSA |
Element Copy to GPR Signed |
Element Copy to GPR Signed
Element value sign extended and copied to GPR.
rd = signed(ws[n])
Sign-extend element n of vector ws and copy the result to GPR rd.
No data-dependent exceptions are possible.
COPY_S.B GPR[rd] = sign_extend(WR[ws]8n+7..8n, 64) COPY_S.H GPR[rd] = sign_extend(WR[ws]16n+15..16n, 64) COPY_S.W GPR[rd] = sign_extend(WR[ws]32n+31..32n, 64) COPY_S.D GPR[rd] = WR[ws]64n+63..64n function sign_extend(tt, n) return (ttn-1)GPRLEN-n || ttn-1..0 endfunction sign_extend
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0011 |
df/n |
ws |
rd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
COPY_U.df |
Element Copy to GPR Unsigned | |
COPY_U.B rd,ws[n] |
MSA |
Element Copy to GPR Unsigned |
COPY_U.H rd,ws[n] |
MSA |
Element Copy to GPR Unsigned |
COPY_U.W rd,ws[n] |
MIPS64, MSA |
Element Copy to GPR Unsigned |
Element Copy to GPR Unsigned
Element value zero extended and copied to GPR.
rd = unsigned(ws[n])
Zero-extend element n of vector ws and copy the result to GPR rd.
No data-dependent exceptions are possible.
COPY_U.B GPR[rd] = zero_extend(WR[ws]8n+7..8n, 64)) COPY_U.H GPR[rd] = zero_extend(WR[ws]16n+15..16n, 64)) COPY_U.W GPR[rd] = zero_extend(WR[ws]32n+31..32n, 64) function zero_extend(tt, n) return 0GPRLEN-n || ttn-1..0 endfunction zero_extend
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0000111110 |
rs |
cd |
ELM 011001 |
|
6 |
10 |
5 |
5 |
6 |
CTCMSA |
GPR Copy to MSA Control Register | |
CTCMSA cd,rs |
MSA |
GPR Copy to MSA Control Register |
GPR Copy to MSA Control Register
GPR value copied to MSA control register.
cd = rs
The content of the least significant 31 bits of GPR rs is copied to MSA control register cd.
Writing to the MSA Control and Status Register MSACSR causes the appropriate e xception if any Cause bit and its corresponding Enable bit are both set. The register is written before the exception occurs and the EPC register contains the address of the CTCMSA instruction.
The write attempt is IGNORED if cd specifies a reserved register or a register that does not exist or is not writable.
if cd = 1 then
MSACSR = GPR[rs]31..0
if MSACSRCause and (1 || MSACSREnables) != 0 then
SignalException(MSAFloatingPointException)
endif
elseif MSAIRWRP = 1 then
if cd = 3 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
MSASave = GPR[rs]31..0
elseif cd = 4 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
MSAModify = GPR[rs]31..0
elseif cd = 6 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
MSAMap = GPR[rs]31..0
elseif cd = 7 then
if not IsCoprocessorEnabled(0) then
SignalException(CoprocessorUnusableException, 0)
endif
MSAUnmap = GPR[rs]31..0
endif
endif
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception. Coprocessor 0 Unusable
Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DIV_S.df |
Vector Signed Divide | |
DIV_S.B wd,ws,wt |
MSA |
Vector Signed Divide |
DIV_S.H wd,ws,wt |
MSA |
Vector Signed Divide |
DIV_S.W wd,ws,wt |
MSA |
Vector Signed Divide |
DIV_S.D wd,ws,wt |
MSA |
Vector Signed Divide |
Vector Signed Divide
Vector signed divide.
wd[i] = ws[i] div wt[i]
The signed integer elements in vector ws are divided by signed integer elements in vector wt. The result is written to vector wd. If a divisor element vector wt is zero, the result value is UNPREDICTABLE.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
DIV_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i div WR[wt]8i+7..8i
endfor
DIV_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i div WR[wt]16i+15..16i
endfor
DIV_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i div WR[wt]32i+31..32i
endfor
DIV_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i div WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DIV_U.df |
Vector Unsigned Divide | |
DIV_U.B wd,ws,wt |
MSA |
Vector Unsigned Divide |
DIV_U.H wd,ws,wt |
MSA |
Vector Unsigned Divide |
DIV_U.W wd,ws,wt |
MSA |
Vector Unsigned Divide |
DIV_U.D wd,ws,wt |
MSA |
Vector Unsigned Divide |
Vector Unsigned Divide
Vector unsigned divide.
wd[i] = ws[i] udiv wt[i]
The unsigned integer elements in vector ws are divided by unsigned integer elements in vector wt. The result is written to vector wd. If a divisor element vector wt is zero, the result value is UNPREDICTABLE.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
DIV_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i udiv WR[wt]8i+7..8i
endfor
DIV_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i udiv WR[wt]16i+15..16i
endfor
DIV_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i udiv WR[wt]32i+31..32i
endfor
DIV_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i udiv WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
SPECIAL 000000 |
rs |
rt |
rd |
000 |
sa |
DLSA 010101 |
|
6 |
5 |
5 |
5 |
3 |
2 |
6 |
DLSA |
Doubleword Left Shift Add | |
DLSA rd,rs,rt,sa |
MSA |
Doubleword Left Shift Add |
Doubleword Left Shift Add
To left-shift a doubleword by a fixed number of bits and add the result to another doubleword.
GPR[rd] = (GPR[rs] << (sa + 1)) + GPR[rt]
The 64-bit doubleword value in GPR rs is shifted left, inserting zeros into the emptied bits; the 64-bit doubleword result is added to the 64-bit value in GPR rt and the 64-bit arithmetic result is placed into GPR rd.
No Integer Overflow exception occurs under any circumstances.
A Reserved Instruction Exception is signaled if access to 64-bit operations is not enabled or MSA implementation is not present.
if Are64bitOperationsEnabled() and Config3MSAP = 1 then s = sa + 1 temp = (GPR[rs](63-s)..0 || 0s) + GPR[rt] GPR[rd] = temp63..0 else SignalException(ReservedInstruction) endif
Reserved Instruction Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DOTP_S.df |
Vector Signed Dot Product | |
DOTP_S.H wd,ws,wt |
MSA |
Vector Signed Dot Product |
DOTP_S.W wd,ws,wt |
MSA |
Vector Signed Dot Product |
DOTP_S.D wd,ws,wt |
MSA |
Vector Signed Dot Product |
Vector Signed Dot Product
Vector signed dot product (multiply and then pairwise add the adjacent multiplication results) to double width elements.
(wd[2i+1], wd[2i]) = signed(ws[2i+1]) * signed(wt[2i+1]) + signed(ws[2i]) * signed(wt[2i])
The signed integer elements in vector wt are multiplied by signed integer elements in vector ws producing a result twice the size of the input operands. The multiplication results of adjacent odd/even elements are added and stored to the destination.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DOTP_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = dotp_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DOTP_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = dotp_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DOTP_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = dotp_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_s(ts, tt, n)
p1 = mulx_s(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_s(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DOTP_U.df |
Vector Unsigned Dot Product | |
DOTP_U.H wd,ws,wt |
MSA |
Vector Unsigned Dot Product |
DOTP_U.W wd,ws,wt |
MSA |
Vector Unsigned Dot Product |
DOTP_U.D wd,ws,wt |
MSA |
Vector Unsigned Dot Product |
Vector Unsigned Dot Product
Vector unsigned dot product (multiply and then pairwise add the adjacent multiplication results) to double width elements.
(wd[2i+1], wd[2i]) = unsigned(ws[2i+1]) * unsigned(wt[2i+1]) + unsigned(ws[2i]) * unsigned(wt[2i])
The unsigned integer elements in v ector wt are multiplied by unsigned integer elements in vector ws producing a result twice the size of the input operands. The multiplication results of adj acent odd/even elements are added and stored to the destination.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DOTP_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = dotp_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DOTP_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = dotp_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DOTP_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = dotp_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_u(ts, tt, n)
s = 0n || tsn-1..0
t = 0n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_u(ts, tt, n)
p1 = mulx_u(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_u(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPADD_S.df |
Vector Signed Dot Product and Add | |
DPADD_S.H wd,ws,wt |
MSA |
Vector Signed Dot Product and Add |
DPADD_S.W wd,ws,wt |
MSA |
Vector Signed Dot Product and Add |
DPADD_S.D wd,ws,wt |
MSA |
Vector Signed Dot Product and Add |
Vector Signed Dot Product and Add
Vector signed dot p roduct (multiply and then pairwise ad d the adjacent mu ltiplication results) and add to double width elements.
(wd[2i+1], wd[2i]) = (wd[2i+1], wd[2i]) + signed(ws[2i+1]) * signed(wt[2i+1]) + signed(ws[2i]) * signed(wt[2i])
The signed integer elements in vector wt are multiplied by signed integer elements in vector ws producing a result twice the size of the input operands. The multiplication results of adjacent odd/even elements are added to the integer elements in vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DPADD_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i + dotp_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DPADD_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i + dotp_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DPADD_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i + dotp_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_s(ts, tt, n)
p1 = mulx_s(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_s(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPADD_U.df |
Vector Unsigned Dot Product and Add | |
DPADD_U.H wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Add |
DPADD_U.W wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Add |
DPADD_U.D wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Add |
Vector Unsigned Dot Product and Add
Vector unsigned dot product (multiply and then pairwise add the adjacent multiplication results) and add to double width results.
(wd[2i+1], wd[2i]) = (wd[2i+1], wd[2i]) + unsigned(ws[2i+1]) * unsigned(wt[2i+1]) + unsigned(ws[2i]) * unsigned(wt[2i])
The unsigned integer elements in v ector wt are multiplied by unsigned integer elements in vector ws producing a result twice the size of the input operands. The multiplication results of adjacent odd/even elements are added to the integer elements in vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DPADD_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i + dotp_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DPADD_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i + dotp_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DPADD_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i + dotp_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_u(ts, tt, n)
s = 0n || tsn-1..0
t = 0n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_u(ts, tt, n)
p1 = mulx_u(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_u(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPSUB_S.df |
Vector Signed Dot Product and Subtract | |
DPSUB_S.H wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
DPSUB_S.W wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
DPSUB_S.D wd,ws,wt |
MSA |
Vector Signed Dot Product and Subtract |
Vector Signed Dot Product and Subtract
Vector signed dot product (multiply and then pairwise add the adjacent multiplication results) and subtract from double width elements.
(wd[2i+1], wd[2i]) = (wd[2i+1], wd[2i]) - (signed(ws[2i+1]) * signed(wt[2i+1]) + signed(ws[2i]) * signed(wt[2i]))
The signed integer elements in vector wt are multiplied by signed integer elements in vector ws producing a signed result twice the size of the input ope rands. The sum of multiplication results of adjacent odd/even elements is subtracted from the integer elements in vector wd to a signed result.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DPSUB_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i - dotp_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DPSUB_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i - dotp_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DPSUB_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i - dotp_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_s(ts, tt, n)
p1 = mulx_s(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_s(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010011 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
DPSUB_U.df |
Vector Unsigned Dot Product and Subtract | |
DPSUB_U.H wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
DPSUB_U.W wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
DPSUB_U.D wd,ws,wt |
MSA |
Vector Unsigned Dot Product and Subtract |
Vector Unsigned Dot Product and Subtract
Vector unsigned dot product (multiply and then pairwise add the adjacent multiplication results) and subtract from double width elements.
(wd[2i+1], wd[2i]) = (wd[2i+1], wd[2i]) - (unsigned(ws[2i+1]) * unsigned(wt[2i+1]) + unsigned(ws[2i]) * unsigned(wt[2i]))
The unsigned integer elements in vector wt are multiplied by unsigned integer elements in vector ws producing a positive, unsigned result twice the size of the input operands. The sum of multiplication results of adjacent odd/even elements is subtracted from the integer elements in vector wd to a signed result.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
DPSUB_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i - dotp_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
DPSUB_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i - dotp_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
DPSUB_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i - dotp_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function mulx_u(ts, tt, n)
s = 0n || tsn-1..0
t = 0n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function dotp_u(ts, tt, n)
p1 = mulx_u(ts2n-1..n, tt2n-1..n, n)
p0 = mulx_u(tsn-1..0, ttn-1..0, n)
p = p1 + p0
return p2n-1..0
endfunction dotp_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0000 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FADD.df |
Vector Floating-Point Addition | |
FADD.W wd,ws,wt |
MSA |
Vector Floating-Point Addition |
FADD.D wd,ws,wt |
MSA |
Vector Floating-Point Addition |
Vector Floating-Point Addition
Vector floating-point addition.
wd[i] = ws[i] + wt[i]
The floating-point elements in vector wt are added to the floating-point elements in vector ws. The result is written to vector wd.
The add operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FADD.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = AddFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FADD.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = AddFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function AddFP(tt, ts, n)
/* Implementation defined add operation. */
endfunction AddFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0000 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCAF.df |
Vector Floating-Point Quiet Compare Always False | |
FCAF.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Always False |
FCAF.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Always False |
Vector Floating-Point Quiet Compare Always False
Vector to vector floating-point quiet compare always false; all destination bits are clear.
wd[i] = quietFalse(ws[i], wt[i])
Set all bits to 0 in wd elements. Signaling NaN elements in ws or wt signal Invalid Operation exception.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCAF.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = QuietFALSE(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FCAF.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = QuietFALSE(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function QuietFALSE(tt, ts, n)
/* Implementation defined signaling NaN test */
return 0
endfunction QuietFALSE
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0010 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCEQ.df |
Vector Floating-Point Quiet Compare Equal | |
FCEQ.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Equal |
FCEQ.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Equal |
Vector Floating-Point Quiet Compare Equal
Vector to vector floating-point quiet compare for equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] =(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are ordered and equal, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCEQ.W
for i in 0 .. WRLEN/32-1
c = EqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FCEQ.D
for i in 0 .. WRLEN/64-1
c = EqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function EqualFP(tt, ts, n)
/* Implementation defined quiet equal compare operation. */
endfunction EqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010000 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FCLASS.df |
Vector Floating-Point Class Mask | |
FCLASS.W wd,ws |
MSA |
Vector Floating-Point Class Mask |
FCLASS.D wd,ws |
MSA |
Vector Floating-Point Class Mask |
Vector Floating-Point Class Mask
Vector floating-point class shown as a bit mask for Zero, Negative, Infinite, Subnormal, Quiet NaN, or Signaling
NaN.
wd[i] = class(ws[i])
Store in each element of v ector wd a bit mask reflecting the floating-point class of the correspo nding element of vector ws.
The mask has 10 bits as follows. Bits 0 and 1 indicate NaN values: signaling NaN (bit 0) and quiet NaN (bit 1). Bits
2, 3, 4, 5 classify negative values: infinity (bit 2), normal (bit 3), subnormal (bit 4), and zer o (bit 5). Bits 6, 7, 8, 9 classify positive values:infinity (bit 6), normal (bit 7), subnormal (bit 8), and zero (bit 9).
The input values and generated bit masks are not affected by the flush-to-zero bit FS in MSA Control and Status
Register MSACSR.
The operands are values in floating-point data format df. The results are values in integer data format df.
No data-dependent exceptions are possible.
FCLASS.W
for i in 0 .. WRLEN/32-1
c = ClassFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = 022 || c9..0
endfor
FCLASS.D
for i in 0 .. WRLEN/64-1
c = ClassFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = 054 || c9..0
endfor
function ClassFP(tt, n)
/* Implementation defined class operation. */
endfunction ClassFP
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0110 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCLE.df |
Vector Floating-Point Quiet Compare Less or Equal | |
FCLE.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Less or Equal |
FCLE.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Less or Equal |
Vector Floating-Point Quiet Compare Less or Equal
Vector to vector floating-point quiet compare for less than or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <=(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are ordered and either less than or equal to wt floating-point elements, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCLE.W
for i in 0 .. WRLEN/32-1
c = LessFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = EqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FCLE.D
for i in 0 .. WRLEN/64-1
c = LessFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = EqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function LessThanFP(tt, ts, n)
/* Implementation defined quiet less than compare operation. */
endfunction LessThanFP
function EqualFP(tt, ts, n)
/* Implementation defined quiet equal compare operation. */
endfunction EqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0100 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCLT.df |
Vector Floating-Point Quiet Compare Less Than | |
FCLT.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Less Than |
FCLT.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Less Than |
Vector Floating-Point Quiet Compare Less Than
Vector to vector floating-point quiet compare for less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are ordered and less than wt floatingpoint elements, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCLT.W
for i in 0 .. WRLEN/32-1
c = LessFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FCLT.D
for i in 0 .. WRLEN/64-1
c = LessFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function LessThanFP(tt, ts, n)
/* Implementation defined quiet less than compare operation. */
endfunction LessThanFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0011 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCNE.df |
Vector Floating-Point Quiet Compare Not Equal | |
FCNE.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Not Equal |
FCNE.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Not Equal |
Vector Floating-Point Quiet Compare Not Equal
Vector to vector floating-point quiet compare for not equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] !=(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are ordered and not equal, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCNE.W
for i in 0 .. WRLEN/32-1
c = NotEqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FCNE.D
for i in 0 .. WRLEN/64-1
c = NotEqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function NotEqualFP(tt, ts, n)
/* Implementation defined quiet not equal compare operation. */
endfunction NotEqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0001 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCOR.df |
Vector Floating-Point Quiet Compare Ordered | |
FCOR.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Ordered |
FCOR.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Ordered |
Vector Floating-Point Quiet Compare Ordered
Vector to vector floating-point quiet compare ordered; if true all destination bits are set, otherwise clear.
wd[i] = ws[i] !?(quiet) wt[i]
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are ordered, i.e. both elements are not NaN values, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCOR.W
for i in 0 .. WRLEN/32-1
c =OrderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FCOR.D
for i in 0 .. WRLEN/64-1
c = OrderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function OrderedFP(tt, ts, n)
/* Implementation defined quiet ordered compare operation. */
endfunction OrderedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0011 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCUEQ.df |
Vector Floating-Point Quiet Compare Unordered or Equal | |
FCUEQ.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Equal |
FCUEQ.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Equal |
Vector Floating-Point Quiet Compare Unordered or Equal
Vector to vector floating-point quiet compare for unordered or equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] =?(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered or equal, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FCUEQ.W
for i in 0 .. WRLEN/32-1
c = UnorderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = EqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FCUEQ.D
for i in 0 .. WRLEN/64-1
c = UnorderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = EqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function UnorderedFP(tt, ts, n)
/* Implementation defined quiet unordered compare operation. */
endfunction UnorderedFP
function EqualFP(tt, ts, n)
/* Implementation defined quiet equal compare operation. */
endfunction EqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0111 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCULE.df |
Vector Floating-Point Quiet Compare Unordered or Less or Equal | |
FCULE.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Less or Equal |
FCULE.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Less or Equal |
Vector Floating-Point Quiet Compare Unordered or Less or Equal
Vector to vector floating-point quiet compare for unordered or less than or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <=?(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are unordered or less than or equal to wt floating-point elements, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FCULE.W
for i in 0 .. WRLEN/32-1
c = UnorderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = LessFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
e = EqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d | e)32
endfor
FCULE.D
for i in 0 .. WRLEN/64-1
c = UnorderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = LessFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
e = EqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d | e)64
endfor
function UnorderedFP(tt, ts, n)
/* Implementation defined quiet unordered compare operation. */
endfunction UnorderedFP
function LessThanFP(tt, ts, n)
/* Implementation defined quiet less than compare operation. */
endfunction LessThanFP
function EqualFP(tt, ts, n)
/* Implementation defined quiet equal compare operation. */
endfunction EqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0101 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCULT.df |
Vector Floating-Point Quiet Compare Unordered or Less Than | |
FCULT.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Less Than |
FCULT.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Less Than |
Vector Floating-Point Quiet Compare Unordered or Less Than
Vector to vector floating-point quiet compare for unordered or less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <?(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are unordered or less than wt floatingpoint elements, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FCULT.W
for i in 0 .. WRLEN/32-1
c = UnorderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = LessFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FCULT.D
for i in 0 .. WRLEN/64-1
c = LessFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = UnorderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function UnorderedFP(tt, ts, n)
/* Implementation defined quiet unordered compare operation. */
endfunction UnorderedFP
function LessThanFP(tt, ts, n)
/* Implementation defined quiet less than compare operation. */
endfunction LessThanFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0001 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCUN.df |
Vector Floating-Point Quiet Compare Unordered | |
FCUN.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered |
FCUN.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered |
Vector Floating-Point Quiet Compare Unordered
Vector to vector floating-point quiet compare unordered; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] ?(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered, i.e. at least one element is a NaN value, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FCUN.W
for i in 0 .. WRLEN/32-1
c = UnorderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FCUN.D
for i in 0 .. WRLEN/64-1
c = UnorderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function UnorderedFP(tt, ts, n)
/* Implementation defined quiet unordered compare operation. */
endfunction UnorderedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0010 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FCUNE.df |
Vector Floating-Point Quiet Compare Unordered or Not Equal | |
FCUNE.W wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Not Equal |
FCUNE.D wd,ws,wt |
MSA |
Vector Floating-Point Quiet Compare Unordered or Not Equal |
Vector Floating-Point Quiet Compare Unordered or Not Equal
Vector to vector floating-point quiet compare for unordered or not equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] !=?(quiet) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered or not equal, otherwise set all bits to 0.
The quiet compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FCUNE.W
for i in 0 .. WRLEN/32-1
c = UnorderedFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = NotEqualFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FCUNE.D
for i in 0 .. WRLEN/64-1
c = UnorderedFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = NotEqualFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function UnorderedFP(tt, ts, n)
/* Implementation defined quiet unordered compare operation. */
endfunction UnorderedFP
function NotEqualFP(tt, ts, n)
/* Implementation defined quiet not equal compare operation. */
endfunction NotEqualFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0011 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FDIV.df |
Vector Floating-Point Division | |
FDIV.W wd,ws,wt |
MSA |
Vector Floating-Point Division |
FDIV.D wd,ws,wt |
MSA |
Vector Floating-Point Division |
Vector Floating-Point Division
Vector floating-point division.
wd[i] = ws[i] / wt[i]
The floating-point elements in vector ws are divided by the floating-point elements in vector wt. The result is written to vector wd.
The divide operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FDIV.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = DivideFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FDIV.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = DivideFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function DivideFP(tt, ts, n)
/* Implementation defined divide operation. */
endfunction DivideFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1000 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FEXDO.df |
Vector Floating-Point Down-Convert Interchange Format | |
FEXDO.H wd,ws,wt |
MSA |
Vector Floating-Point Down-Convert Interchange Format |
FEXDO.W wd,ws,wt |
MSA |
Vector Floating-Point Down-Convert Interchange Format |
Vector Floating-Point Down-Convert Interchange Format
Vector conversion to smaller interchange format.
left_half(wd)[i] = down_convert(ws[i]); right_half(wd)[i] = down_convert(wt[i])
The floating-point elements in vectors ws and wt are down-converted to a smaller interchange format, i.e. from 64-bit to 32-bit, or from 32-bit to 16-bit.
The format down-conversion operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
16-bit floating-point results are not affected by the flush-to-zero bit FS in MSA Control and Status Register MSACSR.
The operands are values in floating-point data format d ouble the size of df. The results are floating-point values in data format of df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FEXDO.H
for i in 0 .. WRLEN/32-1
f = DownConvertFP(WR[ws]32i+31..32i, 32)
g = DownConvertFP(WR[wt]32i+31..32i, 32)
WR[wd]16i+15+WRLEN/2..16i+WRLEN/2 = f
WR[wd]16i+15..16i = g
endfor
FEXDO.W
for i in 0 .. WRLEN/64-1
f = DownConvertFP(WR[ws]64i+63..64i, 64)
g = DownConvertFP(WR[wt]64i+63..64i, 64)
WR[wd]32i+31+WRLEN/2..32i+WRLEN/2 = f
WR[wd]32i+31..32i = g
endfor
function DownConvertFP(tt, n)
/* Implementation defined format down-conversion. */
endfunction DownConvertFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0111 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FEXP2.df |
Vector Floating-Point Base 2 Exponentiation | |
FEXP2.W wd,ws,wt |
MSA |
Vector Floating-Point Base 2 Exponentiation |
FEXP2.D wd,ws,wt |
MSA |
Vector Floating-Point Base 2 Exponentiation |
Vector Floating-Point Base 2 Exponentiation
Vector floating-point base 2 exponentiation.
wd[i] = ws[i] * 2
wt[i]
The floating-point elements in vector ws are scaled, i.e. multiplied, by 2 to the power of integer elements in vector wt.
The result is written to vector wd.
The operation is the homogeneous scaleB() as defined by the IEEE Standard for Floating-Point Arithmetic 754TM2008.
The ws operands and wd results are values in floating-point data format df. The wt operands are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FEXP2.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = Exp2FP(WR[ws]32i+31..32i, WR[wt]32i+31..32i)
endfor
FEXP2.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = Exp2FP(WR[ws]64i+63..64i, WR[wt]64i+63..64i)
endfor
function Exp2FP(tt, ts, n)
/* Implementation defined tt * 2ts operation. */
endfunction Exp2FP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011000 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FEXUPL.df |
Vector Floating-Point Up-Convert Interchange Format Left | |
FEXUPL.W wd,ws |
MSA |
Vector Floating-Point Up-Convert Interchange Format Left |
FEXUPL.D wd,ws |
MSA |
Vector Floating-Point Up-Convert Interchange Format Left |
Vector Floating-Point Up-Convert Interchange Format Left
Vector left elements conversion to wider interchange format.
wd[i] = up_convert(left_half(ws)[i])
The left half floating-point elements in vector ws are up-converted to a larger interchange format, i.e. from 16-bit to
32-bit, or from 32-bit to 64-bit. The result is written to vector wd.
The format up-conversion operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
16-bit floating-point inputs are not affected by the flush-to-zero bit FS in MSA Control and Status Register MSACSR.
The operands are values in floating-point data format half the size of df. The results are floating-point values in data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FEXUPL.W
for i in 0 .. WRLEN/32-1
f = UpConvertFP(WR[ws]16i+15+WRLEN/2..16i+WRLEN/2, 16)
WR[wd]32i+31..32i = f
endfor
FEXUPL.D
for i in 0 .. WRLEN/64-1
f = UpConvertFP(WR[ws]32i+31+WRLEN/2..32i+WRLEN/2, 32)
WR[wd]64i+63..64i = f
endfor
function UpConvertFP(tt, n)
/* Implementation defined format up-conversion. */
endfunction UpConvertFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011001 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FEXUPR.df |
Vector Floating-Point Up-Convert Interchange Format Right | |
FEXUPR.W wd,ws |
MSA |
Vector Floating-Point Up-Convert Interchange Format Right |
FEXUPR.D wd,ws |
MSA |
Vector Floating-Point Up-Convert Interchange Format Right |
Vector Floating-Point Up-Convert Interchange Format Right
Vector right elements conversion to wider interchange format.
wd[i] = up_convert(right_half(ws)[i])
The right half floating-point elements in vector ws are up-converted to a larger interchange format, i.e. from 16-bit to
32-bit, or from 32-bit to 64-bit. The result is written to vector wd.
The format up-conversion operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
16-bit floating-point inputs are not affected by the flush-to-zero bit FS in MSA Control and Status Register MSACSR.
The operands are values in floating-point data format half the size of df. The results are floating-point values in data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FEXUPR.W
for i in 0 .. WRLEN/32-1
f = UpConvertFP(WR[ws]16i+15..16i, 16)
WR[wd]32i+31..32i = f
endfor
FEXUPR.D
for i in 0 .. WRLEN/64-1
f = UpConvertFP(WR[ws]32i+31..32i, 32)
WR[wd]64i+63..64i = f
endfor
function UpConvertFP(tt, n)
/* Implementation defined format up-conversion. */
endfunction UpConvertFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011110 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FFINT_S.df |
Vector Floating-Point Round and Convert from Signed Integer | |
FFINT_S.W wd,ws |
MSA |
Vector Floating-Point Round and Convert from Signed Integer |
FFINT_S.D wd,ws |
MSA |
Vector Floating-Point Round and Convert from Signed Integer |
Vector Floating-Point Round and Convert from Signed Integer
Vector floating-point round and convert from signed integer.
wd[i] = from_int_s(ws[i])
The signed integer elements in ws are converted to floating-point values. The result is written to vector wd.
The integer to floating-point conversion operation is defined by the IEEE Standard for Floating-Point Arithmetic
754TM-2008.
The operands are values in integer data format df. The results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FFINT_S.W
for i in 0 .. WRLEN/32-1
f = FromIntSignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FFINT_S.D
for i in 0 .. WRLEN/64-1
f = FromIntSignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function FromFixPointFP(tt, n)
/* Implementation defined signed integer to floating-point
conversion. */
endfunction FromFixPointFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011111 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FFINT_U.df |
Vector Floating-Point Convert from Unsigned Integer | |
FFINT_U.W wd,ws |
MSA |
Vector Floating-Point Convert from Unsigned Integer |
FFINT_U.D wd,ws |
MSA |
Vector Floating-Point Convert from Unsigned Integer |
Vector Floating-Point Convert from Unsigned Integer
Vector floating-point convert from unsigned integer.
wd[i] = from_int_u(ws[i])
The unsigned integer elements in ws are converted to floating-point values. The result is written to vector wd.
The integer to floating-point conversion operation is defined by the IEEE Standard for Floating-Point Arithmetic
754TM-2008.
The operands are values in integer data format df. The results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FFINT_U.W
for i in 0 .. WRLEN/32-1
f = FromIntUnsignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FFINT_U.D
for i in 0 .. WRLEN/64-1
f = FromIntUnsignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function FromIntUnsignedFP(tt, n)
/* Implementation defined unsigned integer to floating-point
conversion. */
endfunction FromIntUnsignedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011010 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FFQL.df |
Vector Floating-Point Convert from Fixed-Point Left | |
FFQL.W wd,ws |
MSA |
Vector Floating-Point Convert from Fixed-Point Left |
FFQL.D wd,ws |
MSA |
Vector Floating-Point Convert from Fixed-Point Left |
Vector Floating-Point Convert from Fixed-Point Left
Vector left fix-point elements format conversion to floating-point doubling the element width.
wd[i] = from_q(left_half(ws)[i])
The left half fixed-point elements in vector ws are up-converted to floating-point data format, i.e. from 16-bit Q15 to
32-bit floating-point, or from 32-bit Q31 to 64-bit floating-point. The result is written to vector wd.
The fixed-point Q15 or Q31 value is first converted to floating-point as a 16-bit or 32-bit integer (as though it was scaled up by 215 or 231) and then the resulting floating-point value is scaled down (divided by 215 or 231).
The scaling and integer to floating-point conversion operations are defined by the IEEE Standard for Floating-Point
Arithmetic 754TM-2008. No floating-point exceptions are possible because the input data is half the size of the output.
The operands are values in fixed-point data format half the size of df. The results are floating-point values in data format df.
No data-dependent exceptions are possible.
FFQL.W
for i in 0 .. WRLEN/32-1
f = FromFixPointFP(WR[ws]16i+15+WRLEN/2..16i+WRLEN/2, 16)
WR[wd]32i+31..32i = f
endfor
FFQL.D
for i in 0 .. WRLEN/64-1
f = FromFixPointFP(WR[ws]32i+31+WRLEN/2..32i+WRLEN/2, 32)
WR[wd]64i+63..64i = f
endfor
function FromFixPointFP(tt, n)
/* Implementation defined fixed-point to floating-point conversion. */
endfunction FromFixPointFP
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110011011 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FFQR.df |
Vector Floating-Point Convert from Fixed-Point Right | |
FFQR.W wd,ws |
MSA |
Vector Floating-Point Convert from Fixed-Point Right |
FFQR.D wd,ws |
MSA |
Vector Floating-Point Convert from Fixed-Point Right |
Vector Floating-Point Convert from Fixed-Point Right
Vector right fix-point elements format conversion to floating-point doubling the element width.
wd[i] = from_q(right_half(ws)[i]);
The right half fixed-point elements in vector ws are up-converted to floating-point data format, i.e. from 16-bit Q15 to
32-bit floating-point, or from 32-bit Q31 to 64-bit floating-point. The result is written to vector wd.
The fixed-point Q15 or Q31 value is first converted to floating-point as a 16-bit or 32-bit integer (as though it was scaled up by 215 or 231) and then the resulting floating-point value is scaled down (divided by 215 or 231).
The scaling and integer to floating-point conversion operations are defined by the IEEE Standard for Floating-Point
Arithmetic 754TM-2008. No floating-point exceptions are possible because the input data is half the size of the output.
The operands are values in fixed-point data format half the size of df. The results are floating-point values in data format df.
No data-dependent exceptions are possible.
FFQR.W
for i in 0 .. WRLEN/32-1
f = FromFixPointFP(WR[ws]16i+15..16i, 16)
WR[wd]32i+31..32i = f
endfor
FFQR.D
for i in 0 .. WRLEN/64-1
f = FromFixPointFP(WR[wt]32i+31..32i, 32)
WR[ws]64i+63..64i = f
endfor
function FromFixPointFP(tt, n)
/* Implementation defined fixed-point to floating-point conversion. */
endfunction FromFixPointFP
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
11000000 |
df |
rs |
wd |
2R 011110 |
|
6 |
8 |
2 |
5 |
5 |
6 |
FILL.df |
Vector Fill from GPR | |
FILL.B wd,rs |
MSA |
Vector Fill from GPR |
FILL.H wd,rs |
MSA |
Vector Fill from GPR |
FILL.W wd,rs |
MSA |
Vector Fill from GPR |
FILL.D wd,rs |
MIPS64, MSA |
Vector Fill from GPR |
Vector Fill from GPR
Vector elements replicated from GPR.
wd[i] = rs
Replicate GPR rs value to all elements in vector wd. If the source GPR is wider than the destination data format, the destination's elements will be set to the least significant bits of the GPR.
No data-dependent exceptions are possible.
FILL.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = GPR[rs]7..0
endfor
FILL.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = GPR[rs]15..0
endfor
FILL.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = GPR[rs]31..0
endfor
FILL.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = GPR[rs]63..0
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110010111 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FLOG2.df |
Vector Floating-Point Base 2 Logarithm | |
FLOG2.W wd,ws |
MSA |
Vector Floating-Point Base 2 Logarithm |
FLOG2.D wd,ws |
MSA |
Vector Floating-Point Base 2 Logarithm |
Vector Floating-Point Base 2 Logarithm
Vector floating-point base 2 logarithm.
wd[i] = log2(ws[i])
The signed integral base 2 e xponents of floating-point elements in vector ws are written as floating-point values to vector elements wd.
This operation is the homogeneous base 2 logB() as defined by the IEEE Standard for Floating-Point Arithmetic
754TM-2008.
The ws operands and wd results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FLOG2.W
for i in 0 .. WRLEN/32-1
l = Log2FP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = l
endfor
FLOG2.D
for i in 0 .. WRLEN/64-1
f = Log2FP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function Log2FP(tt, n)
/* Implementation defined logarithm base 2 operation. */
endfunction Log2FP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0100 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMADD.df |
Vector Floating-Point Multiply-Add | |
FMADD.W wd,ws,wt |
MSA |
Vector Floating-Point Multiply-Add |
FMADD.D wd,ws,wt |
MSA |
Vector Floating-Point Multiply-Add |
Vector Floating-Point Multiply-Add
Vector floating-point multiply-add
wd[i] = wd[i] + ws[i] * wt[i]
The floating-point elements in vector wt multiplied by floating-point elements in vector ws are added to the floatingpoint elements in vector wd. The operation is fused, i.e. computed as if with unbounded range and precision, rounding only once to the destination format.
The multiply add operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008. The multiplication between an infinity and a zero si gnals Invalid Operation exception. If the Invalid Operation exception is disabled, the result is the default quiet NaN.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMADD.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
MultiplyAddFP(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMADD.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
MultiplyAddFP(WR[wd]64i+63..64i, WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MultiplyAddFP(td, tt, ts, n)
/* Implementation defined multiply add operation. */
endfunction MultiplyAddFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1110 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMAX.df |
Vector Floating-Point Maximum | |
FMAX.W wd,ws,wt |
MSA |
Vector Floating-Point Maximum |
FMAX.D wd,ws,wt |
MSA |
Vector Floating-Point Maximum |
Vector Floating-Point Maximum
Vector floating-point maximum.
wd[i] = max(ws[i], wt[i])
The largest values between corresponding floating-point elements in vector ws and vector wt are written to vector wd.
The largest value is defined by the maxNum operation in the IEEE Standard for Floating-Point Arithmetic 754TM2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMAX.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = MaxFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMAX.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = MaxFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MaxFP(tt, ts, n)
/* Implementation defined, returns the largest argument. */
endfunction MaxFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1111 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMAX_A.df |
Vector Floating-Point Maximum Based on Absolute Values | |
FMAX_A.W wd,ws,wt |
MSA |
Vector Floating-Point Maximum Based on Absolute Values |
FMAX_A.D wd,ws,wt |
MSA |
Vector Floating-Point Maximum Based on Absolute Values |
Vector Floating-Point Maximum Based on Absolute Values
Vector floating-point maximum based on the magnitude, i.e. absolute values.
wd[i] = absolute_value(ws[i]) > absolute_value(wt[i])? ws[i]: wt[i]
The value with the largest magnitude, i.e. absolute value, between corresponding floating-point elements in vector ws and vector wt are written to vector wd.
The largest absolute value is defined by the maxNumMag operation in the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMAX_A.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = MaxAbsoluteFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMAX_A.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = MaxAbsoluteFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MaxAbsoluteFP(tt, ts, n)
/* Implementation defined, returns the argument with largest
absolute value. For equal absolute values, returns the largest
argument.*/
endfunction MaxAbsoluteFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1100 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMIN.df |
Vector Floating-Point Minimum | |
FMIN.W wd,ws,wt |
MSA |
Vector Floating-Point Minimum |
FMIN.D wd,ws,wt |
MSA |
Vector Floating-Point Minimum |
Vector Floating-Point Minimum
Vector floating-point minimum.
wd[i] = min(ws[i], wt[i])
in v ector ws and v ector wt are written
The smallest value between corresponding floating-point elements to vector wd.
The smallest value is defined by the minNum operation in the IEEE Standard for Floating-Point Arithmetic 754TM2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMIN.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = MinFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMIN.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = MinFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MinFP(tt, ts, n)
/* Implementation defined, returns the smallest argument. */
endfunction MinFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1101 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMIN_A.df |
Vector Floating-Point Minimum Based on Absolute Values | |
FMIN_A.W wd,ws,wt |
MSA |
Vector Floating-Point Minimum Based on Absolute Values |
FMIN_A.D wd,ws,wt |
MSA |
Vector Floating-Point Minimum Based on Absolute Values |
Vector Floating-Point Minimum Based on Absolute Values
Vector floating-point minimum based on the magnitude, i.e. absolute values.
wd[i] = absolute_value(ws[i]) < absolute_value(wt[i])? ws[i]: wt[i]
The value with the smallest magnitude, i.e. absol ute value, between corres ponding floating-point elements in vector ws and vector wt are written to vector wd.
The smallest absolute value is defined by the minNumMag operation in the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMIN_A.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = MinAbsoluteFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMIN_A.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = MinAbsoluteFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MinAbsoluteFP(tt, ts, n)
/* Implementation defined, returns the argument with smallest
absolute value. For equal absolute values, returns the smallest
argument.*/
endfunction MinAbsoluteFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0101 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMSUB.df |
Vector Floating-Point Multiply-Sub | |
FMSUB.W wd,ws,wt |
MSA |
Vector Floating-Point Multiply-Sub |
FMSUB.D wd,ws,wt |
MSA |
Vector Floating-Point Multiply-Sub |
Vector Floating-Point Multiply-Sub
Vector floating-point multiply-sub
wd[i] = wd[i] - ws[i] * wt[i]
The floating-point elements in vector wt multiplied by floating-point elements in vector ws are subtracted from the floating-point elements in vector wd. The operation is fused, i.e. computed as if with unbounded range and precision, rounding only once to the destination format.
The multiply subtract operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008. The multiplication between an infinity and a zero signals Invalid Operation exception. If the Invalid Operation exception is disabled, the result is the default quiet NaN.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMSUB.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
MultiplySubFP(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMSUB.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
MultiplySubFP(WR[wd]64i+63..64i, WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MultiplySubFP(td, tt, ts, n)
/* Implementation defined multiply subtract operation. */
endfunction MultiplySubFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0010 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FMUL.df |
Vector Floating-Point Multiplication | |
FMUL.W wd,ws,wt |
MSA |
Vector Floating-Point Multiplication |
FMUL.D wd,ws,wt |
MSA |
Vector Floating-Point Multiplication |
Vector Floating-Point Multiplication
Vector floating-point multiplication.
wd[i] = ws[i] * wt[i]
The floating-point elements in vector wt are multiplied by the floating-point elements in vector ws. The result is written to vector wd.
The multiplication operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FMUL.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = MultiplyFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FMUL.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = MultiplyFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function MultiplyFP(tt, ts, n)
/* Implementation defined multiplication operation. */
endfunction MultiplyFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010101 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FRCP.df |
Vector Approximate Floating-Point Reciprocal | |
FRCP.W wd,ws |
MSA |
Vector Approximate Floating-Point Reciprocal |
FRCP.D wd,ws |
MSA |
Vector Approximate Floating-Point Reciprocal |
Vector Approximate Floating-Point Reciprocal
Vector floating-point reciprocal.
wd[i] = 1.0 / ws[i]
The reciprocals of fl oating-point elements in vector ws are calculated as specif ied below. The result is w ritten to vector wd.
The compliant reciprocal operation is defined as 1.0 divided by element value, where the IEEE Standard for FloatingPoint Arithmetic 754TM-2008 defined divide operation is affected by the rounding mode bits RM and flush-to-zero bit FS in MSA Control and Status Register MSACSR. The compliant reciprocals signal all the exceptions specified by the IEEE Standard for Floating-Point Arithmetic 754TM-2008 for the divide operation.
The reciprocal operation is allowed to be approximate. The approximation differs from the compliant reciprocal representation by no more than one unit in the least significant place. Approximate reciprocal operations signal the Inexact exception if the compliant reciprocal is Inexact or if there is a chance the approximated result may differ from the compliant reciprocal. Approximate reciprocal operations are allowed to not signal the Overflow or Underflow exceptions. The Invalid and divide by Zero exceptions are signaled based on the IEEE Standard for Floating-Point Arithmetic 754TM-2008 defined divide operation.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FRCP.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = ReciprocalFP(WR[ws]32i+31..32i, 32)
endfor
FRCP.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = ReciprocalFP(WR[ws]64i+63..64i, 64)
endfor
function ReciprocalFP(tt, ts, n)
/* Implementation defined Reciprocal operation. */
endfunction ReciprocalFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010110 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FRINT.df |
Vector Floating-Point Round to Integer | |
FRINT.W wd,ws |
MSA |
Vector Floating-Point Round to Integer |
FRINT.D wd,ws |
MSA |
Vector Floating-Point Round to Integer |
Vector Floating-Point Round to Integer
Vector floating-point round to integer.
wd[i] = round_int(ws[i])
The floating-point elements in vector ws are rounded to an integral valued floating-point number in the same format based on the rounding mode bits RM in MSA Control and Status Register MSACSR. The result is written to vector wd.
The round to integer operation is exact as defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FRINT.W
for i in 0 .. WRLEN/32-1
f = RoundIntFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FRINT.D
for i in 0 .. WRLEN/64-1
f = RoundIntFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function RoundIntFP(tt, n)
/* Implementation defined round to integer operation. */
endfunction RoundIntFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010100 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FRSQRT.df |
Vector Approximate Floating-Point Reciprocal of Square Root | |
FRSQRT.W wd,ws |
MSA |
Vector Approximate Floating-Point Reciprocal of Square Root |
FRSQRT.D wd,ws |
MSA |
Vector Approximate Floating-Point Reciprocal of Square Root |
Vector Approximate Floating-Point Reciprocal of Square Root
Vector floating-point reciprocal of square root.
wd[i] = 1.0 / sqrt(ws[i])
roots of floating-point elements in vector ws are calculated as specif ied below. The
The reciprocals of the square result is written to vector wd.
The compliant reciprocal of the square root operation is defined as 1.0 di vided by the square root of the element value, where the IEEE Standard for Floating-Point Arithmetic 754TM-2008 defined divide and square root operations are affected by the rounding mode bits RM and flush-to-zero bit FS in MSA Control and Status Register MSACSR.
The compliant reciprocals of the square roots signal all the exceptions specified by the IEEE Standard for FloatingPoint Arithmetic 754TM-2008 for the divide and square roots operations.
The reciprocal of the square root operation is allowed to be approximate. The approximation differs from the compliant reciprocal of the square root representation by no more than two units in the least significant place. Approximate reciprocal of the square root operations signal the Inexact exception if the compliant reciprocal of the square root is
Inexact or if there is a chance the appr oximated result may differ from the compliant reciprocal of the square root.
The Invalid and divide by Zero exceptions are signaled based on the IEEE Stand ard for Floating-Point Arithmetic
754TM-2008 defined divide operation.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FRSQRT.W
for i in 0 .. WRLEN/32-1
f = SquareRootReciprocalFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FRSQRT.D
for i in 0 .. WRLEN/64-1
f = SquareRootReciprocalFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function SquareRootReciprocalFP(tt, ts, n)
/* Implementation defined square root reciprocal operation. */
endfunction SquareRootReciprocalFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1000 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSAF.df |
Vector Floating-Point Signaling Compare Always False | |
FSAF.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Always False |
FSAF.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Always False |
Vector Floating-Point Signaling Compare Always False
Vector to vector floating-point signaling compare always false; all destination bits are clear.
wd[i] = signalingFalse(ws[i], wt[i])
Set all bits to 0 in wd elements. Signaling and quiet NaN elements in ws or wt signal Invalid Operation exception.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSAF.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = SignalingFALSE(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FSAF.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = SignalingFALSE(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function SignalingFALSE(tt, ts, n)
/* Implementation defined signaling and quiet NaN test */
return 0
endfunction SignalingFALSE
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1010 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSEQ.df |
Vector Floating-Point Signaling Compare Equal | |
FSEQ.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Equal |
FSEQ.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Equal |
Vector Floating-Point Signaling Compare Equal
Vector to vector floating-point signaling compare for equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] =(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are equal, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSEQ.W
for i in 0 .. WRLEN/32-1
c = EqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FSEQ.D
for i in 0 .. WRLEN/64-1
c = EqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function EqualSigFP(tt, ts, n)
/* Implementation defined signaling equal compare operation. */
endfunction EqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1110 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSLE.df |
Vector Floating-Point Signaling Compare Less or Equal | |
FSLE.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Less or Equal |
FSLE.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Less or Equal |
Vector Floating-Point Signaling Compare Less or Equal
Vector to vector floating-point signaling compare for less than or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <=(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are less than or equal to wt floatingpoint elements, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FSLE.W
for i in 0 .. WRLEN/32-1
c = LessSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = EqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FSLE.D
for i in 0 .. WRLEN/64-1
c = LessSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = EqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function LessThanSigFP(tt, ts, n)
/* Implementation defined signaling less than compare operation. */
endfunction LessThanSigFP
function EqualSigFP(tt, ts, n)
/* Implementation defined signaling equal compare operation. */
endfunction EqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1100 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSLT.df |
Vector Floating-Point Signaling Compare Less Than | |
FSLT.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Less Than |
FSLT.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Less Than |
Vector Floating-Point Signaling Compare Less Than
Vector to vector floating-point signaling compare for less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are less than wt floating-point elements, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSLT.W
for i in 0 .. WRLEN/32-1
c = LessSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FSLT.D
for i in 0 .. WRLEN/64-1
c = LessSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function LessThanSigFP(tt, ts, n)
/* Implementation defined signaling less than compare operation. */
endfunction LessThanSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1011 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSNE.df |
Vector Floating-Point Signaling Compare Not Equal | |
FSNE.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Not Equal |
FSNE.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Not Equal |
Vector Floating-Point Signaling Compare Not Equal
Vector to vector floating-point signaling compare for not equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] !=(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are not equal, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSNE.W
for i in 0 .. WRLEN/32-1
c = NotEqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FSNE.D
for i in 0 .. WRLEN/64-1
c = NotEqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function NotEqualSigFP(tt, ts, n)
/* Implementation defined signaling not equal compare operation. */
endfunction NotEqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1001 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSOR.df |
Vector Floating-Point Signaling Compare Ordered | |
FSOR.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Ordered |
FSOR.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Ordered |
Vector Floating-Point Signaling Compare Ordered
Vector to vector floating-point signaling compare ordered; if true all destination bits are set, otherwise clear.
wd[i] = ws[i] !?(signaling) wt[i]
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are ordered, i.e. both elements are not NaN values, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
0.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSOR.W
for i in 0 .. WRLEN/32-1
c = OrderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FSOR.D
for i in 0 .. WRLEN/64-1
c = OrderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function OrderedSigFP(tt, ts, n)
/* Implementation defined signaling ordered compare operation. */
endfunction OrderedSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010011 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FSQRT.df |
Vector Floating-Point Square Root | |
FSQRT.W wd,ws |
MSA |
Vector Floating-Point Square Root |
FSQRT.D wd,ws |
MSA |
Vector Floating-Point Square Root |
Vector Floating-Point Square Root
Vector floating-point square root.
wd[i] = sqrt(ws[i])
The square roots of floating-point elements in vector ws are written to vector wd.
The square root operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSQRT.W
for i in 0 .. WRLEN/32-1
f = SquareRootFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FSQRT.D
for i in 0 .. WRLEN/64-1
f = SquareRootFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function SquareRootFP(tt, ts, n)
/* Implementation defined square root operation. */
endfunction SquareRootFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
0001 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSUB.df |
Vector Floating-Point Subtraction | |
FSUB.W wd,ws,wt |
MSA |
Vector Floating-Point Subtraction |
FSUB.D wd,ws,wt |
MSA |
Vector Floating-Point Subtraction |
Vector Floating-Point Subtraction
Vector floating-point subtraction.
wd[i] = ws[i] - wt[i]
The floating-point elements in vector wt are subtracted from the floa ting-point elements in vector ws. The result is written to vector wd.
The subtract operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The operands and results are values in floating-point data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSUB.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = SubtractFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
FSUB.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = SubtractFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function SubtractFP(tt, ts, n)
/* Implementation defined subtract operation. */
endfunction SubtractFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1011 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSUEQ.df |
Vector Floating-Point Signaling Compare Unordered or Equal | |
FSUEQ.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Equal |
FSUEQ.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Equal |
Vector Floating-Point Signaling Compare Unordered or Equal
Vector to vector floating-point signaling compare for unordered or equality; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] =?(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered or equal, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FSUEQ.W
for i in 0 .. WRLEN/32-1
c = UnorderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = EqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FSUEQ.D
for i in 0 .. WRLEN/64-1
c = UnorderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = EqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function UnorderedSigFP(tt, ts, n)
/* Implementation defined signaling unordered compare operation. */
endfunction UnorderedSigFP
function EqualSigFP(tt, ts, n)
/* Implementation defined signaling equal compare operation. */
endfunction EqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1111 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSULE.df |
Vector Floating-Point Signaling Compare Unordered or Less or Equal | |
FSULE.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Less or Equal |
FSULE.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Less or Equal |
Vector Floating-Point Signaling Compare Unordered or Less or Equal
Vector to vector floating-point signaling compare for unordered or less than or equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <=?(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are unordered or less than or equal to wt floating-point elements, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FSULE.W
for i in 0 .. WRLEN/32-1
c = UnorderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = LessSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
e = EqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d | e)32
endfor
FSULE.D
for i in 0 .. WRLEN/64-1
c = UnorderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = LessSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
e = EqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d | e)64
endfor
function UnorderedSigFP(tt, ts, n)
/* Implementation defined signaling unordered compare operation. */
endfunction UnorderedSigFP
function LessThanSigFP(tt, ts, n)
/* Implementation defined signaling less than compare operation. */
endfunction LessThanSigFP
function EqualSigFP(tt, ts, n)
/* Implementation defined signaling equal compare operation. */
endfunction EqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1101 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSULT.df |
Vector Floating-Point Signaling Compare Unordered or Less Than | |
FSULT.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Less Than |
FSULT.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Less Than |
Vector Floating-Point Signaling Compare Unordered or Less Than
Vector to vector floating-point signaling compare for unordered or less than; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] <?(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws floating-point elements are unordered or less than wt floatingpoint elements, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FSULT.W
for i in 0 .. WRLEN/32-1
c = UnorderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = LessSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FSULT.D
for i in 0 .. WRLEN/64-1
c = UnorderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
d = LessSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function UnorderedSigFP(tt, ts, n)
/* Implementation defined signaling unordered compare operation. */
endfunction UnorderedSigFP
function LessThanSigFP(tt, ts, n)
/* Implementation defined signaling less than compare operation. */
endfunction LessThanSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1001 |
df |
wt |
ws |
wd |
3RF 011010 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSUN.df |
Vector Floating-Point Signaling Compare Unordered | |
FSUN.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered |
FSUN.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered |
Vector Floating-Point Signaling Compare Unordered
Vector to vector floating-point signaling compare unordered; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] ?(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered, i.e. at least one element is a NaN value, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM2008.
FSUN.W
for i in 0 .. WRLEN/32-1
c = UnorderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = c32
endfor
FSUN.D
for i in 0 .. WRLEN/64-1
c = UnorderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = c64
endfor
function UnorderedSigFP(tt, ts, n)
/* Implementation defined signaling unordered compare operation. */
endfunction UnorderedSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1010 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FSUNE.df |
Vector Floating-Point Signaling Compare Unordered or Not Equal | |
FSUNE.W wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Not Equal |
FSUNE.D wd,ws,wt |
MSA |
Vector Floating-Point Signaling Compare Unordered or Not Equal |
Vector Floating-Point Signaling Compare Unordered or Not Equal
Vector to vector floating-point signaling compare for unordered or not equal; if true all destination bits are set, otherwise clear.
wd[i] = (ws[i] !=?(signaling) wt[i])
Set all bits to 1 in wd elements if the corresponding ws and wt floating-point elements are unordered or not equal, otherwise set all bits to 0.
The signaling compare operation is defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008.
The Inexact Exception is not signaled when subnormal input operands are flushed based on the flush-to-zero bit FS in
MSA Control and Status Register MSACSR. In case of a floating-point exception, the default result has all bits set to
1.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are poss ible as s pecified by the I EEE Standard for Floating-Point Arithmetic 754TM
2008.
FSUNE.W
for i in 0 .. WRLEN/32-1
c = UnorderedSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
d = NotEqualSigFP(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
WR[wd]32i+31..32i = (c | d)32
endfor
FSUNE.D
for i in 0 .. WRLEN/64-1
c = UnorderedSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
c = NotEqualSigFP(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
WR[wd]64i+63..64i = (c | d)64
endfor
function UnorderedSigFP(tt, ts, n)
/* Implementation defined signaling unordered compare operation. */
endfunction UnorderedSigFP
function NotEqualSigFP(tt, ts, n)
/* Implementation defined signaling not equal compare operation. */
endfunction NotEqualSigFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011100 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FTINT_S.df |
Vector Floating-Point Convert to Signed Integer | |
FTINT_S.W wd,ws |
MSA |
Vector Floating-Point Convert to Signed Integer |
FTINT_S.D wd,ws |
MSA |
Vector Floating-Point Convert to Signed Integer |
Vector Floating-Point Convert to Signed Integer
Vector floating-point convert to signed integer.
wd[i] = to_int_s(ws[i])
The floating-point elements in ws are rounded and converted to signed integer values based on the rounding mode bits
RM in MSA Control and Status Register MSACSR. The result is written to vector wd.
The floating-point to integer conversion operation is exact as defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand. In this case, the default result is the rounded result.
NaN values and numeric operands converting to an integer outside the range of the destination format signal the
Invalid Operation exception. For positive numeric operands outside the range, the default result is the largest signed integer value. The default result for negative numeric operands outside the range is the smallest signed integer value.
The default result for NaN operands is zero.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are possible.
FTINT_S.W
for i in 0 .. WRLEN/32-1
f = ToIntSignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FTINT_S.D
for i in 0 .. WRLEN/64-1
f = ToIntSignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function ToIntSignedFP(tt, n)
/* Implementation defined floating-point rounding and signed
integer conversion. */
endfunction ToIntSignedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110011101 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FTINT_U.df |
Vector Floating-Point Round and Convert to Unsigned Integer | |
FTINT_U.W wd,ws |
MSA |
Vector Floating-Point Round and Convert to Unsigned Integer |
FTINT_U.D wd,ws |
MSA |
Vector Floating-Point Round and Convert to Unsigned Integer |
Vector Floating-Point Round and Convert to Unsigned Integer
Vector floating-point round and convert to unsigned integer.
wd[i] = to_int_u(ws[i])
The floating-point elements in ws are rounded and converted to unsigned integer values based on the rounding mode bits RM in MSA Control and Status Register MSACSR. The result is written to vector wd.
The floating-point to integer conversion operation is exact as defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand. In this case, the default result is the rounded result.
NaN values and numeric operands converting to an integer outside the range of the destination format signal the
Invalid Operation exception. For positive numeric operands outside the range, the default result is the largest unsigned integer value. The default result for negative numeric operands is zero. The default result for NaN operands is zero.
The operands are values in floating_point data format df. The results are values in integer data format df.
Data-dependent exceptions are possible.
FTINT_U.W
for i in 0 .. WRLEN/32-1
f = ToIntUnsignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FTINT_U.D
for i in 0 .. WRLEN/64-1
f = ToIntUnsignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function ToIntUnsignedFP(tt, n)
/* Implementation defined floating-point rounding and unsigned
integer conversion. */
endfunction ToIntUnsignedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
1010 |
df |
wt |
ws |
wd |
3RF 011011 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
FTQ.df |
Vector Floating-Point Convert to Fixed-Point | |
FTQ.H wd,ws,wt |
MSA |
Vector Floating-Point Convert to Fixed-Point |
FTQ.W wd,ws,wt |
MSA |
Vector Floating-Point Convert to Fixed-Point |
Vector Floating-Point Convert to Fixed-Point
Vector fix-point format conversion from floating-point.
left_half(wd)[i] = to_q(ws[i]); right_half(wd)[i] = to_q(wt[i])
The floating-point elements in vectors ws and wt are down-converted to a fixed-point representation, i.e. from 64-bit floating-point to 32-bit Q31 fixed-point representation, or from 32-bit floating-point to 16-bit Q15 fixed-point representation.
The floating-point data inside the fixed-point range is first scaled up (multiplied by 215 or 231) and then rounded and converted to a 16-bit or 32 -bit integer based on the ro unding mode bits RM in MSA Control and St atus
Register MSACSR. The resulting value is the Q15 or Q31 representation.
The scaling and floating-point to integer conversion operations are defined by the IEEE Standard for Floating-Point
Arithmetic 754TM-2008. The integer conversion operation is exact, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand. In this case, the default result is the rounded result.
NaN values signal the Invalid Operation exception. Numeric operands converting to fixed-point values outside the range of the destination format signal the Overflow and the Inexact exceptions. For positive numeric operands outside
the range, the default result is the largest fixed-point value. The default result for negative numeric operands outside the range is the smallest fixed-point value. The default result for NaN operands is zero.
The operands are values in floating-point data format df. The results are fixed-point values in data format half the size of df.
Data-dependent exceptions are possible.
FTQ.H
for i in 0 .. WRLEN/32-1
q = ToFixPointFP((WR[ws]32i+31..32i, 32)
r = ToFixPointFP((WR[wt]32i+31..32i, 32)
WR[wd]16i+15+WRLEN/2..16i+WRLEN/2 = q
WR[wd]16i+15..16i = r
endfor
FTQ.W
for i in 0 .. WRLEN/64-1
q = ToFixPointFP((WR[ws]64i+63..64i, 64)
r = ToFixPointFP((WR[wt]64i+63..64i, 64)
WR[wd]32i+31+WRLEN/2..32i+WRLEN/2 = q
WR[wd]32i+31..32i = r
endfor
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010001 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FTRUNC_S.df |
Vector Floating-Point Truncate and Convert to Signed Integer | |
FTRUNC_S.W wd,ws |
MSA |
Vector Floating-Point Truncate and Convert to Signed Integer |
FTRUNC_S.D wd,ws |
MSA |
Vector Floating-Point Truncate and Convert to Signed Integer |
Vector Floating-Point Truncate and Convert to Signed Integer
Vector floating-point truncate and convert to signed integer.
wd[i] = truncate_to_int_s(ws[i])
The floating-point elements in ws are truncated, i.e. rounded toward zero, to signed integer values. The rounding mode bits RM in MSA Control and Status Register MSACSR are not used. The result is written to vector wd.
The floating-point to integer conversion operation is exact as defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand. In this case, the default result is the rounded result.
NaN values and numeric operands converting to an integer outside the range of the destination format signal the
Invalid Operation exception. For positive numeric operands outside the range, the default result is the largest signed integer value. The default result for negative numeric operands outside the range is the smallest signed integer value.
The default result for NaN operands is zero.
The operands are values in floating-point data format df. The results are values in integer data format df.
Data-dependent exceptions are possible.
FTRUNC_S.W
for i in 0 .. WRLEN/32-1
f = TruncToIntSignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FTRUNC_S.D
for i in 0 .. WRLEN/64-1
f = TruncToIntSignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function TruncToIntSignedFP(tt, n)
/* Implementation defined floating-point truncation and signed
integer conversion. */
endfunction TruncToIntSignedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
110010010 |
df |
ws |
wd |
2RF 011110 |
|
6 |
9 |
1 |
5 |
5 |
6 |
FTRUNC_U.df |
Vector Floating-Point Truncate and Convert to Unsigned Integer | |
FTRUNC_U.W wd,ws |
MSA |
Vector Floating-Point Truncate and Convert to Unsigned Integer |
FTRUNC_U.D wd,ws |
MSA |
Vector Floating-Point Truncate and Convert to Unsigned Integer |
Vector Floating-Point Truncate and Convert to Unsigned Integer
Vector floating-point truncate and convert to unsigned integer.
wd[i] = truncate_to_int_u(ws[i])
The floating-point elements in ws are truncated, i.e. rounded toward zero, to unsigned integer values. The rounding mode bits RM in MSA Control and Status Register MSACSR are not used. The result is written to vector wd.
The floating-point to integer conversion operation is exact as defined by the IEEE Standard for Floating-Point Arithmetic 754TM-2008, i.e. the Inexact exception is signaled if the result does not have the same numerical value as the input operand. In this case, the default result is the rounded result.
NaN values and numeric operands converting to an integer outside the range of the destination format signal the
Invalid Operation exception. For positive numeric operands outside the range, the default result is the largest unsigned integer value. The default value for negative numeric operands is zero. The default result for NaN operands is zero.
The operands are values in floating_point data format df. The results are values in integer data format df.
Data-dependent exceptions are possible.
FTRUNC_U.W
for i in 0 .. WRLEN/32-1
f = TruncToIntUnsignedFP(WR[ws]32i+31..32i, 32)
WR[wd]32i+31..32i = f
endfor
FTRUNC_U.D
for i in 0 .. WRLEN/64-1
f = TruncToIntUnsignedFP(WR[ws]64i+63..64i, 64)
WR[wd]64i+63..64i = f
endfor
function TruncToIntUnsignedFP(tt, n)
/* Implementation defined floating-point truncation and unsigned
integer conversion. */
endfunction TruncToIntUnsignedFP
Reserved Instruction Exception, MSA Disabled Exception, MSA Floating Point Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
HADD_S.df |
Vector Signed Horizontal Add | |
HADD_S.H wd,ws,wt |
MSA |
Vector Signed Horizontal Add |
HADD_S.W wd,ws,wt |
MSA |
Vector Signed Horizontal Add |
HADD_S.D wd,ws,wt |
MSA |
Vector Signed Horizontal Add |
Vector Signed Horizontal Add
Vector sign extend and pairwise add the odd elements with the even elements to double width elements
(wd[2i+1], wd[2i]) = signed(ws[2i+1]) + signed(wt[2i])
The sign-extended odd elements in vector ws are added to the sign-extended even elements in vector wt producing a result twice the size of the input operands. The result is written to vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
HADD_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = hadd_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
HADD_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = hadd_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
HADD_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = hadd_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function hadd_s(ts, tt, n)
t = ((ts2n-1)n || ts2n-1..n) + ((ttn-1)n || ttn-1..0)
return t
endfunction hadd_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
HADD_U.df |
Vector Unsigned Horizontal Add | |
HADD_U.H wd,ws,wt |
MSA |
Vector Unsigned Horizontal Add |
HADD_U.W wd,ws,wt |
MSA |
Vector Unsigned Horizontal Add |
HADD_U.D wd,ws,wt |
MSA |
Vector Unsigned Horizontal Add |
Vector Unsigned Horizontal Add
Vector zero extend and pairwise add the odd elements with the even elements to double width elements
(wd[2i+1], wd[2i]) = unsigned(ws[2i+1]) + unsigned(wt[2i])
The zero-extended odd elements in vector ws are added to the zero-extended even elements in vector wt producing a result twice the size of the input operands. The result is written to vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
HADD_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = hadd_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
HADD_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = hadd_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
HADD_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = hadd_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function hadd_u(ts, tt, n)
t = (0n || ts2n-1..n) + (0n || ttn-1..0)
return t
endfunction hadd_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
HSUB_S.df |
Vector Signed Horizontal Subtract | |
HSUB_S.H wd,ws,wt |
MSA |
Vector Signed Horizontal Subtract |
HSUB_S.W wd,ws,wt |
MSA |
Vector Signed Horizontal Subtract |
HSUB_S.D wd,ws,wt |
MSA |
Vector Signed Horizontal Subtract |
Vector Signed Horizontal Subtract
Vector sign extend and pairwise subtract the even elements from the odd elements to double width elements
(wd[2i+1], wd[2i]) = signed(ws[2i+1]) - signed(wt[2i])
The sign-extended odd elements in vector wt are subtracted from the sign-extended even elements in vector wt producing a signed result twice the size of the input operands. The result is written to vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
HSUB_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = hsub_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
HSUB_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = hsub_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
HSUB_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = hsub_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function hsub_s(ts, tt, n)
t = ((ts2n-1)n || ts2n-1..n) - ((ttn-1)n || ttn-1..0)
return t
endfunction hsub_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
HSUB_U.df |
Vector Unsigned Horizontal Subtract | |
HSUB_U.H wd,ws,wt |
MSA |
Vector Unsigned Horizontal Subtract |
HSUB_U.W wd,ws,wt |
MSA |
Vector Unsigned Horizontal Subtract |
HSUB_U.D wd,ws,wt |
MSA |
Vector Unsigned Horizontal Subtract |
Vector Unsigned Horizontal Subtract
Vector zero extend and pairwise subtract the even elements from the odd elements to double width elements
(wd[2i+1], wd[2i]) = unsigned(ws[2i+1]) - unsigned(wt[2i])
The zero-extended odd elements in vector wt are subtracted from the zero-extended even elements in vector ws producing a signed result twice the size of the input operands. The result is written to vector wd.
The operands are values in integer data format half the size of df. The results are values in integer data format df.
No data-dependent exceptions are possible.
HSUB_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = hsub_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 8)
endfor
HSUB_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = hsub_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 16)
endfor
HSUB_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = hsub_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 32)
endfor
function hsub_u(ts, tt, n)
t = (0n || ts2n-1..n) - (0n || ttn-1..0)
return t
endfunction hsub_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ILVEV.df |
Vector Interleave Even | |
ILVEV.B wd,ws,wt |
MSA |
Vector Interleave Even |
ILVEV.H wd,ws,wt |
MSA |
Vector Interleave Even |
ILVEV.W wd,ws,wt |
MSA |
Vector Interleave Even |
ILVEV.D wd,ws,wt |
MSA |
Vector Interleave Even |
Vector Interleave Even
Vector even elements interleave.
wd[2i] = wt[2i]; wd[2i+1] = ws[2i]
Even elements in v ectors ws and wt are copied to vector wd alternating one element from ws with one element from wt.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ILVEV.B
for i in 0 .. WRLEN/16-1
j = 2 * i
k = 2 * i + 1
WR[wd]8j+7..8j = WR[wt]8j+7..8j
WR[wd]8k+7..8k = WR[ws]8j+7..8j
endfor
ILVEV.H
for i in 0 .. WRLEN/32-1
j = 2 * i
k = 2 * i + 1
WR[wd]16j+15..16j = WR[wt]16j+15..16j
WR[wd]16k+15..16k = WR[ws]16j+15..16j
endfor
ILVEV.W
for i in 0 .. WRLEN/64-1
j = 2 * i
k = 2 * i + 1
WR[wd]32j+31..32j = WR[wt]32j+31..32j
WR[wd]32k+31..32k = WR[ws]32j+31..32j
endfor
ILVEV.D
for i in 0 .. WRLEN/128-1
j = 2 * i
k = 2 * i + 1
WR[wd]64j+63..64j = WR[wt]64j+63..64j
WR[wd]64k+63..64k = WR[ws]64j+63..64j
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ILVL.df |
Vector Interleave Left | |
ILVL.B wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.H wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.W wd,ws,wt |
MSA |
Vector Interleave Left |
ILVL.D wd,ws,wt |
MSA |
Vector Interleave Left |
Vector Interleave Left
Vector left elements interleave.
wd[2i] = left_half(wt)[i]; wd[2i+1] = left_half(ws)[i]
The left half elements in vectors ws and wt are copied to vector wd alternating one element from ws with one element from wt.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ILVL.B
for i in 0 .. WRLEN/16-1
j = 2 * i
k = 2 * i + 1
WR[wd]8j+7..8j = WR[wt]8i+7+WRLEN/2..8i+WRLEN/2
WR[wd]8k+7..8k = WR[ws]8i+7+WRLEN/2..8i+WRLEN/2
endfor
ILVL.H
for i in 0 .. WRLEN/32-1
j = 2 * i
k = 2 * i + 1
WR[wd]16j+15..16j = WR[wt]16i+15+WRLEN/2..16i+WRLEN/2
WR[wd]16k+15..16k = WR[ws]16i+15+WRLEN/2..16i+WRLEN/2
endfor
ILVL.W
for i in 0 .. WRLEN/64-1
j = 2 * i
k = 2 * i + 1
WR[wd]32j+31..32j = WR[wt]32i+31+WRLEN/2..32i+WRLEN/2
WR[wd]32k+31..32k = WR[ws]32i+31+WRLEN/2..32i+WRLEN/2
endfor
ILVL.D
for i in 0 .. WRLEN/128-1
j = 2 * i
k = 2 * i + 1
WR[wd]64j+63..64j = WR[wt]64i+63+WRLEN/2..64i+WRLEN/2
WR[wd]64k+63..64k = WR[ws]64i+63+WRLEN/2..64i+WRLEN/2
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ILVOD.df |
Vector Interleave Odd | |
ILVOD.B wd,ws,wt |
MSA |
Vector Interleave Odd |
ILVOD.H wd,ws,wt |
MSA |
Vector Interleave Odd |
ILVOD.W wd,ws,wt |
MSA |
Vector Interleave Odd |
ILVOD.D wd,ws,wt |
MSA |
Vector Interleave Odd |
Vector Interleave Odd
Vector odd elements interleave.
wd[2i] = wt[2i+1]; wd[2i+1] = ws[2i+1]
Odd elements in v ectors ws and wt are copied to vector wd alternating one element from ws with one element from wt.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ILVOD.B
for i in 0 .. WRLEN/16-1
j = 2 * i
k = 2 * i + 1
WR[wd]8j+7..8j = WR[wt]8k+7..8k
WR[wd]8k+7..8k = WR[ws]8k+7..8k
endfor
ILVOD.H
for i in 0 .. WRLEN/32-1
j = 2 * i
k = 2 * i + 1
WR[wd]16j+15..16j = WR[wt]16k+15..16k
WR[wd]16k+15..16k = WR[ws]16k+15..16k
endfor
ILVOD.W
for i in 0 .. WRLEN/64-1
j = 2 * i
k = 2 * i + 1
WR[wd]32j+31..32j = WR[wt]32k+31..32k
WR[wd]32k+31..32k = WR[ws]32k+31..32k
endfor
ILVOD.D
for i in 0 .. WRLEN/128-1
j = 2 * i
k = 2 * i + 1
WR[wd]64j+63..64j = WR[wt]64k+63..64k
WR[wd]64k+63..64k = WR[ws]64k+63..64k
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
ILVR.df |
Vector Interleave Right | |
ILVR.B wd,ws,wt |
MSA |
Vector Interleave Right |
ILVR.H wd,ws,wt |
MSA |
Vector Interleave Right |
ILVR.W wd,ws,wt |
MSA |
Vector Interleave Right |
ILVR.D wd,ws,wt |
MSA |
Vector Interleave Right |
Vector Interleave Right
Vector right elements interleave.
wd[2i] = right_half(wt)[i]; wd[2i+1] = right_half(ws)[i]
The right half elements in vectors ws and wt are copied to vector wd alternating one element from ws with one element from wt.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
ILVR.B
for i in 0 .. WRLEN/16-1
j = 2 * i
k = 2 * i + 1
WR[wd]8j+7..8j = WR[wt]8i+7..8i
WR[wd]8k+7..8k = WR[ws]8i+7..8i
endfor
ILVR.H
for i in 0 .. WRLEN/32-1
j = 2 * i
k = 2 * i + 1
WR[wd]16j+15..16j = WR[wt]16i+15..16i
WR[wd]16k+15..16k = WR[ws]16i+15..16i
endfor
ILVR.W
for i in 0 .. WRLEN/64-1
j = 2 * i
k = 2 * i + 1
WR[wd]32j+31..32j = WR[wt]32i+31..32i
WR[wd]32k+31..32k = WR[ws]32i+31..32i
endfor
ILVR.D
for i in 0 .. WRLEN/128-1
j = 2 * i
k = 2 * i + 1
WR[wd]64j+63..64j = WR[wt]64i+63..64i
WR[wd]64k+63..64k = WR[ws]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0100 |
df/n |
rs |
wd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
INSERT.df |
GPR Insert Element | |
INSERT.B wd[n],rs |
MSA |
GPR Insert Element |
INSERT.H wd[n],rs |
MSA |
GPR Insert Element |
INSERT.W wd[n],rs |
MSA |
GPR Insert Element |
INSERT.D wd[n],rs |
MIPS64, MSA |
GPR Insert Element |
GPR Insert Element
GPR value copied to vector element.
wd[n] = rs
Set element n in vector wd to GPR rs value. All other elements in vector wd are unchanged. If the source GPR is wider than the destination data format, the destination's elements will be set to the least significant bits of the GPR.
The operands and results are values in data format df.
No data-dependent exceptions are possible.
INSERT.B WR[wd]8n+7..8n = GPR[rs]7..0 INSERT.H WR[wd]16n+15..16n = GPR[rs]15..0 INSERT.W WR[wd]32n+31..32n = GPR[rs]31..0 INSERT.D WR[wd]64n+63..64n = GPR[rs]63..0
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0101 |
df/n |
ws |
wd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
INSVE.df |
Element Insert Element | |
INSVE.B wd[n],ws[0] |
MSA |
Element Insert Element |
INSVE.H wd[n],ws[0] |
MSA |
Element Insert Element |
INSVE.W wd[n],ws[0] |
MSA |
Element Insert Element |
INSVE.D wd[n],ws[0] |
MSA |
Element Insert Element |
Element Insert Element
Element value copied to vector element.
wd[n] = ws[0]
Set element n in vector wd to element 0 in vector ws value. All other elements in vector wd are unchanged.
The operands and results are values in data format df.
No data-dependent exceptions are possible.
INSVE.B WR[wd]8n+7..8n = WR[ws]7..0 INSVE.H WR[wd]16n+15..16n = WR[ws]15..0 INSVE.W WR[wd]32n+31..32n = WR[ws]31..0 INSVE.D WR[wd]64n+63..64n = WR[ws]63..0
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
s10 |
rs |
wd |
MI10 1000 |
df |
|
6 |
10 |
5 |
5 |
4 |
2 |
LD.df |
Vector Load | |
LD.B wd,s10(rs) |
MSA |
Vector Load |
LD.H wd,s10(rs) |
MSA |
Vector Load |
LD.W wd,s10(rs) |
MSA |
Vector Load |
LD.D wd,s10(rs) |
MSA |
Vector Load |
Vector Load
Vector load element-by-element from base register plus offset memory address,
wd[i] = memory[rs + (s10 + i) * sizeof(wd[i])]
The WRLEN / 8 bytes at the ef fective memory location addressed by the basers and the 10-bit signed immediate offset s10 are fetched and placed in wd as elements of data format df.
The s10 offset in data format df units is added to the base rs to form the effective memory location address. rs and the effective memory location address have no alignment restrictions.
If the effective memory location address is element aligned, the vector load instruction is atomic at the element level with no guaranteed ordering among elemen ts, i.e. each element load is an ato mic operation issued in no particular order with respect to the element's vector position.
By convention, in the assembly language syntax all offsets are in bytes and have to be multiple of the size of the data format df. The assembler determines the s10 bitfield value dividing the byte offset by the size of the data format df.
Address-dependent exceptions are possible.
LD.B
a = rs + s10
LoadByteVector(WR[wd]WRLEN-1..0, a, WRLEN/8)
LD.H
a = rs + s10 * 2
LoadHalfwordVector(WR[wd]WRLEN-1..0, a, WRLEN/16)
LD.W
a = rs + s10 * 4
LoadWordVector(WR[wd]WRLEN-1..0, a, WRLEN/32)
LD.D
a = rs + s10 * 8
LoadDoublewordVector(WR[wd]WRLEN-1..0, a, WRLEN/64)
function LoadByteVector(ts, a, n)
/* Implementation defined load ts vector of n bytes from virtual
address a. */
endfunction LoadByteVector
function LoadHalfwordVector(ts, a, n)
/* Implementation defined load ts vector of n halfwords from
virtual address a. */
endfunction LoadHalfwordVector
function LoadWordVector(ts, a, n)
/* Implementation defined load ts vector of n words from virtual
address a. */
endfunction LoadWordVector
function LoadDoublewordVector(ts, a, n)
/* Implementation defined load ts vector of n doublewords from
virtual address a. */
endfunction LoadDoublewordVector
Reserved Instruction Exception, MSA Disabled Exception. Data access TLB and Address Error Exceptions.
|
MSA 011110 |
110 |
df |
s10 |
wd |
I10 000111 |
|
6 |
3 |
2 |
10 |
5 |
6 |
LDI.df |
Immediate Load | |
LDI.B wd,s10 |
MSA |
Immediate Load |
LDI.H wd,s10 |
MSA |
Immediate Load |
LDI.W wd,s10 |
MSA |
Immediate Load |
LDI.D wd,s10 |
MSA |
Immediate Load |
Immediate Load
Immediate value replicated across all destination elements.
wd[i] = s10
The signed immediate s10 is replicated in all wd elements. For byte elements, only the least significant 8 bits of s10 will be used.
No data-dependent exceptions are possible.
LDI.B
t = s107..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = t
endfor
LDI.H
t = (s109)6 || s109..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = t
endfor
LDI.W
t = (s109)22 || s109..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = t
endfor
LDI.D
t = (s109)54 || s109..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
SPECIAL 000000 |
rs |
rt |
rd |
000 |
sa |
LSA 000101 |
|
6 |
5 |
5 |
5 |
3 |
2 |
6 |
LSA |
Left Shift Add | |
LSA rd,rs,rt,sa |
MSA |
Left Shift Add |
Left Shift Add
To left-shift a word by a fixed number of bits and add the result to another word.
GPR[rd] = (GPR[rs] << (sa + 1)) + GPR[rt]
The 32-bit word value in GPR rs is shifted left, inserting zeros into the emptied bits; the 32-bit word result is added to the 32-bit value in GPR rt and the 32-bit arithmetic result is sign-extended and placed into GPR rd.
No Integer Overflow exception occurs under any circumstances.
A Reserved Instruction Exception is signaled if MSA implementation is not present.
If GPR rt does not contain sign-extended 32-bit values (bits 63..31 equal), then the result of the operation is UNPREDICTABLE.
if NotWordValue(GPR[rt]) then UNPREDICTABLE endif if Config3MSAP = 1 then s = sa + 1 temp = (GPR[rs](31-s)..0 || 0s) + GPR[rt] GPR[rd] = sign_extend(temp31..0) else SignalException(ReservedInstruction) endif
Reserved Instruction Exception.
Unlike nearly all other word operations, the LSA input operand GPR rs does not have to be a properly sign-extended word value to produce a valid sign-extended 32-bit result. The result word is always sign-extended into a 64-bit destination register.
|
MSA 011110 |
1101 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MADDR_Q.df |
Vector Fixed-Point Multiply and Add Rounded | |
MADDR_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Add Rounded |
MADDR_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Add Rounded |
Vector Fixed-Point Multiply and Add Rounded
Vector fixed-point multiply and add rounded.
wd[i] = saturate(round(wd[i] + ws[i] * wt[i]))
The products of fixed-point elements in vector wt by fixed-point elements in vector ws are added to the fixed-point elements in vector wd. The multiplication result is not saturated, i.e. exact (-1) * (-1) = 1 is added to the destination.
The rounded and saturated fixed-point results are stored back to wd.
Internally, the multiplication, addition, and rounding operate on data double the size of df. Truncation to fixed-point data format df is performed at the very last stage, after saturation.
The rounding is done by adding 1 to the most significant bit that is going to be discarded at truncation.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MADDR_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
q_maddr(WR[wd]16i+15..16i, WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MADDR_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
q_maddr(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function q_maddr(td, ts, tt, n)
p = mulx_s(ts, tt, n)
d = (tdn-1 || tdn-1..0 || 0n-1) + p2n-1..0
d = d + (1 || 0n-2)
d = sat_s(d2n-1..n-1, n+1, n)
return dn-1..0
endfunction q_maddr
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MADDV.df |
Vector Multiply and Add | |
MADDV.B wd,ws,wt |
MSA |
Vector Multiply and Add |
MADDV.H wd,ws,wt |
MSA |
Vector Multiply and Add |
MADDV.W wd,ws,wt |
MSA |
Vector Multiply and Add |
MADDV.D wd,ws,wt |
MSA |
Vector Multiply and Add |
Vector Multiply and Add
Vector multiply and add.
wd[i] = wd[i] + ws[i] * wt[i]
The integer elements in vector wt are multiplied by integer elements in vector ws and added to the integer elements in vector wd. The most significant half of the multiplication result is discarded.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MADDV.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i =
WR[wd]8i+7..8i + WR[ws]8i+7..8i * WR[wt]8i+7..8i
endfor
MADDV.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i + WR[ws]16i+15..16i * WR[wt]16i+15..16i
endfor
MADDV.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i + WR[ws]32i+31..32i * WR[wt]32i+31..32i
endfor
MADDV.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i + WR[ws]64i+63..64i * WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0101 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MADD_Q.df |
Vector Fixed-Point Multiply and Add | |
MADD_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Add |
MADD_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Add |
Vector Fixed-Point Multiply and Add
Vector fixed-point multiply and add.
wd[i] = saturate(wd[i] + ws[i] * wt[i])
The products of fixed-point elements in vector wt by fixed-point elements in vector ws are added to the fixed-point elements in vector wd. The multiplication result is not saturated, i.e. exact (-1) * (-1) = 1 is added to the destination.
The saturated fixed-point results are stored back to wd.
Internally, the multiplication and addition operate on data double the size of df. Truncation to fixed-point data format df is performed at the very last stage, after saturation.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MADD_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
q_madd(WR[wd]16i+15..16i, WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MADD_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
q_madd(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function q_madd(td, ts, tt, n)
p = mulx_s(ts, tt, n)
d = (tdn-1 || tdn-1..0 || 0n-1) + p2n-1..0
d = sat_s(d2n-1..n-1, n+1, n)
return dn-1..0
endfunction q_madd
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
s5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MAXI_S.df |
Immediate Signed Maximum | |
MAXI_S.B wd,ws,s5 |
MSA |
Immediate Signed Maximum |
MAXI_S.H wd,ws,s5 |
MSA |
Immediate Signed Maximum |
MAXI_S.W wd,ws,s5 |
MSA |
Immediate Signed Maximum |
MAXI_S.D wd,ws,s5 |
MSA |
Immediate Signed Maximum |
Immediate Signed Maximum
Immediate and vector signed maximum.
wd[i] = max(ws[i], s5)
Maximum values between signed elements in vector ws and the 5-bit signed immediate s5 are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MAXI_S.B
t = (s54)3 || s54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = max_s(WR[ws]8i+7..8i, t, 8)
endfor
MAXI_S.H
t = (s54)11 || s54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = max_s(WR[ws]16i+15..16i, t, 16)
endfor
MAXI_S.W
t = (s54)27 || s54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = max_s(WR[ws]32i+31..32i, t, 32)
endfor
MAXI_S.D
t = (s54)59 || s54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = max_s(WR[ws]64i+63..64i, t, 64)
endfor
function max_s(ts, tt, n)
t = ttn-1 || tt
s = tsn-1 || ts
if t < s then
return ts
else
return tt
endif
endfunction max_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
u5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MAXI_U.df |
Immediate Unsigned Maximum | |
MAXI_U.B wd,ws,u5 |
MSA |
Immediate Unsigned Maximum |
MAXI_U.H wd,ws,u5 |
MSA |
Immediate Unsigned Maximum |
MAXI_U.W wd,ws,u5 |
MSA |
Immediate Unsigned Maximum |
MAXI_U.D wd,ws,u5 |
MSA |
Immediate Unsigned Maximum |
Immediate Unsigned Maximum
Immediate and vector unsigned maximum.
wd[i] = max(ws[i], u5)
Maximum values between unsigned elements in v ector ws and the 5-bit unsigned immediate u5 are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MAXI_U.B
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = max_u(WR[ws]8i+7..8i, t, 8)
endfor
MAXI_U.H
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = max_u(WR[ws]16i+15..16i, t, 16)
endfor
MAXI_U.W
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = max_u(WR[ws]32i+31..32i, t, 32)
endfor
MAXI_U.D
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = max_u(WR[ws]64i+63..64i, t, 64)
endfor
function max_u(ts, tt, n)
t = 0 || tt
s = 0 || ts
if t < s then
return ts
else
return tt
endif
endfunction max_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MAX_A.df |
Vector Maximum Based on Absolute Values | |
MAX_A.B wd,ws,wt |
MSA |
Vector Maximum Based on Absolute Values |
MAX_A.H wd,ws,wt |
MSA |
Vector Maximum Based on Absolute Values |
MAX_A.W wd,ws,wt |
MSA |
Vector Maximum Based on Absolute Values |
MAX_A.D wd,ws,wt |
MSA |
Vector Maximum Based on Absolute Values |
Vector Maximum Based on Absolute Values
Vector and vector maximum based on the absolute values.
wd[i] = absolute_value(ws[i]) > absolute_value(wt[i])? ws[i]: wt[i]
The value with the largest magnitude, i.e. absolute value, between corresponding signed elements in vector ws and vector wt are written to vector wd.
The minimum negative value representable has the largest absolute value.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MAX_A.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = max_a(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MAX_A.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = max_a(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MAX_A.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = max_a(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MAX_A.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = max_a(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function abs(tt, n)
if ttn-1 = 1 then
return -ttn-1...0
else
return ttn-1..0
endif
endfunction abs
function max_a(ts, tt, n)
t = 0 || abs(tt, n)
s = 0 || abs(ts, n)
if t < s then
return ts
else
return tt
endif
endfunction max_a
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MAX_S.df |
Vector Signed Maximum | |
MAX_S.B wd,ws,wt |
MSA |
Vector Signed Maximum |
MAX_S.H wd,ws,wt |
MSA |
Vector Signed Maximum |
MAX_S.W wd,ws,wt |
MSA |
Vector Signed Maximum |
MAX_S.D wd,ws,wt |
MSA |
Vector Signed Maximum |
Vector Signed Maximum
Vector and vector signed maximum.
wd[i] = max(ws[i], wt[i])
Maximum values between signed elements in vector wt and signed elements in vector ws are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MAX_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = max_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MAX_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = max_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MAX_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = max_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MAX_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = max_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function max_s(ts, tt, n)
t = ttn-1 || tt
s = tsn-1 || ts
if t < s then
return ts
else
return tt
endif
endfunction max_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MAX_U.df |
Vector Unsigned Maximum | |
MAX_U.B wd,ws,wt |
MSA |
Vector Unsigned Maximum |
MAX_U.H wd,ws,wt |
MSA |
Vector Unsigned Maximum |
MAX_U.W wd,ws,wt |
MSA |
Vector Unsigned Maximum |
MAX_U.D wd,ws,wt |
MSA |
Vector Unsigned Maximum |
Vector Unsigned Maximum
Vector and vector unsigned maximum.
wd[i] = max(ws[i], wt[i])
ector wt and uns igned elements in vector ws are written to
Maximum values between unsigned elements in v vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MAX_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = max_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MAX_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = max_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MAX_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = max_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MAX_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = max_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function max_u(ts, tt, n)
t = 0 || tt
s = 0 || ts
if t < s then
return ts
else
return tt
endif
endfunction max_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
s5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MINI_S.df |
Immediate Signed Minimum | |
MINI_S.B wd,ws,s5 |
MSA |
Immediate Signed Minimum |
MINI_S.H wd,ws,s5 |
MSA |
Immediate Signed Minimum |
MINI_S.W wd,ws,s5 |
MSA |
Immediate Signed Minimum |
MINI_S.D wd,ws,s5 |
MSA |
Immediate Signed Minimum |
Immediate Signed Minimum
Immediate and vector signed minimum.
wd[i] = min(ws[i], s5)
Minimum values between signed elements in vector ws and the 5-bit signed immediate s5 are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MINI_S.B
t = (s54)3 || s54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = min_s(WR[ws]8i+7..8i, t, 8)
endfor
MINI_S.H
t = (s54)11 || s54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = min_s(WR[ws]16i+15..16i, t, 16)
endfor
MINI_S.W
t = (s54)27 || s54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = min_s(WR[ws]32i+31..32i, t, 32)
endfor
MINI_S.D
t = (s54)59 || s54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = min_s(WR[ws]64i+63..64i, t, 64)
endfor
function min_s(ts, tt, n)
t = ttn-1 || tt
s = tsn-1 || ts
if t > s then
return ts
else
return tt
endif
endfunction min_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
u5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MINI_U.df |
Immediate Unsigned Minimum | |
MINI_U.B wd,ws,u5 |
MSA |
Immediate Unsigned Minimum |
MINI_U.H wd,ws,u5 |
MSA |
Immediate Unsigned Minimum |
MINI_U.W wd,ws,u5 |
MSA |
Immediate Unsigned Minimum |
MINI_U.D wd,ws,u5 |
MSA |
Immediate Unsigned Minimum |
Immediate Unsigned Minimum
Immediate and vector unsigned minimum.
wd[i] = min(ws[i], u5)
Minimum values between unsigned elements in vector ws and the 5-bit unsigned immediate u5 are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MINI_U.B
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = min_u(WR[ws]8i+7..8i, t, 8)
endfor
MINI_U.H
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = min_u(WR[ws]16i+15..16i, t, 16)
endfor
MINI_U.W
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = min_u(WR[ws]32i+31..32i, t, 32)
endfor
MINI_U.D
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = min_u(WR[ws]64i+63..64i, t, 64)
endfor
function min_u(ts, tt, n)
t = 0 || tt
s = 0 || ts
if t > s then
return ts
else
return tt
endif
endfunction min_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MIN_A.df |
Vector Minimum Based on Absolute Value | |
MIN_A.B wd,ws,wt |
MSA |
Vector Minimum Based on Absolute Value |
MIN_A.H wd,ws,wt |
MSA |
Vector Minimum Based on Absolute Value |
MIN_A.W wd,ws,wt |
MSA |
Vector Minimum Based on Absolute Value |
MIN_A.D wd,ws,wt |
MSA |
Vector Minimum Based on Absolute Value |
Vector Minimum Based on Absolute Value
Vector and vector minimum based on the absolute values.
wd[i] = absolute_value(ws[i]) < absolute_value(wt[i])? ws[i]: wt[i]
The value with the smallest magnitude, i.e. absolute value, between corresponding signed elements in vector ws and vector wt are written to vector wd.
The minimum negative value representable has the largest absolute value.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MIN_A.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = min_a(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MIN_A.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = min_a(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MIN_A.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = min_a(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MIN_A.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = min_a(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function min_a(ts, tt, n)
t = 0 || abs(tt, n)
s = 0 || abs(ts, n)
if t > s then
return ts
else
return tt
endif
endfunction min_a
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
100 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MIN_S.df |
Vector Signed Minimum | |
MIN_S.B wd,ws,wt |
MSA |
Vector Signed Minimum |
MIN_S.H wd,ws,wt |
MSA |
Vector Signed Minimum |
MIN_S.W wd,ws,wt |
MSA |
Vector Signed Minimum |
MIN_S.D wd,ws,wt |
MSA |
Vector Signed Minimum |
Vector Signed Minimum
Vector and vector signed minimum.
wd[i] = min(ws[i], wt[i])
Minimum values between signed elements in vector wt and signed elements in vector ws are written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MIN_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = min_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MIN_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = min_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MIN_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = min_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MIN_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = min_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function min_s(ts, tt, n)
t = ttn-1 || tt
s = tsn-1 || ts
if t > s then
return ts
else
return tt
endif
endfunction min_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
101 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MIN_U.df |
Vector Unsigned Minimum | |
MIN_U.B wd,ws,wt |
MSA |
Vector Unsigned Minimum |
MIN_U.H wd,ws,wt |
MSA |
Vector Unsigned Minimum |
MIN_U.W wd,ws,wt |
MSA |
Vector Unsigned Minimum |
MIN_U.D wd,ws,wt |
MSA |
Vector Unsigned Minimum |
Vector Unsigned Minimum
Vector and vector unsigned minimum.
wd[i] = min(ws[i], wt[i])
in vector wt and unsigne d elements in vector ws are w ritten
Minimum values between unsigned elements to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MIN_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = min_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
MIN_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = min_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MIN_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = min_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
MIN_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = min_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function min_u(ts, tt, n)
t = 0 || tt
s = 0 || ts
if t > s then
return ts
else
return tt
endif
endfunction min_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
110 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MOD_S.df |
Vector Signed Modulo | |
MOD_S.B wd,ws,wt |
MSA |
Vector Signed Modulo |
MOD_S.H wd,ws,wt |
MSA |
Vector Signed Modulo |
MOD_S.W wd,ws,wt |
MSA |
Vector Signed Modulo |
MOD_S.D wd,ws,wt |
MSA |
Vector Signed Modulo |
Vector Signed Modulo
Vector signed remainder (modulo).
wd[i] = ws[i] mod wt[i]
The signed integer elements in vector ws are divided by signed integer elements in vector wt. The remainder of the same sign as the dividend is written to vector wd. If a divisor element vector wt is zero, the result value is UNPREDICTABLE.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MOD_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i mod WR[wt]8i+7..8i
endfor
MOD_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i mod WR[wt]16i+15..16i
endfor
MOD_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i mod WR[wt]32i+31..32i
endfor
MOD_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i mod WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
111 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MOD_U.df |
Vector Unsigned Modulo | |
MOD_U.B wd,ws,wt |
MSA |
Vector Unsigned Modulo |
MOD_U.H wd,ws,wt |
MSA |
Vector Unsigned Modulo |
MOD_U.W wd,ws,wt |
MSA |
Vector Unsigned Modulo |
MOD_U.D wd,ws,wt |
MSA |
Vector Unsigned Modulo |
Vector Unsigned Modulo
Vector unsigned remainder (modulo).
wd[i] = ws[i] umod wt[i]
The unsigned integer elements in vector ws are divided by unsigned integer elements in vector wt. The remainder is written to vector wd. If a divisor element vector wt is zero, the result value is UNPREDICTABLE.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MOD_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i umod WR[wt]8i+7..8i
endfor
MOD_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i umod WR[wt]16i+15..16i
endfor
MOD_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i umod WR[wt]32i+31..32i
endfor
MOD_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i umod WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0010111110 |
ws |
wd |
ELM 011001 |
|
6 |
10 |
5 |
5 |
6 |
MOVE.V |
Vector Move | |
MOVE.V wd,ws |
MSA |
Vector Move |
Vector Move
Vector to vector move.
wd = ws
Copy all WRLEN bits in vector ws to vector wd.
The operand and result are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = WR[ws]
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
1110 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MSUBR_Q.df |
Vector Fixed-Point Multiply and Subtract Rounded | |
MSUBR_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Subtract Rounded |
MSUBR_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Subtract Rounded |
Vector Fixed-Point Multiply and Subtract Rounded
Vector fixed-point multiply and subtract rounded.
wd[i] = saturate(round(wd[i] - ws[i] * wt[i]))
The products of fixed-point elements in vector wt by fixed-point elements in vector ws are subtracted from the fixedpoint elements in vector wd. The multiplication result is not saturated, i.e. exact (-1) * (-1) = 1 is subtracted from the destination. The rounded and saturated fixed-point results are stored back to wd.
Internally, the multiplication, subtraction, and rounding operate on data double the size of df. Truncation to fixedpoint data format df is performed at the very last stage, after saturation.
The rounding is done by adding 1 to the most significant bit that is going to be discarded at truncation.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MSUBR_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
q_msubr(WR[wd]16i+15..16i, WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MSUBR_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
q_msubr(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function q_msubr(td, ts, tt, n)
p = mulx_s(ts, tt, n)
d = (tdn-1 || tdn-1..0 || 0n-1) - p2n-1..0
d = d + (1 || 0n-2)
d = sat_s(d2n-1..n-1, n+1, n)
return dn-1..0
endfunction q_msubr
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MSUBV.df |
Vector Multiply and Subtract | |
MSUBV.B wd,ws,wt |
MSA |
Vector Multiply and Subtract |
MSUBV.H wd,ws,wt |
MSA |
Vector Multiply and Subtract |
MSUBV.W wd,ws,wt |
MSA |
Vector Multiply and Subtract |
MSUBV.D wd,ws,wt |
MSA |
Vector Multiply and Subtract |
Vector Multiply and Subtract
Vector multiply and subtract.
wd[i] = wd[i] - ws[i] * wt[i]
The integer elements in vector wt are multiplied by integer elements in vector ws and subtracted from the integer elements in vector wd. The most significant half of the multiplication result is discarded.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MSUBV.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i =
WR[wd]8i+7..8i - WR[ws]8i+7..8i * WR[wt]8i+7..8i
endfor
MSUBV.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
WR[wd]16i+15..16i - WR[ws]16i+15..16i * WR[wt]16i+15..16i
endfor
MSUBV.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
WR[wd]32i+31..32i - WR[ws]32i+31..32i * WR[wt]32i+31..32i
endfor
MSUBV.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i =
WR[wd]64i+63..64i - WR[ws]64i+63..64i * WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0110 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MSUB_Q.df |
Vector Fixed-Point Multiply and Subtract | |
MSUB_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Subtract |
MSUB_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply and Subtract |
Vector Fixed-Point Multiply and Subtract
Vector fixed-point multiply and subtract.
wd[i] = saturate(wd[i] - ws[i] * wt[i])
The product of fixed-point elements in vector wt by fixed-point elements in vector ws are subtracted from the fixedpoint elements in vector wd. The multiplication result is not saturated, i.e. exact (-1) * (-1) = 1 is subtracted from the destination. The saturated fixed-point results are stored back to wd.
Internally, the multiplication and subtraction operate on data double the size of df. Truncation to fixed-point data format df is performed at the very last stage, after saturation.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MSUB_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i =
q_msub(WR[wd]16i+15..16i, WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MSUB_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i =
q_msub(WR[wd]32i+31..32i, WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function q_msub(td, ts, tt, n)
p = mulx_s(ts, tt, n)
d = (tdn-1 || tdn-1..0 || 0n-1) - p2n-1..0
d = sat_s(d2n-1..n-1, n+1, n)
return dn-1..0
endfunction q_msub
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
1100 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MULR_Q.df |
Vector Fixed-Point Multiply Rounded | |
MULR_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply Rounded |
MULR_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply Rounded |
Vector Fixed-Point Multiply Rounded
Vector fixed-point multiply rounded.
wd[i] = round(ws[i] * wt[i])
The fixed-point elements in vector wt multiplied by fixed-point elements in vector ws. The rounded result is written to vector wd.
Fixed-point multiplication for 16-bit Q15 and 32-bit Q31 is a regular signed multiplication followed by one bit shift left with saturation. Only the most significant half of the result is preserved.
The rounding is done by adding 1 to the most significant bit that is going to be discarded prior to shifting left the full multiplication result.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MULR_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = q_mulr(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MULR_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = q_mulr(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function q_mulr(ts, tt, n)
if ts = 1 || 0n-1 and tt = 1 || 0n-1 then
return 0 || 1n-1
else
p = mulx_s(ts, tt, n)
p = p + (1 || 0n-2)
return p2n-2..n-1
endfunction q_mulr
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 010010 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
MULV.df |
Vector Multiply | |
MULV.B wd,ws,wt |
MSA |
Vector Multiply |
MULV.H wd,ws,wt |
MSA |
Vector Multiply |
MULV.W wd,ws,wt |
MSA |
Vector Multiply |
MULV.D wd,ws,wt |
MSA |
Vector Multiply |
Vector Multiply
Vector multiply.
wd[i] = ws[i] * wt[i]
The integer elements in vector wt are multiplied by integer elements in vector ws. The result is written to vector wd.
The most significant half of the multiplication result is discarded.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
MULV.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i * WR[wt]8i+7..8i
endfor
MULV.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i * WR[wt]16i+15..16i
endfor
MULV.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i * WR[wt]32i+31..32i
endfor
MULV.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i * WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0100 |
df |
wt |
ws |
wd |
3RF 011100 |
|
6 |
4 |
1 |
5 |
5 |
5 |
6 |
MUL_Q.df |
Vector Fixed-Point Multiply | |
MUL_Q.H wd,ws,wt |
MSA |
Vector Fixed-Point Multiply |
MUL_Q.W wd,ws,wt |
MSA |
Vector Fixed-Point Multiply |
Vector Fixed-Point Multiply
Vector fixed-point multiplication.
wd[i] = ws[i] * wt[i]
The fixed-point elements in vector wt multiplied by f ixed-point elements in vector ws. The result is written to vector wd.
Fixed-point multiplication for 16-bit Q15 and 32-bit Q31 is a regular signed multiplication followed by one bit shift left with saturation. Only the most significant half of the result is preserved.
The operands and results are values in fixed-point data format df.
No data-dependent exceptions are possible.
MUL_Q.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = q_mul(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
MUL_Q.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = q_mul(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
function mulx_s(ts, tt, n)
s = (tsn-1)n || tsn-1..0
t = (ttn-1)n || ttn-1..0
p = s * t
return p2n-1..0
endfunction mulx_s
function q_mul(ts, tt, n)
if ts = 1 || 0n-1 and tt = 1 || 0n-1 then
return 0 || 1n-1
else
p = mulx_s(ts, tt, n)
return p2n-2..n-1
endif
endfunction q_mul
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
11000010 |
df |
ws |
wd |
2R 011110 |
|
6 |
8 |
2 |
5 |
5 |
6 |
NLOC.df |
Vector Leading Ones Count | |
NLOC.B wd,ws |
MSA |
Vector Leading Ones Count |
NLOC.H wd,ws |
MSA |
Vector Leading Ones Count |
NLOC.W wd,ws |
MSA |
Vector Leading Ones Count |
NLOC.D wd,ws |
MSA |
Vector Leading Ones Count |
Vector Leading Ones Count
Vector element count of leading bits set to 1.
wd[i] = leading_one_count(ws[i])
The number of leading ones for elements in vector ws is stored to the elements in vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
NLOC.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = leading_one_count(WR[ws]8i+7..8i, 8)
endfor
NLOC.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = leading_one_count(WR[ws]16i+15..16i, 16)
endfor
NLOC.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = leading_one_count(WR[ws]32i+31..32i, 32)
endfor
NLOC.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = leading_one_count(WR[ws]64i+63..64i, 64)
endfor
function leading_one_count(tt, n)
z = 0
for i in n-1..0
if tti = 0 then
return z
else
z = z + 1
endif
endfunction leading_one_count
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
11000011 |
df |
ws |
wd |
2R 011110 |
|
6 |
8 |
2 |
5 |
5 |
6 |
NLZC.df |
Vector Leading Zeros Count | |
NLZC.B wd,ws |
MSA |
Vector Leading Zeros Count |
NLZC.H wd,ws |
MSA |
Vector Leading Zeros Count |
NLZC.W wd,ws |
MSA |
Vector Leading Zeros Count |
NLZC.D wd,ws |
MSA |
Vector Leading Zeros Count |
Vector Leading Zeros Count
Vector element count of leading bits set to 0.
wd[i] = leading_zero_count(ws[i])
The number of leading zeroes for elements in vector ws is stored to the elements in vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
NLZC.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = leading_zero_count(WR[ws]8i+7..8i, 8)
endfor
NLZC.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = leading_zero_count(WR[ws]16i+15..16i, 16)
endfor
NLZC.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = leading_zero_count(WR[ws]32i+31..32i, 32)
endfor
NLZC.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = leading_zero_count(WR[ws]64i+63..64i, 64)
endfor
function leading_zero_count(tt, n)
z = 0
for i in n-1..0
if tti = 1 then
return z
else
z = z + 1
endif
endfunction leading_zero_count
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00010 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
NOR.V |
Vector Logical Negated Or | |
NOR.V wd,ws,wt |
MSA |
Vector Logical Negated Or |
Vector Logical Negated Or
Vector by vector logical negated or.
wd = ws NOR wt
Each bit of vector ws is combined with the corresponding bit of vector wt in a bi twise logical NOR operation. The result is written to vector wd.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = WR[ws] nor WR[wt]
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
10 |
i8 |
ws |
wd |
I8 000000 |
|
6 |
2 |
8 |
5 |
5 |
6 |
NORI.B |
Immediate Logical Negated Or | |
NORI.B wd,ws,i8 |
MSA |
Immediate Logical Negated Or |
Immediate Logical Negated Or
Immediate by vector logical negated or.
wd[i] = ws[i] NOR i8
Each byte element of vector ws is combined with the 8-bit immediate i8 in a bitwis e logical NOR operation. The result is written to vector wd.
The operands and results are values in integer byte data format.
No data-dependent exceptions are possible.
for i in 0 .. WRLEN/8-1 WR[wd]8i+7..8i = WR[ws]8i+7..8i nor i87..0 endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00001 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
OR.V |
Vector Logical Or | |
OR.V wd,ws,wt |
MSA |
Vector Logical Or |
Vector Logical Or
Vector by vector logical or.
wd = ws OR wt
Each bit of vector ws is combined with the corresponding bit of vector wt in a bit wise logical OR operation. The result is written to vector wd.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = WR[ws] or WR[wt]
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
01 |
i8 |
ws |
wd |
I8 000000 |
|
6 |
2 |
8 |
5 |
5 |
6 |
ORI.B |
Immediate Logical Or | |
ORI.B wd,ws,i8 |
MSA |
Immediate Logical Or |
Immediate Logical Or
Immediate by vector logical or.
wd[i] = ws[i] OR i8
Each byte element of vector ws is combined with the 8-bit immediate i8 in a bitwise logical OR operation. The result is written to vector wd.
The operands and results are values in integer byte data format.
No data-dependent exceptions are possible.
for i in 0 .. WRLEN/8-1 WR[wd]8i+7..8i = WR[ws]8i+7..8i or i87..0 endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
PCKEV.df |
Vector Pack Even | |
PCKEV.B wd,ws,wt |
MSA |
Vector Pack Even |
PCKEV.H wd,ws,wt |
MSA |
Vector Pack Even |
PCKEV.W wd,ws,wt |
MSA |
Vector Pack Even |
PCKEV.D wd,ws,wt |
MSA |
Vector Pack Even |
Vector Pack Even
Vector even elements copy.
left_half(wd)[i] = ws[2i]; right_half(wd)[i] = wt[2i]
Even elements in vector ws are copied to the left half of vector wd and even elements in vector wt are copied to the right half of vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
PCKEV.B
for i in 0 .. WRLEN/16-1
j = 2 * i
WR[wd]8i+7+WRLEN/2..8i+WRLEN/2 = WR[ws]8j+7..8j
WR[wd]8i+7..8i = WR[wt]8j+7..8j
endfor
PCKEV.H
for i in 0 .. WRLEN/32-1
j = 2 * i
WR[wd]16i+15+WRLEN/2..16j+WRLEN/2 = WR[ws]16j+15..16j
WR[wd]16i+15..16i = WR[wt]16j+15..16j
endfor
PCKEV.W
for i in 0 .. WRLEN/64-1
j = 2 * i
WR[wd]32i+31+WRLEN/2..32j+WRLEN/2 = WR[ws]32j+31..32j
WR[wd]32i+31..32i = WR[wt]32j+31..32j
endfor
PCKEV.D
for i in 0 .. WRLEN/128-1
j = 2 * i
WR[wd]64i+63+WRLEN/2..64j+WRLEN/2 = WR[ws]64j+63..64j
WR[wd]64i+63..64i = WR[wt]64j+63..64j
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
PCKOD.df |
Vector Pack Odd | |
PCKOD.B wd,ws,wt |
MSA |
Vector Pack Odd |
PCKOD.H wd,ws,wt |
MSA |
Vector Pack Odd |
PCKOD.W wd,ws,wt |
MSA |
Vector Pack Odd |
PCKOD.D wd,ws,wt |
MSA |
Vector Pack Odd |
Vector Pack Odd
Vector odd elements copy.
left_half(wd)[i] = ws[2i+1]; right_half(wd)[i] = wt[2i+1]
Odd elements in vector ws are copied to the left half of vector wd and odd elements in vector wt are copied to the right half of vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
PCKOD.B
for i in 0 .. WRLEN/16-1
k = 2 * i + 1
WR[wd]8i+7+WRLEN/2..8i+WRLEN/2 = WR[ws]8k+7..8k
WR[wd]8i+7..8i = WR[wt]8k+7..8k
endfor
PCKOD.H
for i in 0 .. WRLEN/32-1
k = 2 * i + 1
WR[wd]16i+15+WRLEN/2..16i+WRLEN/2 = WR[ws]16k+15..16k
WR[wd]16i+15..16i = WR[wt]16k+15..16k
endfor
PCKOD.W
for i in 0 .. WRLEN/64-1
k = 2 * i + 1
WR[wd]32i+31+WRLEN/2..32i+WRLEN/2 = WR[ws]32k+31..32k
WR[wd]32i+31..32i = WR[wt]32k+31..32k
endfor
PCKOD.D
for i in 0 .. WRLEN/128-1
k = 2 * i + 1
WR[wd]64i+63+WRLEN/2..64i+WRLEN/2 = WR[ws]64k+63..64k
WR[wd]64i+63..64i = WR[wt]64k+63..64k
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
11000001 |
df |
ws |
wd |
2R 011110 |
|
6 |
8 |
2 |
5 |
5 |
6 |
PCNT.df |
Vector Population Count | |
PCNT.B wd,ws |
MSA |
Vector Population Count |
PCNT.H wd,ws |
MSA |
Vector Population Count |
PCNT.W wd,ws |
MSA |
Vector Population Count |
PCNT.D wd,ws |
MSA |
Vector Population Count |
Vector Population Count
Vector element count of all bits set to 1.
wd[i] = population_count(ws[i])
The number of bits set to 1 for elements in vector ws is stored to the elements in vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
PCNT.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = population_count(WR[ws]8i+7..8i, 8)
endfor
PCNT.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = population_count(WR[ws]16i+15..16i, 16)
endfor
PCNT.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = population_count(WR[ws]32i+31..32i, 32)
endfor
PCNT.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = population_count(WR[ws]64i+63..64i, 64)
endfor
function population_count(tt, n)
z = 0
for i in n-1..0
if tti = 1 then
z = z + 1
endif
endfunction population_count
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df/m |
ws |
wd |
BIT 001010 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SAT_S.df |
Immediate Signed Saturate | |
SAT_S.B wd,ws,m |
MSA |
Immediate Signed Saturate |
SAT_S.H wd,ws,m |
MSA |
Immediate Signed Saturate |
SAT_S.W wd,ws,m |
MSA |
Immediate Signed Saturate |
SAT_S.D wd,ws,m |
MSA |
Immediate Signed Saturate |
Immediate Signed Saturate
Immediate selected bit width saturation of signed values.
wd[i] = saturate_signed(ws[i], m+1)
Signed elements in vector ws are saturated to signed values of m+1 bits without changing the data width. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SAT_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = sat_s(WR[ws]8i+7..8i, 8, m+1)
endfor
SAT_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = sat_s(WR[ws]16i+15..16i, 16, m+1)
endfor
SAT_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = sat_s(WR[ws]32i+31..32i, 32, m+1)
endfor
SAT_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = sat_s(WR[ws]64i+63..64i, 64, m+1)
endfor
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df/m |
ws |
wd |
BIT 001010 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SAT_U.df |
Immediate Unsigned Saturate | |
SAT_U.B wd,ws,m |
MSA |
Immediate Unsigned Saturate |
SAT_U.H wd,ws,m |
MSA |
Immediate Unsigned Saturate |
SAT_U.W wd,ws,m |
MSA |
Immediate Unsigned Saturate |
SAT_U.D wd,ws,m |
MSA |
Immediate Unsigned Saturate |
Immediate Unsigned Saturate
Immediate selected bit width saturation of unsigned values.
wd[i] = saturate_unsigned(ws[i], m+1)
Unsigned elements in vector ws are saturated to unsigned values of m+1 bits without changing the data width. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SAT_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = sat_u(WR[ws]8i+7..8i, 8, m+1)
endfor
SAT_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = sat_u(WR[ws]16i+15..16i, 16, m+1)
endfor
SAT_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = sat_u(WR[ws]32i+31..32i, 32, m+1)
endfor
SAT_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = sat_u(WR[ws]64i+63..64i, 64, m+1)
endfor
function sat_u(tt, n, b)
if ttn-1..b != 0n-b then
return 0n-b || 1b
else
return tt
endif
endfunction sat_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
df |
i8 |
ws |
wd |
I8 000010 |
|
6 |
2 |
8 |
5 |
5 |
6 |
SHF.df |
Immediate Set Shuffle Elements | |
SHF.B wd,ws,i8 |
MSA |
Immediate Set Shuffle Elements |
SHF.H wd,ws,i8 |
MSA |
Immediate Set Shuffle Elements |
SHF.W wd,ws,i8 |
MSA |
Immediate Set Shuffle Elements |
Immediate Set Shuffle Elements
Immediate control value-based 4 element set copy
wd[i] = shuffle_set(ws, i, i8)
The set shuffle instruction works on 4-element sets in df data format. All sets are shuf fled in the same w ay: the element i82i+1..2i in ws is copied over the element i in wd, where i is 0, 1, 2, 3.
The operands and results are values in byte data format.
No data-dependent exceptions are possible.
SHF.B
for i in 0 .. WRLEN/8-1
j = i % 4
k = i - j + i82j+1..2j
WR[wd]8i+7..8i = WR[ws]8k+7..8k
endfor
SHF.H
for i in 0 .. WRLEN/16-1
j = i % 4
k = i - j + i82j+1..2j
WR[wd]16i+15..16i = WR[ws]16k+15..16k
endfor
SHF.W
for i in 0 .. WRLEN/32-1
j = i % 4
k = i - j + i82j+1..2j
WR[wd]32i+31..32i = WR[ws]32k+31..32k
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
rt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SLD.df |
GPR Columns Slide | |
SLD.B wd,ws[rt] |
MSA |
GPR Columns Slide |
SLD.H wd,ws[rt] |
MSA |
GPR Columns Slide |
SLD.W wd,ws[rt] |
MSA |
GPR Columns Slide |
SLD.D wd,ws[rt] |
MSA |
GPR Columns Slide |
GPR Columns Slide
GPR number of columns to slide left source array.
wd[i] = slide(wd, ws, rt)
Vector registers wd and ws contain 2-dimensional byte arrays (rectangles) stored row-wise, with as many rows as bytes in integer data format df.
The slide instructions manipulate the content of vector registers wd and ws as byte elements, with data format df indicating the 2-dimensional byte array layout.
The two source rectangles wd and ws are concatenated horizontally in the order they appear in the syntax, i.e. first wd and then ws. Place a new destination rectangle over ws and then slide it to the left over the concatenation of wd and ws by the number of columns given in GPR rt. The result is written to vector wd.
GPR rt value is interpreted modulo the number of columns in destination rectangle, or equivalently, the number of data format df elements in the destination vector.
No data-dependent exceptions are possible.
SLD.B
n = GPR[rt] % (WRLEN/8)
v = WR[wd] || WR[ws]
for i in 0 .. WRLEN/8-1
j = i + n
WR[wd]8i+7..8i = v8j+7..8j
endfor
SLD.H
n = GPR[rt] % (WRLEN/16)
s = WRLEN/2
for k in 0, 1
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
SLD.W
n = GPR[rt] % (WRLEN/32)
s = WRLEN/4
for k in 0, .., 3
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
SLD.D
n = GPR[rt] % (WRLEN/64)
s = WRLEN/8
for k in 0, .., 7
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0000 |
df/n |
ws |
wd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
SLDI.df |
Immediate Columns Slide | |
SLDI.B wd,ws[n] |
MSA |
Immediate Columns Slide |
SLDI.H wd,ws[n] |
MSA |
Immediate Columns Slide |
SLDI.W wd,ws[n] |
MSA |
Immediate Columns Slide |
SLDI.D wd,ws[n] |
MSA |
Immediate Columns Slide |
Immediate Columns Slide
Immediate number of columns to slide left source array.
wd[i] = slide(wd, ws, n)
Vector registers wd and ws contain 2-dimensional byte arrays (rectangles) stored row-wise, with as many rows as bytes in integer data format df.
The slide instructions manipulate the content of vector registers wd and ws as byte elements, with data format df indicating the 2-dimensional byte array layout.
The two source rectangles wd and ws are concatenated horizontally in the order they appear in the syntax, i.e. first wd and then ws. Place a new destination rectangle over ws and then slide it to the left over the concatenation of wd and ws by n columns. The result is written to vector wd.
No data-dependent exceptions are possible.
SLDI.B
v = WR[wd] || WR[ws]
for i in 0 .. WRLEN/8-1
j = i + n
WR[wd]8i+7..8i = v8j+7..8j
endfor
SLDI.H
s = WRLEN/2
for k in 0, 1
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
SLDI.W
s = WRLEN/4
for k in 0, .., 3
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
SLDI.D
s = WRLEN/8
for k in 0, .., 7
t = s * k
v = (WR[wd]t+s-1..t || WR[ws]t+s-1..t)
for i in 0 .. s/8-1
j = i + n
WR[wd]t+8i+7..t+8i = v8j+7..8j
endfor
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SLL.df |
Vector Shift Left | |
SLL.B wd,ws,wt |
MSA |
Vector Shift Left |
SLL.H wd,ws,wt |
MSA |
Vector Shift Left |
SLL.W wd,ws,wt |
MSA |
Vector Shift Left |
SLL.D wd,ws,wt |
MSA |
Vector Shift Left |
Vector Shift Left
Vector bit count shift left.
wd[i] = ws[i] << wt[i]
The elements in vector ws are shifted left by the number of bits the elements in vector wt specify modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SLL.B
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = WR[ws]8i+8-t-1..8i || 0t
endfor
SLL.H
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = WR[ws]16i+16-t-1..16i || 0t
endfor
SLL.W
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = WR[ws]32i+32-t-1..32i || 0t
endfor
SLL.D
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = WR[ws]64i+64-t-1..64i || 0t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SLLI.df |
Immediate Shift Left | |
SLLI.B wd,ws,m |
MSA |
Immediate Shift Left |
SLLI.H wd,ws,m |
MSA |
Immediate Shift Left |
SLLI.W wd,ws,m |
MSA |
Immediate Shift Left |
SLLI.D wd,ws,m |
MSA |
Immediate Shift Left |
Immediate Shift Left
Immediate bit count shift left.
wd[i] = ws[i] << m
The elements in vector ws are shifted left by m bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SLLI.B
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+8-t-1..8i || 0t
endfor
SLLI.H
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+16-t-1..16i || 0t
endfor
SLLI.W
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+32-t-1..32i || 0t
endfor
SLLI.D
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+64-t-1..64i || 0t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
rt |
ws |
wd |
3R 010100 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SPLAT.df |
GPR Element Splat | |
SPLAT.B wd,ws[rt] |
MSA |
GPR Element Splat |
SPLAT.H wd,ws[rt] |
MSA |
GPR Element Splat |
SPLAT.W wd,ws[rt] |
MSA |
GPR Element Splat |
SPLAT.D wd,ws[rt] |
MSA |
GPR Element Splat |
GPR Element Splat
GPR selected element replicated in all destination elements.
wd[i] = ws[rt]
Replicate vector ws element with index given by GPR rt to all elements in vector wd.
GPR rt value is interpreted modulo the number of data format df elements in the destination vector.
The operands and results are values in data format df.
No data-dependent exceptions are possible.
SPLAT.B
n = GPR[rt] % (WRLEN/8)
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8n+7..8n
endfor
SPLAT.H
n = GPR[rt] % (WRLEN/16)
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16n+15..16n
endfor
SPLAT.W
n = GPR[rt] % (WRLEN/32)
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32n+31..32n
endfor
SPLAT.D
n = GPR[rt] % (WRLEN/64)
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64n+63..64n
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
0001 |
df/n |
ws |
wd |
ELM 011001 |
|
6 |
4 |
6 |
5 |
5 |
6 |
SPLATI.df |
Immediate Element Splat | |
SPLATI.B wd,ws[n] |
MSA |
Immediate Element Splat |
SPLATI.H wd,ws[n] |
MSA |
Immediate Element Splat |
SPLATI.W wd,ws[n] |
MSA |
Immediate Element Splat |
SPLATI.D wd,ws[n] |
MSA |
Immediate Element Splat |
Immediate Element Splat
Immediate selected element replicated in all destination elements.
wd[i] = ws[n]
Replicate element n in vector ws to all elements in vector wd.
The operands and results are values in data format df.
No data-dependent exceptions are possible.
SPLATI.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8n+7..8n
endfor
SPLATI.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16n+15..16n
endfor
SPLATI.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32n+31..32n
endfor
SPLATI.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64n+63..64n
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SRA.df |
Vector Shift Right Arithmetic | |
SRA.B wd,ws,wt |
MSA |
Vector Shift Right Arithmetic |
SRA.H wd,ws,wt |
MSA |
Vector Shift Right Arithmetic |
SRA.W wd,ws,wt |
MSA |
Vector Shift Right Arithmetic |
SRA.D wd,ws,wt |
MSA |
Vector Shift Right Arithmetic |
Vector Shift Right Arithmetic
Vector bit count shift right arithmetic.
wd[i] = ws[i] >> wt[i]
The elements in vector ws are shifted right arithmetic by the number of bits the elements in vector wt specify modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRA.B
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = (WR[ws]8i+7)t || WR[ws]8i+7..8i+t
endfor
SRA.H
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = (WR[ws]16i+15)t || WR[ws]16i+15..16i+t
endfor
SRA.W
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = (WR[ws]32i+31)t || WR[ws]32i+31..32i+t
endfor
SRA.D
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = (WR[ws]64i+63)t || WR[ws]64i+63..64i+t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SRAI.df |
Immediate Shift Right Arithmetic | |
SRAI.B wd,ws,m |
MSA |
Immediate Shift Right Arithmetic |
SRAI.H wd,ws,m |
MSA |
Immediate Shift Right Arithmetic |
SRAI.W wd,ws,m |
MSA |
Immediate Shift Right Arithmetic |
SRAI.D wd,ws,m |
MSA |
Immediate Shift Right Arithmetic |
Immediate Shift Right Arithmetic
Immediate bit count shift right arithmetic.
wd[i] = ws[i] >> m
The elements in vector ws are shifted right arithmetic by m bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRAI.B
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = (WR[ws]8i+7)t || WR[ws]8i+7..8i+t
endfor
SRAI.H
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = (WR[ws]16i+15)t || WR[ws]16i+15..16i+t
endfor
SRAI.W
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = (WR[ws]32i+31)t || WR[ws]32i+31..32i+t
endfor
SRAI.D
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = (WR[ws]64i+63)t || WR[ws]64i+63..64i+t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SRAR.df |
Vector Shift Right Arithmetic Rounded | |
SRAR.B wd,ws,wt |
MSA |
Vector Shift Right Arithmetic Rounded |
SRAR.H wd,ws,wt |
MSA |
Vector Shift Right Arithmetic Rounded |
SRAR.W wd,ws,wt |
MSA |
Vector Shift Right Arithmetic Rounded |
SRAR.D wd,ws,wt |
MSA |
Vector Shift Right Arithmetic Rounded |
Vector Shift Right Arithmetic Rounded
Vector bit count shift right arithmetic with rounding
wd[i] = ws[i] >>(rounded) wt[i]
The elements in vector ws are shifted right arithmetic by the number of bits the elements in vector wt specify modulo the size of the element in bits. The most significant discarded bit is added to the shifted value (for rounding) and the result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRAR.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = srar(WR[ws]8i+7..8i, WR[wt]8i+2..8i, 8)
endfor
SRAR.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = srar(WR[ws]16i+15..16i, WR[wt]16i+3..16i, 16)
endfor
SRAR.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = srar(WR[ws]32i+31..32i, WR[wt]32i+4..32i, 32)
endfor
SRAR.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = srar(WR[ws]64i+63..64i, WR[wt]64i+5..64i, 64)
endfor
function srar(ts, n, b)
if n = 0 then
return ts
else
return ((tsb-1)n || tsb-1..n) + tsn-1
endif
endfunction srar
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df/m |
ws |
wd |
BIT 001010 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SRARI.df |
Immediate Shift Right Arithmetic Rounded | |
SRARI.B wd,ws,m |
MSA |
Immediate Shift Right Arithmetic Rounded |
SRARI.H wd,ws,m |
MSA |
Immediate Shift Right Arithmetic Rounded |
SRARI.W wd,ws,m |
MSA |
Immediate Shift Right Arithmetic Rounded |
SRARI.D wd,ws,m |
MSA |
Immediate Shift Right Arithmetic Rounded |
Immediate Shift Right Arithmetic Rounded
Immediate bit count shift right arithmetic with rounding
wd[i] = ws[i] >>(rounded) m
The elements in v ector ws are shifted right arithmetic by m bits. The most significant discarded bit is added to the shifted value (for rounding) and the result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRARI.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = srar(WR[ws]8i+7..8i, m, 8)
endfor
SRARI.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = srar(WR[ws]16i+15..16i, m, 16)
endfor
SRARI.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = srar(WR[ws]32i+31..32i, m, 32)
endfor
SRARI.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = srar(WR[ws]64i+63..64i, m, 64)
endfor
function srar(ts, n, b)
if n = 0 then
return ts
else
return ((tsb-1)n || tsb-1..n) + tsn-1
endif
endfunction srar
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 001101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SRL.df |
Vector Shift Right Logical | |
SRL.B wd,ws,wt |
MSA |
Vector Shift Right Logical |
SRL.H wd,ws,wt |
MSA |
Vector Shift Right Logical |
SRL.W wd,ws,wt |
MSA |
Vector Shift Right Logical |
SRL.D wd,ws,wt |
MSA |
Vector Shift Right Logical |
Vector Shift Right Logical
Vector bit count shift right logical.
wd[i] = ws[i] >> wt[i]
The elements in vector ws are shifted right logical by the number of bits the elements in vector wt specify modulo the size of the element in bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRL.B
for i in 0 .. WRLEN/8-1
t = WR[wt]8i+2..8i
WR[wd]8i+7..8i = 0t || WR[ws]8i+7..8i+t
endfor
SRL.H
for i in 0 .. WRLEN/16-1
t = WR[wt]16i+3..16i
WR[wd]16i+15..16i = 0t || WR[ws]16i+15..16i+t
endfor
SRL.W
for i in 0 .. WRLEN/32-1
t = WR[wt]32i+4..32i
WR[wd]32i+31..32i = 0t || WR[ws]32i+31..32i+t
endfor
SRL.D
for i in 0 .. WRLEN/64-1
t = WR[wt]64i+5..64i
WR[wd]64i+63..64i = (WR[ws]64i+63)t || WR[ws]64i+63..64i+t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df/m |
ws |
wd |
BIT 001001 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SRLI.df |
Immediate Shift Right Logical | |
SRLI.B wd,ws,m |
MSA |
Immediate Shift Right Logical |
SRLI.H wd,ws,m |
MSA |
Immediate Shift Right Logical |
SRLI.W wd,ws,m |
MSA |
Immediate Shift Right Logical |
SRLI.D wd,ws,m |
MSA |
Immediate Shift Right Logical |
Immediate Shift Right Logical
Immediate bit count shift right logical.
wd[i] = ws[i] >> m
The elements in vector ws are shifted right logical by m bits. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRLI.B
t = m
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = 0t || WR[ws]8i+7..8i+t
endfor
SRLI.H
t = m
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = 0t || WR[ws]16i+15..16i+t
endfor
SRLI.W
t = m
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = 0t || WR[ws]32i+31..32i+t
endfor
SRLI.D
t = m
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = 0t || WR[ws]64i+63..64i+t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SRLR.df |
Vector Shift Right Logical Rounded | |
SRLR.B wd,ws,wt |
MSA |
Vector Shift Right Logical Rounded |
SRLR.H wd,ws,wt |
MSA |
Vector Shift Right Logical Rounded |
SRLR.W wd,ws,wt |
MSA |
Vector Shift Right Logical Rounded |
SRLR.D wd,ws,wt |
MSA |
Vector Shift Right Logical Rounded |
Vector Shift Right Logical Rounded
Vector bit count shift right logical with rounding
wd[i] = ws[i] >>(rounded) wt[i]
The elements in vector ws are shifted right logical by the number of bits the elements in vector wt specify modulo the size of the element in bits. The most significant discarded bit is added to the shifted value (for rounding) and the result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRLR.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = srlr(WR[ws]8i+7..8i, WR[wt]8i+2..8i, 8)
endfor
SRLR.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = srlr(WR[ws]16i+15..16i, WR[wt]16i+3..16i, 16)
endfor
SRLR.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = srlr(WR[ws]32i+31..32i, WR[wt]32i+4..32i, 32)
endfor
SRLR.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = srlr(WR[ws]64i+63..64i, WR[wt]64i+5..64i, 64)
endfor
function srlr(ts, n, b)
if n = 0 then
return ts
else
return (0n || tsb-1..n) + tsn-1
endif
endfunction srlr
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df/m |
ws |
wd |
BIT 001010 |
|
6 |
3 |
7 |
5 |
5 |
6 |
SRLRI.df |
Immediate Shift Right Logical Rounded | |
SRLRI.B wd,ws,m |
MSA |
Immediate Shift Right Logical Rounded |
SRLRI.H wd,ws,m |
MSA |
Immediate Shift Right Logical Rounded |
SRLRI.W wd,ws,m |
MSA |
Immediate Shift Right Logical Rounded |
SRLRI.D wd,ws,m |
MSA |
Immediate Shift Right Logical Rounded |
Immediate Shift Right Logical Rounded
Immediate bit count shift right logical with rounding
wd[i] = ws[i] >>(rounded) m
The elements in vector ws are shifted right logical by m bits. The most significant discarded bit is added to the shifted value (for rounding) and the result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SRLRI.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = srlr(WR[ws]8i+7..8i, m, 8)
endfor
SRLRI.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = srlr(WR[ws]16i+15..16i, m, 16)
endfor
SRLRI.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = srlr(WR[ws]32i+31..32i, m, 32)
endfor
SRLRI.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = srlr(WR[ws]64i+63..64i, m, 64)
endfor
function srlr(ts, n, b)
if n = 0 then
return ts
else
return (0n || tsb-1..n) + tsn-1
endif
endfunction srlr
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
s10 |
rs |
wd |
MI10 1001 |
df |
|
6 |
10 |
5 |
5 |
4 |
2 |
ST.df |
Vector Store | |
ST.B wd,s10(rs) |
MSA |
Vector Store |
ST.H wd,s10(rs) |
MSA |
Vector Store |
ST.W wd,s10(rs) |
MSA |
Vector Store |
ST.D wd,s10(rs) |
MSA |
Vector Store |
Vector Store
Vector store element-by-element to base register plus offset memory address.
memory[rs + s10 + i * sizeof(wd[i])] = wd[i]
The WRLEN / 8 bytes in vector wd are stored as elements of data format df at the effective memory location addressed by the base rs and the 10-bit signed immediate offset s10.
The s10 offset in data format df units is added to the base rs to form the effective memory location address. rs and the effective memory location address have no alignment restrictions.
If the effective memory location address is element aligned, the vector store instruction is atomic at the element level with no guaranteed ordering among elemen ts, i.e. each element store is an atomic operation issued in no particular order with respect to the element's vector position.
By convention, in the assembly language syntax all offsets are in bytes and have to be multiple of the size of the data format df. The assembler determines the s10 bitfield value dividing the byte offset by the size of the data format df.
Address-dependent exceptions are possible.
ST.B
a = rs + s10
StoreByteVector(WR[wd]WRLEN-1..0, a, WRLEN/8)
ST.H
a = rs + s10 * 2
StoreHalfwordVector(WR[wd]WRLEN-1..0, a, WRLEN/16)
ST.W
a = rs + s10 * 4
StoreWordVector(WR[wd]WRLEN-1..0, a, WRLEN/32)
ST.D
a = rs + s10 * 8
StoreDoublewordVector(WR[wd]WRLEN-1..0, a, WRLEN/64)
function StoreByteVector(tt, a, n)
/* Implementation defined store n byte vector tt to virtual
address a. */
endfunction StoreByteVector
function StoreHalfwordVector(tt, a, n)
/* Implementation defined store n halfword vector tt to virtual
address a. */
endfunction StoreHalfwordVector
function StoreWordVector(tt, a, n)
/* Implementation defined store n word vector tt to virtual
address a. */
endfunction StoreWordVector
function StoreDoublewordVector(tt, a, n)
/* Implementation defined store n doubleword vector tt to virtual
address a. */
endfunction StoreDoublewordVector
Reserved Instruction Exception, MSA Disabled Exception. Data access TLB and Address Error Exceptions.
|
MSA 011110 |
010 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBSUS_U.df |
Vector Unsigned Saturated Subtract of Signed from Unsigned | |
SUBSUS_U.B wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Signed from Unsigned |
SUBSUS_U.H wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Signed from Unsigned |
SUBSUS_U.W wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Signed from Unsigned |
SUBSUS_U.D wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Signed from Unsigned |
Vector Unsigned Saturated Subtract of Signed from Unsigned
Vector subtraction of signed values from unsigned values saturating the results as unsigned values.
wd[i] = saturate_unsigned(unsigned(ws[i]) - signed(wt[i]))
ector wt are subtracted from the unsigned elements in v ector ws. The signe d result is
The signed elements in v unsigned saturated and written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBSUS_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = subsus_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
SUBSUS_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = subsus_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
SUBSUS_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = subsus_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
SUBSUS_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = subsus_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_u(tt, n, b)
if ttn-1..b != 0n-b then
return 0n-b || 1b
else
return tt
endif
endfunction sat_u
function subsus_u(ts, tt, n)
t = (0 || ts) - (ttn-1 || tt)
if tn = 0
return sat_u(t, n+1, n)
else
return 0
endfunction subsus_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
011 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBSUU_S.df |
Vector Signed Saturated Subtract of Unsigned Values | |
SUBSUU_S.B wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Unsigned Values |
SUBSUU_S.H wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Unsigned Values |
SUBSUU_S.W wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Unsigned Values |
SUBSUU_S.D wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Unsigned Values |
Vector Signed Saturated Subtract of Unsigned Values
Vector subtraction from vector of unsigned values saturating the results as signed values.
wd[i] = saturate_signed(unsigned(ws[i]) - unsigned(wt[i]))
The unsigned elements in vector wt are subtracted from the unsigned elements in v ector ws. The si gned result is signed saturated and written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBSUU_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = subsuu_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
SUBSUU_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = subsuu_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
SUBSUU_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = subsuu_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
SUBSUU_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = subsuu_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function subsuu_s(ts, tt, n)
t = (0 || ts) - (0 || tt)
return sat_s(t, n+1, n)
endfunction subsuu_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBS_S.df |
Vector Signed Saturated Subtract of Signed Values | |
SUBS_S.B wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Signed Values |
SUBS_S.H wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Signed Values |
SUBS_S.W wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Signed Values |
SUBS_S.D wd,ws,wt |
MSA |
Vector Signed Saturated Subtract of Signed Values |
Vector Signed Saturated Subtract of Signed Values
Vector subtraction from vector saturating the result as signed value.
wd[i] = saturate_signed(signed(ws[i]) - signed(wt[i]))
The elements in vector wt are subtracted from the eleme nts in vector ws. Signed arithmetic is performed and o verflows clamp to the largest and/or smallest representable signed values before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBS_S.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = subs_s(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
SUBS_S.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = subs_s(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
SUBS_S.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = subs_s(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
SUBS_S.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = subs_s(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_s(tt, n, b)
if ttn-1 = 0 and ttn-1..b-1 != 0n-b+1 then
return 0n-b+1 || 1b-1
endif
if ttn-1 = 1 and ttn-1..b-1 != 1n-b+1 then
return 1n-b+1 || 0b-1
else
return tt
endif
endfunction sat_s
function subs_s(ts, tt, n)
t = (tsn-1 || ts) - (ttn-1 || tt)
return sat_s(t, n+1, n)
endfunction subs_s
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 010001 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBS_U.df |
Vector Unsigned Saturated Subtract of Unsigned Values | |
SUBS_U.B wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Unsigned Values |
SUBS_U.H wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Unsigned Values |
SUBS_U.W wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Unsigned Values |
SUBS_U.D wd,ws,wt |
MSA |
Vector Unsigned Saturated Subtract of Unsigned Values |
Vector Unsigned Saturated Subtract of Unsigned Values
Vector subtraction from vector saturating the result as unsigned value.
wd[i] = saturate_unsigned(unsigned(ws[i]) - unsigned(wt[i]))
The elements in vector wt are subtracted from the elements in vector ws. Unsigned arithmetic is performed and underflows clamp to 0 before writing the result to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBS_U.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = subs_u(WR[ws]8i+7..8i, WR[wt]8i+7..8i, 8)
endfor
SUBS_U.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = subs_u(WR[ws]16i+15..16i, WR[wt]16i+15..16i, 16)
endfor
SUBS_U.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = subs_u(WR[ws]32i+31..32i, WR[wt]32i+31..32i, 32)
endfor
SUBS_U.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = subs_u(WR[ws]64i+63..64i, WR[wt]64i+63..64i, 64)
endfor
function sat_u(tt, n, b)
if ttn-1..b != 0n-b then
return 0n-b || 1b
else
return tt
endif
endfunction sat_u
function subs_u(ts, tt, n)
t = (0 || ts) - (0 || tt)
if tn = 0
return sat_u(t, n+1, n)
else
return 0
endfunction subs_u
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
wt |
ws |
wd |
3R 001110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBV.df |
Vector Subtract | |
SUBV.B wd,ws,wt |
MSA |
Vector Subtract |
SUBV.H wd,ws,wt |
MSA |
Vector Subtract |
SUBV.W wd,ws,wt |
MSA |
Vector Subtract |
SUBV.D wd,ws,wt |
MSA |
Vector Subtract |
Vector Subtract
Vector subtraction from vector.
wd[i] = ws[i] - wt[i]
The elements in vector wt are subtracted from the elements in vector ws. The result is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBV.B
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i - WR[wt]8i+7..8i
endfor
SUBV.H
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i - WR[wt]16i+15..16i
endfor
SUBV.W
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i - WR[wt]32i+31..32i
endfor
SUBV.D
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i - WR[wt]64i+63..64i
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
001 |
df |
u5 |
ws |
wd |
I5 000110 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
SUBVI.df |
Immediate Subtract | |
SUBVI.B wd,ws,u5 |
MSA |
Immediate Subtract |
SUBVI.H wd,ws,u5 |
MSA |
Immediate Subtract |
SUBVI.W wd,ws,u5 |
MSA |
Immediate Subtract |
SUBVI.D wd,ws,u5 |
MSA |
Immediate Subtract |
Immediate Subtract
Immediate subtraction from vector.
wd[i] = ws[i] - u5
The 5-bit immediate unsigned value u5 is subtracted from the elements in v ector ws. The r esult is written to vector wd.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
SUBVI.B
t = 03 || u54..0
for i in 0 .. WRLEN/8-1
WR[wd]8i+7..8i = WR[ws]8i+7..8i - t
endfor
SUBVI.H
t = 011 || u54..0
for i in 0 .. WRLEN/16-1
WR[wd]16i+15..16i = WR[ws]16i+15..16i - t
endfor
SUBVI.W
t = 027 || u54..0
for i in 0 .. WRLEN/32-1
WR[wd]32i+31..32i = WR[ws]32i+31..32i - t
endfor
SUBVI.D
t = 059 || u54..0
for i in 0 .. WRLEN/64-1
WR[wd]64i+63..64i = WR[ws]64i+63..64i - t
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
000 |
df |
wt |
ws |
wd |
3R 010101 |
|
6 |
3 |
2 |
5 |
5 |
5 |
6 |
VSHF.df |
Vector Data Preserving Shuffle | |
VSHF.B wd,ws,wt |
MSA |
Vector Data Preserving Shuffle |
VSHF.H wd,ws,wt |
MSA |
Vector Data Preserving Shuffle |
VSHF.W wd,ws,wt |
MSA |
Vector Data Preserving Shuffle |
VSHF.D wd,ws,wt |
MSA |
Vector Data Preserving Shuffle |
Vector Data Preserving Shuffle
Vector elements selective copy based on the control vector preserving the input data vectors.
wd = vector_shuffle(control(wd), ws, wt)
concatenation of vectors ws and wt into
The vector shuffle instructions selectively copy data elements from the vector wd based on the corresponding control element in wd.
The least significant 6 bits in wd control elements modulo the number of elements in the concatenated vectors ws, wt specify the index of the source element. If bit 6 or bit 7 is 1, there will be no copy, but rather the destination element is set to 0.
The operands and results are values in integer data format df.
No data-dependent exceptions are possible.
VSHF.B
v = WR[ws] || WR[wt]
for i in 0 .. WRLEN/8-1
k = WR[wd]8i+5..8i mod (WRLEN/4)
if WR[wd]8i+7..8i+6 != 0 then
WR[wd]8i+7..8i = 0
else
WR[wd]8i+7..8i = v8k+7..8k
endif
endfor
VSHF.H
v = WR[ws] || WR[wt]
for i in 0 .. WRLEN/16-1
k = WR[wd]16i+5..16i mod (WRLEN/8)
if WR[wd]16i+7..16i+6 !=0 then
WR[wd]16i+15..16i = 0
else
WR[wd]16i+15..16i = v16k+15..16k
endif
endfor
VSHF.W
v = WR[ws] || WR[wt]
for i in 0 .. WRLEN/32-1
k = WR[wd]32i+5..32i mod (WRLEN/16)
if WR[wd]32i+7..32i+6 != 0 then
WR[wd]32i+31..32i = 0
else
WR[wd]32i+31..32i = v32k+31..32k
endif
endfor
VSHF.D
v = WR[ws] || WR[wt]
for i in 0 .. WRLEN/64-1
k = WR[wd]64i+5..64i mod (WRLEN/32)
if WR[wd]64i+7..64i+6 != 0 then
WR[wd]64i+63..64i = 0
else
WR[wd]64i+63..64i = v64k+63..64k
endif
endfor
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
00011 |
wt |
ws |
wd |
VEC 011110 |
|
6 |
5 |
5 |
5 |
5 |
6 |
XOR.V |
Vector Logical Exclusive Or | |
XOR.V wd,ws,wt |
MSA |
Vector Logical Exclusive Or |
Vector Logical Exclusive Or
Vector by vector logical exclusive or.
wd = ws XOR wt
Each bit of vector ws is combined with the corresponding bit of vector wt in a bi twise logical XOR operation. The result is written to vector wd.
The operands and results are bit vector values.
No data-dependent exceptions are possible.
WR[wd] = WR[ws] xor WR[wt]
Reserved Instruction Exception, MSA Disabled Exception.
|
MSA 011110 |
11 |
i8 |
ws |
wd |
I8 000000 |
|
6 |
2 |
8 |
5 |
5 |
6 |
XORI.B |
Immediate Logical Exclusive Or | |
XORI.B wd,ws,i8 |
MSA |
Immediate Logical Exclusive Or |
Immediate Logical Exclusive Or
Immediate by vector logical exclusive or.
wd[i] = ws[i] XOR i8
Each byte element of vector ws is combined with the 8-bit immediate i8 in a bitwis e logical XOR operation. The result is written to vector wd.
The operands and results are values in integer byte data format.
No data-dependent exceptions are possible.
for i in 0 .. WRLEN/8-1 WR[wd]8i+7..8i = WR[ws]8i+7..8i xor i87..0 endfor
Reserved Instruction Exception, MSA Disabled Exception.