(no commit message)
[libreriscv.git] / openpower / sv / svp64.mdwn
index bb89bb886b19f9b375f20cd9d3651c408c16561c..feba1ab45b11cbada7d0c26b2d96b024cb6d633b 100644 (file)
@@ -62,8 +62,8 @@ A number of features need to be compacted into a very small space of only 24 bit
 * Independent per-register Scalar/Vector tagging and range extension on every register
 * Element width overrides on both source and destination
 * Predication on both source and destination
-* Two different *types* of predication: INT and CR
-* SV Modes including saturation (for A/V DSP), mapreduce, fail-first and
+* Two different sources of predication: INT and CR Fields
+* SV Modes including saturation (for Audio, Video and DSP), mapreduce, fail-first and
   predicate-result mode.
 
 This document focusses specifically on how that fits into available space.  The [[svp64/appendix]] explains more of the details, whilst the [[sv/overview]] gives the basics.
@@ -188,18 +188,26 @@ The following fields are common to all Remapped Encodings:
 | Field Name | Field bits | Description                            |
 |------------|------------|----------------------------------------|
 | MASKMODE   | `0`        | Execution (predication) Mask Kind      |
-| MASK          | `1:3`      | Execution Mask                      |
+| MASK       | `1:3`      | Execution Mask                      |
+| SUBVL      | `8:9`      | Sub-vector length                   |                          
+
+The following fields are optional or encoded differently depending
+on context after decoding of the Scalar suffix:
+
+| Field Name | Field bits | Description                            |
+|------------|------------|----------------------------------------|
 | ELWIDTH       | `4:5`      | Element Width                       |
 | ELWIDTH_SRC   | `6:7`      | Element Width for Source      |
-| SUBVL         | `8:9`      | Sub-vector length                   |                          
+| EXTRA         | `10:18`    | Register Extra encoding                |                          
 | MODE          | `19:23`    | changes Vector behaviour               |
 
+
 * MODE changes the behaviour of the SV operation (result saturation, mapreduce)
 * SUBVL groups elements together into vec2, vec3, vec4 for use in 3D and Audio/Video DSP work
 * ELWIDTH and ELWIDTH_SRC overrides the instruction's destination and source operand width
 * MASK (and MASK_SRC) and MASKMODE provide predication (two types of sources: scalar INT and Vector CR).
+* Bits 10 to 18 (EXTRA) are further decoded depending on the RM category for the instruction, which is determined only by decoding the Scalar 32 bit suffix.
 
-Bits 10 to 18 are further decoded depending on RM category for the instruction.
 Similar to OpenPOWER `X-Form` etc. these are given designations, such as `RM-1P-3S1D` which indicates for this example that the operation is to be single-predicated and that there are 3 source operand EXTRA tags and one destination operand tag.
 
 Note that if ELWIDTH != ELWIDTH_SRC this may result in reduced performance or increased latency in some implementations due to lane-crossing. 
@@ -380,9 +388,15 @@ Notes from Jacob: CR6-7 allows Scalar ops to refer to these without having to do
 
 Shows all instruction-specific fields in the Remapped Encoding `RM[10:18]` for all instruction variants.  Note that due to the very tight space, the encoding mode is *not* included in the prefix itself.  The mode is "applied", similar to OpenPOWER "Forms" (X-Form, D-Form) on a per-instruction basis, and, like "Forms" are given a designation (below) of the form `RM-nP-nSnD`. The full list of which instructions use which remaps is here [[opcode_regs_deduped]]. (*Machine-readable CSV files have been provided which will make the task of creating SV-aware ISA decoders easier*).
 
+These mappings are part of the SVP64 Specification in exactly the same
+way as X-Form, D-Form. New Scalar instructions added to the Power ISA
+will need a corresponding SVP64 Mapping, which can be derived by-rote
+from examining the Register "Profile" of the instruction.
+
 There are two categories:  Single and Twin Predication.
 Due to space considerations further subdivision of Single Predication
-is based on whether the number of src operands is 2 or 3.  
+is based on whether the number of src operands is 2 or 3.  With only
+9 bits available some compromises have to be made.
 
 * `RM-1P-3S1D` Single Predication dest/src1/2/3, applies to 4-operand instructions (fmadd, isel, madd).
 * `RM-1P-2S1D` Single Predication dest/src1/2 applies to 3-operand instructions (src1 src2 dest)