Because the Orc opcode documentation splits opcode description and processor support between two tables, for reference I wrote a quick Python script to build a table of Orc opcodes common to SSE (x86), Altivec (PPC/Cell), and NEON (Arm Cortex) processors.
Here's that table for reference, at least until I put the time to format it for a wiki:
opcode | dst | src1 | src2 | description | pseudo code |
---|---|---|---|---|---|
absb | 1 | 1 | absolute value | (a < 0) ? -a : a | |
addb | 1 | 1 | 1 | add | a + b |
addssb | 1 | 1 | 1 | add with signed saturate | clamp(a + b) |
addusb | 1 | 1 | 1 | add with unsigned saturate | clamp(a + b) |
andb | 1 | 1 | 1 | bitwise AND | a & b |
andnb | 1 | 1 | 1 | bitwise AND NOT | a & (~b) |
avgsb | 1 | 1 | 1 | signed average | (a + b + 1)>>1 |
avgub | 1 | 1 | 1 | unsigned average | (a + b + 1)>>1 |
cmpeqb | 1 | 1 | 1 | compare equal | (a == b) ? (~0) : 0 |
cmpgtsb | 1 | 1 | 1 | compare greater than | (a > b) ? (~0) : 0 |
copyb | 1 | 1 | copy | a | |
loadb | 1 | 1 | load from memory | array[i] | |
loadpb | 1 | 1 | load parameter or constant | scalar | |
maxsb | 1 | 1 | 1 | signed maximum | (a > b) ? a : b |
maxub | 1 | 1 | 1 | unsigned maximum | (a > b) ? a : b |
minsb | 1 | 1 | 1 | signed minimum | (a < b) ? a : b |
minub | 1 | 1 | 1 | unsigned minimum | (a < b) ? a : b |
mullb | 1 | 1 | 1 | low bits of multiply | a * b |
mulhsb | 1 | 1 | 1 | high bits of signed multiply | (a * b) >> 8 |
mulhub | 1 | 1 | 1 | high bits of unsigned multiply | (a * b) >> 8 |
orb | 1 | 1 | 1 | bitwise or | a | b |
shlb | 1 | 1 | 1S | shift left | a << b |
shrsb | 1 | 1 | 1S | signed shift right | a >> b |
shrub | 1 | 1 | 1S | unsigned shift right | a >> b |
signb | 1 | 1 | sign | sign(a) | |
storeb | 1 | 1 | store to memory | special | |
subb | 1 | 1 | 1 | subtract | a - b |
subssb | 1 | 1 | 1 | subtract with signed saturate | clamp(a - b) |
subusb | 1 | 1 | 1 | subtract with unsigned saturate | clamp(a - b) |
xorb | 1 | 1 | 1 | bitwise XOR | a ^ b |
absw | 2 | 2 | absolute value | (a < 0) ? -a : a | |
addw | 2 | 2 | 2 | add | a + b |
addssw | 2 | 2 | 2 | add with signed saturate | clamp(a + b) |
addusw | 2 | 2 | 2 | add with unsigned saturate | clamp(a + b) |
andw | 2 | 2 | 2 | bitwise AND | a & b |
andnw | 2 | 2 | 2 | bitwise AND NOT | a & (~b) |
avgsw | 2 | 2 | 2 | signed average | (a + b + 1)>>1 |
avguw | 2 | 2 | 2 | unsigned average | (a + b + 1)>>1 |
cmpeqw | 2 | 2 | 2 | compare equal | (a == b) ? (~0) : 0 |
cmpgtsw | 2 | 2 | 2 | compare greater than | (a > b) ? (~0) : 0 |
copyw | 2 | 2 | copy | a | |
div255w | 2 | 2 | divide by 255 | a/255 | |
loadw | 2 | 2 | load from memory | array[i] | |
loadpw | 2 | 2 | load parameter or constant | scalar | |
maxsw | 2 | 2 | 2 | signed maximum | (a > b) ? a : b |
maxuw | 2 | 2 | 2 | unsigned maximum | (a > b) ? a : b |
minsw | 2 | 2 | 2 | signed minimum | (a < b) ? a : b |
minuw | 2 | 2 | 2 | unsigned minimum | (a < b) ? a : b |
mullw | 2 | 2 | 2 | low bits of multiply | a * b |
mulhsw | 2 | 2 | 2 | high bits of signed multiply | (a * b) >> 8 |
mulhuw | 2 | 2 | 2 | high bits of unsigned multiply | (a * b) >> 8 |
orw | 2 | 2 | 2 | bitwise or | a | b |
shlw | 2 | 2 | 2S | shift left | a << b |
shrsw | 2 | 2 | 2S | signed shift right | a >> b |
shruw | 2 | 2 | 2S | unsigned shift right | a >> b |
signw | 2 | 2 | sign | sign(a) | |
storew | 2 | 2 | store to memory | special | |
subw | 2 | 2 | 2 | subtract | a - b |
subssw | 2 | 2 | 2 | subtract with signed saturate | clamp(a - b) |
subusw | 2 | 2 | 2 | subtract with unsigned saturate | clamp(a - b) |
xorw | 2 | 2 | 2 | bitwise XOR | a ^ b |
absl | 4 | 4 | absolute value | (a < 0) ? -a : a | |
addl | 4 | 4 | 4 | add | a + b |
addssl | 4 | 4 | 4 | add with signed saturate | clamp(a + b) |
addusl | 4 | 4 | 4 | add with unsigned saturate | clamp(a + b) |
andl | 4 | 4 | 4 | bitwise AND | a & b |
andnl | 4 | 4 | 4 | bitwise AND NOT | a & (~b) |
avgsl | 4 | 4 | 4 | signed average | (a + b + 1)>>1 |
avgul | 4 | 4 | 4 | unsigned average | (a + b + 1)>>1 |
cmpeql | 4 | 4 | 4 | compare equal | (a == b) ? (~0) : 0 |
cmpgtsl | 4 | 4 | 4 | compare greater than | (a > b) ? (~0) : 0 |
copyl | 4 | 4 | copy | a | |
loadl | 4 | 4 | load from memory | array[i] | |
loadpl | 4 | 4 | load parameter or constant | scalar | |
maxsl | 4 | 4 | 4 | signed maximum | (a > b) ? a : b |
maxul | 4 | 4 | 4 | unsigned maximum | (a > b) ? a : b |
minsl | 4 | 4 | 4 | signed minimum | (a < b) ? a : b |
minul | 4 | 4 | 4 | unsigned minimum | (a < b) ? a : b |
orl | 4 | 4 | 4 | bitwise or | a | b |
shll | 4 | 4 | 4S | shift left | a << b |
shrsl | 4 | 4 | 4S | signed shift right | a >> b |
shrul | 4 | 4 | 4S | unsigned shift right | a >> b |
signl | 4 | 4 | sign | sign(a) | |
storel | 4 | 4 | store to memory | special | |
subl | 4 | 4 | 4 | subtract | a - b |
subssl | 4 | 4 | 4 | subtract with signed saturate | clamp(a - b) |
subusl | 4 | 4 | 4 | subtract with unsigned saturate | clamp(a - b) |
xorl | 4 | 4 | 4 | bitwise XOR | a ^ b |
loadq | 8 | 8 | load from memory | array[i] | |
storeq | 8 | 8 | store to memory | special | |
splatw3q | 8 | 8 | duplicates high 16-bits to lower 48 bits | special | |
convsbw | 2 | 1 | convert signed | a | |
convubw | 2 | 1 | convert unsigned | a | |
splatbw | 2 | 1 | duplicates 8 bits to both halfs of 16 bits | special | |
splatbl | 4 | 1 | duplicates 8 bits to all parts of 32 bits | special | |
convswl | 4 | 2 | convert signed | a | |
convuwl | 4 | 2 | convert unsigned | a | |
convslq | 8 | 4 | signed convert | a | |
convulq | 8 | 4 | unsigned convert | a | |
convwb | 1 | 2 | convert | a | |
convhwb | 1 | 2 | shift and convert | a>>8 | |
convssswb | 1 | 2 | convert signed to signed with saturation | clamp(a) | |
convsuswb | 1 | 2 | convert signed to unsigned with saturation | clamp(a) | |
convuuswb | 1 | 2 | convert unsigned to unsigned with saturation | clamp(a) | |
convlw | 2 | 4 | convert | a | |
convhlw | 2 | 4 | shift and convert | a>>16 | |
convssslw | 2 | 4 | convert signed to signed with saturation | clamp(a) | |
convql | 4 | 8 | convert | a | |
mulsbw | 2 | 1 | 1 | multiply signed | a * b |
mulubw | 2 | 1 | 1 | multiply unsigned | a * b |
mulswl | 4 | 2 | 2 | multiply signed | a * b |
muluwl | 4 | 2 | 2 | multiply unsigned | a * b |
accl | 4 | 4 | accumulate | += a | |
swapw | 2 | 2 | endianness swap | special | |
swapl | 4 | 4 | endianness swap | special | |
select0wb | 1 | 2 | select first half | special | |
select1wb | 1 | 2 | select second half | special | |
select0lw | 2 | 4 | select first half | special | |
select1lw | 2 | 4 | select second half | special | |
mergewl | 4 | 2 | 2 | merge halves | special |
mergebw | 2 | 1 | 1 | merge halves | special |
splitlw | 2 | 4 | split first/second words | special | |
splitwb | 1 | 2 | split first/second bytes | special | |
addf | 4 | 4 | 4 | add | a + b |
subf | 4 | 4 | 4 | subtract | a - b |
mulf | 4 | 4 | 4 | multiply | a * b |
maxf | 4 | 4 | 4 | maximum | max(a,b) |
minf | 4 | 4 | 4 | minimum | min(a,b) |
cmpeqf | 4 | 4 | 4 | compare equal | (a == b) ? (~0) : 0 |
convfl | 4 | 4 | convert float point to integer | a | |
convlf | 4 | 4 | convert integer to floating point | a |