Bug 544

Summary: assessment of OpenPOWER SIMD instructions (misnamed "vector")
Product: Libre-SOC's first SoC Reporter: Luke Kenneth Casson Leighton <lkcl>
Component: SpecificationAssignee: Luke Kenneth Casson Leighton <lkcl>
Status: CONFIRMED ---    
Severity: enhancement CC: libre-soc-isa
Priority: ---    
Version: unspecified   
Hardware: PC   
OS: Linux   
See Also: https://bugs.libre-soc.org/show_bug.cgi?id=213
NLnet milestone: NLNet.2019.10.046.Standards total budget (EUR) for completion of task and all subtasks: 0
budget (EUR) for this task, excluding subtasks' budget: 0 parent task for budget allocation:
child tasks for budget allocation: The table of payments (in EUR) for this task; TOML format:

Description Luke Kenneth Casson Leighton 2020-12-08 12:54:35 GMT
an examination of the OpenPOWER SIMD instructions is needed. 
to be recorded at https://libre-soc.org/openpower/simd_vsx/

VSX cannot strictly be called "Vector" because vectors are variable-length,
where VSX is fixed-length (i.e. SIMD).

preliminary investigation shows the inclusion of:

* DSP-style integer clamp/saturate operations
* pixel-style data reordering (in and out of 16 RGB and 32-bit formats)
* a very good type of rotate that reads a mask from part of a register
* min/max selection on both integer and FP
* FP estimation functions (log, exp, recp, rsqrt) and associated
  error estimation
* FP extraction and insertion of exponent and mantissa from/into integers 
* FP single to double precision conversion.
* Rijndael FIPS-197 and SHA-256/512 primitives
* there are some bitmanip operations that also seem not to be
  vector operations, but are more along the lines of taking advantage
  of the fact that the VSX registers are 128 bit

even the operations labelled "vector permute" are a form of 128-bit bitmanip
operating at the byte level (i.e. not vector).

the only operations that could conceivably be called "vector" are 
the vector extract/insert and splat instructions, although, again,
these can be covered by some careful design of 128-bit bitmanip
operations.

analysis of these instructions is valuable with a view to guiding whether
and how they should be included in Simple-V