Implement select and vselect instructions.

This gives us the opportunity to use the AsBool derived type variables and a
Select instruction format with a non-default typevar_operand setting.
This commit is contained in:
Jakob Stoklund Olesen
2016-05-20 15:10:31 -07:00
parent 692a85d720
commit b44d6c6541
7 changed files with 60 additions and 35 deletions

View File

@@ -656,35 +656,12 @@ load a constant into an SSA value.
.. autoinst:: f32const
.. autoinst:: f64const
.. autoinst:: vconst
.. inst:: a = select c, x, y
Conditional select.
:arg b1 c: Controlling flag.
:arg T x: Value to return when ``c`` is true.
:arg T y: Value to return when ``c`` is false. Must be same type as ``x``.
:result T a: Same type as ``x`` and ``y``.
This instruction selects whole values. Use :inst:`vselect` for lane-wise
selection.
.. autoinst:: select
Vector operations
-----------------
.. inst:: a = vselect c, x, y
Vector lane select.
Select lanes from ``x`` or ``y`` controlled by the lanes of the boolean
vector ``c``.
:arg b1xN c: Controlling flag vector.
:arg TxN x: Vector with lanes selected by the true lanes of ``c``.
Must be a vector type with the same number of lanes as ``c``.
:arg TxN y: Vector with lanes selected by the false lanes of ``c``.
Must be same type as ``x``.
:result TxN a: Same type as ``x`` and ``y``.
.. autoinst:: vselect
.. inst:: a = vbuild x, y, z, ...