Orc OpcodesOrc Opcodes — Description of Opcodes |
Opcodes only work with variables of a particular size. In the table below, destination and source indicate the size of the destination and source operands, in bytes. In general, opcodes have a suffix indicating the sizes, "b" for 1-byte operations, "w" for 2-byte operations, and "l" for 4-byte operations. If the source and destination have different sizes, the source size suffix is listed first, then the destination suffix. For example, converting a 1-byte variable to 2-byte can be performed using the "convsbw" opcode.
Signed, unsigned, and saturating operations are indicated by the letters "s", "u", and "s". If signed or unsigned is not indicated, it generally means that the signedness is not relevant to the definition of the opcode, and that the operation on signed or unsigned values will give the same result.
The "select" opcodes divide the bits in the source value into two halves. For "select0", the half that is first in memory order is selected, and the latter half for "select1". In other words, "convwb" is the same as "select0wb" on little-endian systems, and "select1wb" on big-endian systems.
The "merge" opcodes take two values and put them together in memory order.
Accumulating opcodes require an accumulator variable as the destination. Accumulating opcodes start with "acc". These opcodes sum the source values over the entire array, and can be read from the OrcExecutor structure after an execution of an Orc program.
Shift opcodes only work with constants or parameters as the second source value.
For more precise understanding of operations, it is recommended to compile a program for the C target and examine the resulting C source code.
Table 1. Table of Opcodes
opcode | destination size | source 1 size | source 2 size | 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] | |
loadoffb | 1 | 1 | 4S | load from memory with offset | array[i+offset] |
loadupdb | 1 | 1 | load upsampled duplicate | array[i>>1] | |
loadupib | 1 | 1 | load upsampled interpolate | (array[i>>1] + array[(i+1)>>1] + 1)>>1 | |
loadpb | 1 | 1 | load parameter or constant | scalar | |
ldresnearb | 1 | 1 | 4S | load, nearest neighbor resampled | array[(b+c*i)>>8] |
ldresnearl | 4 | 4 | 4S | load, nearest neighbor resampled | array[(b+c*i)>>8] |
ldreslinb | 1 | 1 | 4S | load, bilinear resampled | special |
ldreslinl | 4 | 4 | 4S | load, bilinear resampled | special |
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 | |
divluw | 2 | 2 | 2 | saturated unsigned divide 16-bit by 8-bit | clamp(a/(b & 255),0,255) |
loadw | 2 | 2 | load from memory | array[i] | |
loadoffw | 2 | 2 | 4S | load from memory with offset | array[i+offset] |
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) >> 16 |
mulhuw | 2 | 2 | 2 | high bits of unsigned multiply | (a * b) >> 16 |
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] | |
loadoffl | 4 | 4 | 4S | load from memory with offset | array[i+offset] |
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 |
mulll | 4 | 4 | 4 | low bits of multiply | a * b |
mulhsl | 4 | 4 | 4 | high bits of signed multiply | (a * b) >> 16 |
mulhul | 4 | 4 | 4 | high bits of unsigned multiply | (a * b) >> 16 |
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] | |
loadpq | 8 | 8 | load parameter or constant | scalar | |
storeq | 8 | 8 | store to memory | special | |
splatw3q | 8 | 8 | duplicates high 16-bits to lower 48 bits | special | |
copyq | 8 | 8 | copy | a | |
cmpeqq | 8 | 8 | 8 | compare equal | (a == b) ? (~0) : 0 |
cmpgtsq | 8 | 8 | 8 | compare greater than | (a > b) ? (~0) : 0 |
andq | 8 | 8 | 8 | bitwise AND | a & b |
andnq | 8 | 8 | 8 | bitwise AND NOT | a & (~b) |
orq | 8 | 8 | 8 | bitwise or | a | b |
xorq | 8 | 8 | 8 | bitwise XOR | a ^ b |
addq | 8 | 8 | 8 | add | a + b |
subq | 8 | 8 | 8 | subtract | a - b |
shlq | 8 | 8 | 8S | shift left | a << b |
shrsq | 8 | 8 | 8S | signed shift right | a >> b |
shruq | 8 | 8 | 8S | unsigned shift right | a >> b |
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) | |
convusswb | 1 | 2 | convert unsigned to signed 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) | |
convsuslw | 2 | 4 | convert signed to unsigned with saturation | clamp(a) | |
convusslw | 2 | 4 | convert unsigned to signed with saturation | clamp(a) | |
convuuslw | 2 | 4 | convert unsigned to unsigned with saturation | clamp(a) | |
convql | 4 | 8 | convert | a | |
convsssql | 4 | 8 | convert signed to signed with saturation | clamp(a) | |
convsusql | 4 | 8 | convert signed to unsigned with saturation | clamp(a) | |
convussql | 4 | 8 | convert unsigned to signed with saturation | clamp(a) | |
convuusql | 4 | 8 | convert unsigned to unsigned with saturation | clamp(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 |
mulslq | 8 | 4 | 4 | multiply signed | a * b |
mululq | 8 | 4 | 4 | multiply unsigned | a * b |
accw | 2 | 2 | accumulate | += a | |
accl | 4 | 4 | accumulate | += a | |
accsadubl | 4 | 1 | 1 | accumulate absolute difference | += abs(a - b) |
swapw | 2 | 2 | endianness byte swap | special | |
swapl | 4 | 4 | endianness byte swap | special | |
swapwl | 4 | 4 | endianness word swap | special | |
swapq | 8 | 8 | endianness byte swap | special | |
swaplq | 8 | 8 | endianness long word 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 | |
select0ql | 4 | 8 | select first half | special | |
select1ql | 4 | 8 | select second half | special | |
mergelq | 8 | 4 | 4 | merge halves | special |
mergewl | 4 | 2 | 2 | merge halves | special |
mergebw | 2 | 1 | 1 | merge halves | special |
splitql | 4 | 8 | split first/second long words | 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 |
divf | 4 | 4 | 4 | divide | a / b |
sqrtf | 4 | 4 | square root | sqrt(a) | |
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 |
cmpltf | 4 | 4 | 4 | compare less than | (a == b) ? (~0) : 0 |
cmplef | 4 | 4 | 4 | compare less than or equal | (a == b) ? (~0) : 0 |
convfl | 4 | 4 | convert float point to integer | a | |
convlf | 4 | 4 | convert integer to floating point | a | |
addd | 8 | 8 | 8 | add | a + b |
subd | 8 | 8 | 8 | subtract | a - b |
muld | 8 | 8 | 8 | multiply | a * b |
divd | 8 | 8 | 8 | divide | a / b |
sqrtd | 8 | 8 | square root | sqrt(a) | |
maxd | 8 | 8 | 8 | maximum | max(a,b) |
mind | 8 | 8 | 8 | minimum | min(a,b) |
cmpeqd | 8 | 8 | 8 | compare equal | (a == b) ? (~0) : 0 |
cmpltd | 8 | 8 | 8 | compare less than | (a == b) ? (~0) : 0 |
cmpled | 8 | 8 | 8 | compare less than or equal | (a == b) ? (~0) : 0 |
convdl | 4 | 8 | convert double point to integer | a | |
convld | 8 | 4 | convert integer to double point | a | |
convfd | 8 | 4 | convert float to double | a | |
convdf | 4 | 8 | convert double to float | a | |
orf | 4 | 4 | 4 | bitwise or | a | b |
andf | 4 | 4 | 4 | bitwise and | a & b |
convwf | 4 | 2 |
In the pseudo code of the above table, abs() indicates absolute value, clamp() indicates that any values outside the destination range are set to the nearest value in the destination range, and sign() evaluates to -1 for values less than 0, 1 for values greater than 0, and 0 for 0.
The values for shift operations are not correct in this table.
Table 2. Table of Opcode Rule Coverage
opcode name | sse | mmx | altivec | neon | c64x-c |
---|---|---|---|---|---|
absb | yes | yes | yes | yes | yes |
addb | yes | yes | yes | yes | yes |
addssb | yes | yes | yes | yes | yes |
addusb | yes | yes | yes | yes | yes |
andb | yes | yes | yes | yes | yes |
andnb | yes | yes | yes | yes | yes |
avgsb | yes | yes | yes | yes | yes |
avgub | yes | yes | yes | yes | yes |
cmpeqb | yes | yes | yes | yes | yes |
cmpgtsb | yes | yes | yes | yes | yes |
copyb | yes | yes | yes | yes | yes |
loadb | yes | yes | yes | yes | yes |
loadoffb | yes | yes | yes | yes | no |
loadupdb | yes | yes | no | yes | no |
loadupib | yes | yes | no | no | no |
loadpb | yes | yes | yes | yes | no |
ldresnearb | no | no | no | no | no |
ldresnearl | yes | yes | no | no | no |
ldreslinb | no | no | no | no | no |
ldreslinl | yes | yes | no | no | no |
maxsb | yes | yes | yes | yes | yes |
maxub | yes | yes | yes | yes | yes |
minsb | yes | yes | yes | yes | yes |
minub | yes | yes | yes | yes | yes |
mullb | yes | yes | yes | yes | no |
mulhsb | yes | yes | yes | yes | no |
mulhub | yes | yes | yes | yes | no |
orb | yes | yes | yes | yes | yes |
shlb | yes | yes | yes | yes | no |
shrsb | yes | yes | yes | yes | no |
shrub | yes | yes | yes | yes | no |
signb | yes | no | yes | yes | yes |
storeb | yes | yes | yes | yes | yes |
subb | yes | yes | yes | yes | yes |
subssb | yes | yes | yes | yes | no |
subusb | yes | yes | yes | yes | no |
xorb | yes | yes | yes | yes | yes |
absw | yes | yes | yes | yes | yes |
addw | yes | yes | yes | yes | yes |
addssw | yes | yes | yes | yes | yes |
addusw | yes | yes | yes | yes | yes |
andw | yes | yes | yes | yes | yes |
andnw | yes | yes | yes | yes | yes |
avgsw | yes | yes | yes | yes | yes |
avguw | yes | yes | yes | yes | yes |
cmpeqw | yes | yes | yes | yes | yes |
cmpgtsw | yes | yes | yes | yes | yes |
copyw | yes | yes | yes | yes | yes |
div255w | yes | yes | yes | yes | no |
divluw | yes | yes | no | no | no |
loadw | yes | yes | yes | yes | yes |
loadoffw | yes | yes | yes | yes | no |
loadpw | yes | yes | yes | yes | no |
maxsw | yes | yes | yes | yes | yes |
maxuw | yes | yes | yes | yes | yes |
minsw | yes | yes | yes | yes | yes |
minuw | yes | yes | yes | yes | yes |
mullw | yes | yes | yes | yes | yes |
mulhsw | yes | yes | yes | yes | yes |
mulhuw | yes | yes | yes | yes | yes |
orw | yes | yes | yes | yes | yes |
shlw | yes | yes | yes | yes | yes |
shrsw | yes | yes | yes | yes | yes |
shruw | yes | yes | yes | yes | yes |
signw | yes | yes | yes | yes | yes |
storew | yes | yes | yes | yes | yes |
subw | yes | yes | yes | yes | yes |
subssw | yes | yes | yes | yes | yes |
subusw | yes | yes | yes | yes | yes |
xorw | yes | yes | yes | yes | yes |
absl | yes | yes | yes | yes | yes |
addl | yes | yes | yes | yes | yes |
addssl | yes | yes | yes | yes | yes |
addusl | yes | yes | yes | yes | yes |
andl | yes | yes | yes | yes | yes |
andnl | yes | yes | yes | yes | yes |
avgsl | yes | yes | yes | yes | yes |
avgul | yes | yes | yes | yes | yes |
cmpeql | yes | yes | yes | yes | yes |
cmpgtsl | yes | yes | yes | yes | yes |
copyl | yes | yes | yes | yes | yes |
loadl | yes | yes | yes | yes | yes |
loadoffl | yes | yes | yes | yes | no |
loadpl | yes | yes | yes | yes | no |
maxsl | yes | yes | yes | yes | yes |
maxul | yes | yes | yes | yes | yes |
minsl | yes | yes | yes | yes | yes |
minul | yes | yes | yes | yes | yes |
mulll | yes | yes | yes | yes | yes |
mulhsl | yes | no | no | yes | yes |
mulhul | yes | no | no | yes | yes |
orl | yes | yes | yes | yes | yes |
shll | yes | yes | yes | yes | yes |
shrsl | yes | yes | yes | yes | yes |
shrul | yes | yes | yes | yes | yes |
signl | yes | no | yes | yes | yes |
storel | yes | yes | yes | yes | yes |
subl | yes | yes | yes | yes | yes |
subssl | yes | yes | yes | yes | yes |
subusl | yes | yes | yes | yes | yes |
xorl | yes | yes | yes | yes | yes |
loadq | yes | yes | yes | yes | yes |
loadpq | yes | yes | yes | no | no |
storeq | yes | yes | yes | yes | yes |
splatw3q | yes | yes | yes | yes | no |
copyq | yes | yes | yes | yes | no |
cmpeqq | yes | yes | yes | no | no |
cmpgtsq | yes | no | yes | no | no |
andq | yes | yes | yes | yes | no |
andnq | yes | yes | yes | yes | no |
orq | yes | yes | yes | yes | no |
xorq | yes | yes | yes | yes | no |
addq | yes | no | yes | yes | no |
subq | yes | no | yes | yes | no |
shlq | yes | yes | no | no | no |
shrsq | yes | yes | no | no | no |
shruq | yes | yes | no | no | no |
convsbw | yes | yes | yes | yes | yes |
convubw | yes | yes | yes | yes | yes |
splatbw | yes | yes | yes | yes | no |
splatbl | yes | yes | yes | yes | no |
convswl | yes | yes | yes | yes | yes |
convuwl | yes | yes | yes | yes | yes |
convslq | yes | yes | yes | yes | no |
convulq | yes | yes | yes | yes | no |
convwb | yes | yes | yes | yes | yes |
convhwb | yes | yes | yes | yes | no |
convssswb | yes | yes | yes | yes | yes |
convsuswb | yes | yes | yes | yes | yes |
convusswb | no | no | no | no | no |
convuuswb | yes | yes | yes | yes | no |
convlw | yes | yes | yes | yes | yes |
convhlw | yes | yes | yes | yes | no |
convssslw | yes | yes | yes | yes | yes |
convsuslw | yes | yes | yes | yes | no |
convusslw | no | no | no | no | no |
convuuslw | no | no | yes | yes | no |
convql | yes | yes | yes | yes | no |
convsssql | no | no | no | yes | no |
convsusql | no | no | no | yes | no |
convussql | no | no | no | no | no |
convuusql | no | no | no | yes | no |
mulsbw | yes | yes | yes | yes | yes |
mulubw | yes | yes | yes | yes | yes |
mulswl | yes | yes | yes | yes | yes |
muluwl | yes | yes | yes | yes | yes |
mulslq | yes | yes | yes | no | no |
mululq | yes | no | yes | no | no |
accw | yes | yes | yes | yes | yes |
accl | yes | yes | yes | yes | yes |
accsadubl | yes | yes | yes | yes | yes |
swapw | yes | yes | yes | yes | yes |
swapl | yes | yes | yes | yes | yes |
swapwl | yes | yes | yes | yes | no |
swapq | yes | yes | yes | yes | no |
swaplq | yes | yes | yes | yes | no |
select0wb | yes | yes | yes | yes | yes |
select1wb | yes | yes | yes | yes | yes |
select0lw | yes | yes | yes | yes | yes |
select1lw | yes | yes | yes | yes | yes |
select0ql | yes | yes | yes | yes | no |
select1ql | yes | yes | yes | yes | no |
mergelq | yes | yes | yes | yes | no |
mergewl | yes | yes | yes | yes | yes |
mergebw | yes | yes | yes | yes | yes |
splitql | yes | yes | yes | yes | no |
splitlw | yes | yes | yes | yes | no |
splitwb | yes | yes | yes | yes | no |
addf | yes | no | yes | yes | yes |
subf | yes | no | yes | yes | yes |
mulf | yes | no | yes | yes | yes |
divf | yes | no | yes | yes | yes |
sqrtf | yes | no | yes | yes | yes |
maxf | yes | no | yes | yes | yes |
minf | yes | no | yes | yes | yes |
cmpeqf | yes | no | yes | yes | yes |
cmpltf | yes | no | yes | no | yes |
cmplef | yes | no | yes | no | yes |
convfl | yes | no | yes | yes | yes |
convlf | yes | no | yes | yes | yes |
addd | yes | no | yes | yes | no |
subd | yes | no | yes | yes | no |
muld | yes | no | yes | yes | no |
divd | yes | no | yes | yes | no |
sqrtd | yes | no | yes | no | no |
maxd | yes | no | yes | no | no |
mind | yes | no | yes | no | no |
cmpeqd | yes | no | yes | no | no |
cmpltd | yes | no | yes | no | no |
cmpled | yes | no | yes | no | no |
convdl | yes | no | yes | no | no |
convld | yes | no | yes | no | no |
convfd | yes | no | yes | no | no |
convdf | yes | no | yes | no | no |
orf | yes | no | no | no | no |
andf | yes | no | no | no | no |
convwf | yes | no | no | no | no |