Version 5 (modified by cameron, 8 years ago) (diff) |
---|
IDISA Horizontal Operations
The table below lists the various IDISA horizontal operations on vectors of N-bit fields, together with their description and semantic specification.
These operations generally have the form r = hsimd<w>::op(a, b) for each operation op, where a and b are operand vectors of N bit fields and r is the corresponding result vector.
In general, operand fields may be interpreted as either signed or unsigned w-bit integers, depending on the operation. When the results depend on this interpretation, the notation s(a) refers to the interpretation of field a as a signed integer (2's complement interpretation), while the notation u(a) refers to the interpretation as an unsigned integer (natural binary interpretation).
In general, result fields are converted to N-bits by truncation.
add | addition | r_{i} = c_{2i} + c_{2i+1} |
min | minimum value | r_{i} = if s(c_{2i}) < s(c_{2i+1}) then c_{2i} else c_{2i+1} |
umin | minimum value | r_{i} = if u(c_{2i}) < u(c_{2i+1}) then c_{2i} else c_{2i+1} |
packl | pack low | r_{i} = c_{2i+1} |
packh | pack high | r_{i} = c_{2i} |
packus | pack with unsigned saturation | r_{i} = us_{N}(concat(c_{2i}, c_{2i+1})) |
packss | pack with signed saturation | r_{i} = ss_{N}(concat(c_{2i}, c_{2i+1})) |
where the w-bit unsigned and signed saturation functions are defined as follows.
- us_{w}(x) = x, if u(x) < 2^{w}
- us_{w}(x) = 2^{w}-1, if u(x) >= 2^{w}
- ss_{w}(x) = x, if -2^{w-1} <= s(x) < 2^{w-1}
- ss_{w}(x) = 2^{w-1}-1, if s(x) >= 2^{w-1}
- ss_{w}(x) = -2^{w-1}, if s(x) < 2^{w-1}
In these definitions, fields are numbered left-to-right in so-called *big-endian* style. Implementations using little-endian processors generally reverse the arguments c_{2i} and c_{2i+1}.