Changes from v1.0-rc2
Clarified that this it the frozen version for public review.
1
Introduction
2
Implementation-defined Constant Parameters
3
Vector Extension Programmer’s Model
3.1
Vector Registers
3.2
Vector Context Status in
mstatus
3.3
Vector Context Status in
vsstatus
3.4
Vector type register,
vtype
3.5
Vector Length Register
vl
3.6
Vector Byte Length
vlenb
3.7
Vector Start Index CSR
vstart
3.8
Vector Fixed-Point Rounding Mode Register
vxrm
3.9
Vector Fixed-Point Saturation Flag
vxsat
3.10
Vector Control and Status Register
vcsr
3.11
State of Vector Extension at Reset
4
Mapping of Vector Elements to Vector Register State
4.1
Mapping for LMUL = 1
4.2
Mapping for LMUL < 1
4.3
Mapping for LMUL > 1
4.4
Mapping across Mixed-Width Operations
4.5
Mask Register Layout
5
Vector Instruction Formats
5.1
Scalar Operands
5.2
Vector Operands
5.3
Vector Masking
5.4
Prestart, Active, Inactive, Body, and Tail Element Definitions
6
Configuration-Setting Instructions (
vsetvli
/
vsetivli
/
vsetvl
)
6.2
AVL encoding
6.3
Constraints on Setting
vl
6.4
Example of stripmining and changes to SEW
7
Vector Loads and Stores
7.1
Vector Load/Store Instruction Encoding
7.2
Vector Load/Store Addressing Modes
7.3
Vector Load/Store Width Encoding
7.4
Vector Unit-Stride Instructions
7.5
Vector Strided Instructions
7.6
Vector Indexed Instructions
7.7
Unit-stride Fault-Only-First Loads
7.8
Vector Load/Store Segment Instructions
7.9
Vector Load/Store Whole Register Instructions
8
Vector Memory Alignment Constraints
9
Vector Memory Consistency Model
10
Vector Arithmetic Instruction Formats
10.1
Vector Arithmetic Instruction encoding
10.2
Widening Vector Arithmetic Instructions
10.3
Narrowing Vector Arithmetic Instructions
11
Vector Integer Arithmetic Instructions
11.1
Vector Single-Width Integer Add and Subtract
11.2
Vector Widening Integer Add/Subtract
11.3
Vector Integer Extension
11.4
Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
11.5
Vector Bitwise Logical Instructions
11.6
Vector Single-Width Shift Instructions
11.7
Vector Narrowing Integer Right Shift Instructions
11.8
Vector Integer Compare Instructions
11.9
Vector Integer Min/Max Instructions
11.10
Vector Single-Width Integer Multiply Instructions
11.11
Vector Integer Divide Instructions
11.12
Vector Widening Integer Multiply Instructions
11.13
Vector Single-Width Integer Multiply-Add Instructions
11.14
Vector Widening Integer Multiply-Add Instructions
11.15
Vector Integer Merge Instructions
11.16
Vector Integer Move Instructions
12
Vector Fixed-Point Arithmetic Instructions
12.1
Vector Single-Width Saturating Add and Subtract
12.2
Vector Single-Width Averaging Add and Subtract
12.3
Vector Single-Width Fractional Multiply with Rounding and Saturation
12.4
Vector Single-Width Scaling Shift Instructions
12.5
Vector Narrowing Fixed-Point Clip Instructions
13
Vector Floating-Point Instructions
13.1
Vector Floating-Point Exception Flags
13.2
Vector Single-Width Floating-Point Add/Subtract Instructions
13.3
Vector Widening Floating-Point Add/Subtract Instructions
13.4
Vector Single-Width Floating-Point Multiply/Divide Instructions
13.5
Vector Widening Floating-Point Multiply
13.6
Vector Single-Width Floating-Point Fused Multiply-Add Instructions
13.7
Vector Widening Floating-Point Fused Multiply-Add Instructions
13.8
Vector Floating-Point Square-Root Instruction
13.9
Vector Floating-Point Reciprocal Square-Root Estimate Instruction
13.10
Vector Floating-Point Reciprocal Estimate Instruction
13.11
Vector Floating-Point MIN/MAX Instructions
13.12
Vector Floating-Point Sign-Injection Instructions
13.13
Vector Floating-Point Compare Instructions
13.14
Vector Floating-Point Classify Instruction
13.15
Vector Floating-Point Merge Instruction
13.16
Vector Floating-Point Move Instruction
13.17
Single-Width Floating-Point/Integer Type-Convert Instructions
13.18
Widening Floating-Point/Integer Type-Convert Instructions
13.19
Narrowing Floating-Point/Integer Type-Convert Instructions
14
Vector Reduction Operations
14.1
Vector Single-Width Integer Reduction Instructions
14.2
Vector Widening Integer Reduction Instructions
14.3
Vector Single-Width Floating-Point Reduction Instructions
14.4
Vector Widening Floating-Point Reduction Instructions
15
Vector Mask Instructions
15.1
Vector Mask-Register Logical Instructions
15.2
Vector count population in mask
vcpop.m
15.7
Example using vector mask instructions
15.8
Vector Iota Instruction
15.9
Vector Element Index Instruction
16
Vector Permutation Instructions
16.1
Integer Scalar Move Instructions
16.2
Floating-Point Scalar Move Instructions
16.3
Vector Slide Instructions
16.4
Vector Register Gather Instructions
16.5
Vector Compress Instruction
16.6
Whole Vector Register Move
17
Exception Handling
17.1
Precise vector traps
17.2
Imprecise vector traps
17.3
Selectable precise/imprecise traps
17.4
Swappable traps
18
Standard Vector Extensions
18.1
Zvl*: Minimum Vector Length Standard Extensions
18.2
Zve*: Vector Extensions for Embedded Processors
18.3
V: Vector Extension for Application Processors
19
Vector Instruction Listing
Appendix A: Vector Assembly Code Examples
A.1. Vector-vector add example
A.2. Example with mixed-width mask and compute.
A.3. Memcpy example
A.4. Conditional example
A.5. SAXPY example
A.6. SGEMM example
A.7. Division approximation example
A.8. Square root approximation example
A.9. C standard library strcmp example
Appendix B: Calling Convention (Not authoritative - Placeholder Only)
Appendix C: Fractional Lmul example