@@ -15,7 +15,7 @@ This spec includes the complete set of currently frozen vector
1515instructions. Other instructions that have been considered during
1616development but are not present in this document are not included in
1717the review and ratification process, and may be completely revised or
18- abandoned. Section <<sec-vector-extensions>> lists the standard
18+ abandoned. <<sec-vector-extensions>> lists the standard
1919vector extensions and which instructions and element widths are
2020supported by each extension.
2121
@@ -27,7 +27,7 @@ Each hart supporting a vector extension defines two parameters:
2727must be a power of 2.
2828. The number of bits in a single vector register, _VLEN_ {ge} ELEN, which must be a power of 2, and must be no greater than 2^16^.
2929
30- Standard vector extensions (Section <<sec-vector-extensions>>) and
30+ Standard vector extensions (<<sec-vector-extensions>>) and
3131architecture profiles may set further constraints on _ELEN_ and _VLEN_.
3232
3333NOTE: Future extensions may allow ELEN {gt} VLEN by holding one
@@ -350,7 +350,7 @@ These two bits modify the behavior of destination tail elements and
350350destination inactive masked-off elements respectively during the
351351execution of vector instructions. The tail and inactive sets contain
352352element positions that are not receiving new results during a vector
353- operation, as defined in Section <<sec-inactive-defs>>.
353+ operation, as defined in <<sec-inactive-defs>>.
354354
355355All systems must support all four options:
356356
@@ -478,7 +478,7 @@ instruction variants.
478478
479479The `vl` register holds an unsigned integer specifying the number of
480480elements to be updated with results from a vector instruction, as
481- further detailed in Section <<sec-inactive-defs>>.
481+ further detailed in <<sec-inactive-defs>>.
482482
483483NOTE: The number of bits implemented in `vl` depends on the
484484implementation's maximum vector length of the smallest supported
@@ -502,7 +502,7 @@ settings which require them to be saved and restored.
502502
503503The _XLEN_-bit-wide read-write `vstart` CSR specifies the index of the
504504first element to be executed by a vector instruction, as described in
505- Section <<sec-inactive-defs>>.
505+ <<sec-inactive-defs>>.
506506
507507Normally, `vstart` is only written by hardware on a trap on a vector
508508instruction, with the `vstart` value representing the element on which
@@ -993,8 +993,8 @@ Masking is supported on many vector instructions. Element operations
993993that are masked off (inactive) never generate exceptions. The
994994destination vector register elements corresponding to masked-off
995995elements are handled with either a mask-undisturbed or mask-agnostic
996- policy depending on the setting of the `vma` bit in `vtype` (Section
997- <<sec-agnostic>>).
996+ policy depending on the setting of the `vma` bit in `vtype`
997+ ( <<sec-agnostic>>).
998998
999999The mask value used to control execution of a masked vector
10001000instruction is always supplied by vector register `v0`.
@@ -1017,7 +1017,7 @@ Other vector registers can be used to hold working mask values, and
10171017mask vector logical operations are provided to perform predicate
10181018calculations. [[sec-mask-vector-logical]]
10191019
1020- As specified in Section <<sec-agnostic>>, mask destination values are
1020+ As specified in <<sec-agnostic>>, mask destination values are
10211021always treated as tail-agnostic, regardless of the setting of `vta`.
10221022
10231023[[sec-vector-mask-encoding]]
@@ -1489,7 +1489,7 @@ regular vector loads and stores, `nf`=0, indicating that a single
14891489value is moved between a vector register group and memory at each
14901490element position. Larger values in the `nf` field are used to access
14911491multiple contiguous fields within a segment as described below in
1492- Section <<sec-aos>>.
1492+ <<sec-aos>>.
14931493
14941494The `nf[2:0]` field also encodes the number of whole vector registers
14951495to transfer for the whole vector register load/store instructions.
@@ -2325,7 +2325,7 @@ NOTE: The floating-point widening operations were changed to `vfw*`
23252325from `vwf*` to be more consistent with any scalar widening
23262326floating-point operations that will be written as `fw*`.
23272327
2328- Widening instruction encodings must follow the constraints in Section
2328+ Widening instruction encodings must follow the constraints in
23292329<<sec-vec-operands>>.
23302330
23312331[[sec-narrowing]]
@@ -2360,7 +2360,7 @@ vnop.wv vd, vs2, vs1, vm # integer vector-vector vd[i] = vs2[i] op vs1[i]
23602360vnop.wx vd, vs2, rs1, vm # integer vector-scalar vd[i] = vs2[i] op x[rs1]
23612361----
23622362
2363- Narrowing instruction encodings must follow the constraints in Section
2363+ Narrowing instruction encodings must follow the constraints in
23642364<<sec-vec-operands>>.
23652365
23662366[[sec-vector-integer]]
@@ -2469,7 +2469,7 @@ the second to generate the carry output (single bit encoded as a mask
24692469boolean).
24702470
24712471The carry inputs and outputs are represented using the mask register
2472- layout as described in Section <<sec-mask-register-layout>>. Due to
2472+ layout as described in <<sec-mask-register-layout>>. Due to
24732473encoding constraints, the carry input must come from the implicit `v0`
24742474register, but carry outputs can be written to any vector register that
24752475respects the source/destination overlap restrictions.
@@ -2650,7 +2650,7 @@ pseudoinstruction is provided `vncvt.x.x.w vd,vs,vm` = `vnsrl.wx vd,vs,x0,vm`.
26502650The following integer compare instructions write 1 to the destination
26512651mask register element if the comparison evaluates to true, and 0
26522652otherwise. The destination mask vector is always held in a single
2653- vector register, with a layout of elements as described in Section
2653+ vector register, with a layout of elements as described in
26542654<<sec-mask-register-layout>>. The destination mask vector register
26552655may be the same as the source vector mask register (`v0`).
26562656
@@ -3262,7 +3262,7 @@ The vector floating-point instructions have the same behavior as the
32623262scalar floating-point instructions with regard to NaNs.
32633263
32643264Scalar values for floating-point vector-scalar operations are sourced
3265- as described in Section <<sec-arithmetic-encoding>>.
3265+ as described in <<sec-arithmetic-encoding>>.
32663266
32673267==== Vector Floating-Point Exception Flags
32683268
@@ -3611,7 +3611,7 @@ pseudoinstruction is provided: `vfabs.v vd,vs` = `vfsgnjx.vv vd,vs,vs`.
36113611These vector FP compare instructions compare two source operands and
36123612write the comparison result to a mask register. The destination mask
36133613vector is always held in a single vector register, with a layout of
3614- elements as described in Section <<sec-mask-register-layout>>. The
3614+ elements as described in <<sec-mask-register-layout>>. The
36153615destination mask vector register may be the same as the source vector
36163616mask register (`v0`). Compares write mask registers, and so always
36173617operate under a tail-agnostic policy.
@@ -4140,7 +4140,7 @@ assembler instruction alias `vpopc.m` is being retained for software
41404140compatibility.
41414141
41424142The source operand is a single vector register holding mask register
4143- values as described in Section <<sec-mask-register-layout>>.
4143+ values as described in <<sec-mask-register-layout>>.
41444144
41454145The `vcpop.m` instruction counts the number of mask elements of the
41464146active elements of the vector source mask register that have the value
@@ -4554,8 +4554,8 @@ vslidedown.vi vd, vs2, uimm, vm # vd[i] = vs2[i+uimm]
45544554
45554555For `vslidedown`, the value in `vl` specifies the maximum number of
45564556destination elements that are written. The remaining elements past
4557- `vl` are handled according to the current tail policy (Section
4558- <<sec-agnostic>>).
4557+ `vl` are handled according to the current tail policy
4558+ ( <<sec-agnostic>>).
45594559
45604560The start index (_OFFSET_) for the source can be either specified
45614561using an unsigned integer in the `x` register specified by `rs1`, or a
@@ -4596,8 +4596,8 @@ vector register group.
45964596
45974597The `vl` register specifies the maximum number of destination vector
45984598register elements updated with source values, and remaining elements
4599- past `vl` are handled according to the current tail policy (Section
4600- <<sec-agnostic>>).
4599+ past `vl` are handled according to the current tail policy
4600+ ( <<sec-agnostic>>).
46014601
46024602
46034603----
@@ -4631,8 +4631,8 @@ _i_ in the destination vector register group.
46314631
46324632The `vl` register specifies the maximum number of destination vector
46334633register elements written with source values, and remaining elements
4634- past `vl` are handled according to the current tail policy (Section
4635- <<sec-agnostic>>).
4634+ past `vl` are handled according to the current tail policy
4635+ ( <<sec-agnostic>>).
46364636
46374637----
46384638vslide1down.vx vd, vs2, rs1, vm # vd[i] = vs2[i+1], vd[vl-1]=x[rs1]
@@ -4680,7 +4680,7 @@ treated as unsigned integers. The source vector can be read at any
46804680index < VLMAX regardless of `vl`. The maximum number of elements to write to
46814681the destination register is given by `vl`, and the remaining elements
46824682past `vl` are handled according to the current tail policy
4683- (Section <<sec-agnostic>>). The operation can be masked, and the mask
4683+ (<<sec-agnostic>>). The operation can be masked, and the mask
46844684undisturbed/agnostic policy is followed for inactive elements.
46854685
46864686----
@@ -4734,8 +4734,8 @@ The vector mask register specified by `vs1` indicates which of the
47344734first `vl` elements of vector register group `vs2` should be extracted
47354735and packed into contiguous elements at the beginning of vector
47364736register `vd`. The remaining elements of `vd` are treated as tail
4737- elements according to the current tail policy (Section
4738- <<sec-agnostic>>).
4737+ elements according to the current tail policy
4738+ ( <<sec-agnostic>>).
47394739
47404740----
47414741Example use of vcompress instruction
@@ -5032,14 +5032,14 @@ All Zve* extensions provide support for EEW of 8, 16, and 32, and
50325032Zve64* extensions also support EEW of 64.
50335033
50345034All Zve* extensions support the vector configuration instructions
5035- (Section <<sec-vector-config>>).
5035+ (<<sec-vector-config>>).
50365036
50375037All Zve* extensions support all vector load and store instructions
5038- (Section <<sec-vector-memory>>), except Zve64* extensions do not
5038+ (<<sec-vector-memory>>), except Zve64* extensions do not
50395039support EEW=64 for index values when XLEN=32.
50405040
5041- All Zve* extensions support all vector integer instructions (Section
5042- <<sec-vector-integer>>), except that the `vmulh` integer multiply
5041+ All Zve* extensions support all vector integer instructions
5042+ ( <<sec-vector-integer>>), except that the `vmulh` integer multiply
50435043variants that return the high word of the product (`vmulh.vv`,
50445044`vmulh.vx`, `vmulhu.vv`, `vmulhu.vx`, `vmulhsu.vv`, `vmulhsu.vx`) are
50455045not included for EEW=64 in Zve64*.
@@ -5055,27 +5055,27 @@ NOTE: As with `vmulh`, `vsmul` requires a large amount of additional
50555055logic, and 64-bit fixed-point multiplies are relatively rare.
50565056
50575057All Zve* extensions support all vector integer single-width and
5058- widening reduction operations (Sections <<sec-vector-integer-reduce>>,
5058+ widening reduction operations (<<sec-vector-integer-reduce>>,
50595059<<sec-vector-integer-reduce-widen>>).
50605060
5061- All Zve* extensions support all vector mask instructions (Section
5062- <<sec-vector-mask>>).
5061+ All Zve* extensions support all vector mask instructions
5062+ ( <<sec-vector-mask>>).
50635063
50645064All Zve* extensions support all vector permutation instructions
5065- (Section <<sec-vector-permute>>), except that Zve32x and Zve64x
5065+ (<<sec-vector-permute>>), except that Zve32x and Zve64x
50665066do not include those with floating-point operands, and Zve64f does not include those
50675067with EEW=64 floating-point operands.
50685068
50695069The Zve32x extension depends on the Zicsr extension.
50705070The Zve32f and Zve64f extensions depend upon the F extension,
50715071and implement all
5072- vector floating-point instructions (Section <<sec-vector-float>>) for
5072+ vector floating-point instructions (<<sec-vector-float>>) for
50735073floating-point operands with EEW=32. Vector single-width floating-point reduction
50745074operations (<<sec-vector-float-reduce>>) for EEW=32 are supported.
50755075
50765076The Zve64d extension depends upon the D extension,
50775077and implements all vector
5078- floating-point instructions (Section <<sec-vector-float>>) for
5078+ floating-point instructions (<<sec-vector-float>>) for
50795079floating-point operands with EEW=32 or EEW=64 (including widening
50805080instructions and conversions between FP32 and FP64). Vector
50815081single-width floating-point reductions (<<sec-vector-float-reduce>>)
@@ -5106,31 +5106,31 @@ processed without stripmining using four vector register groups.
51065106The V extension supports EEW of 8, 16, and 32, and 64.
51075107
51085108The V extension supports the vector configuration instructions
5109- (Section <<sec-vector-config>>).
5109+ (<<sec-vector-config>>).
51105110
51115111The V extension supports all vector load and store instructions
5112- (Section <<sec-vector-memory>>), except the V extension does not
5112+ (<<sec-vector-memory>>), except the V extension does not
51135113support EEW=64 for index values when XLEN=32.
51145114
5115- The V extension supports all vector integer instructions (Section
5116- <<sec-vector-integer>>).
5115+ The V extension supports all vector integer instructions
5116+ ( <<sec-vector-integer>>).
51175117
51185118The V extension supports all vector fixed-point arithmetic
51195119instructions (<<sec-vector-fixed-point>>).
51205120
51215121The V extension supports all vector integer single-width and
5122- widening reduction operations (Sections <<sec-vector-integer-reduce>>,
5122+ widening reduction operations (<<sec-vector-integer-reduce>>,
51235123<<sec-vector-integer-reduce-widen>>).
51245124
5125- The V extension supports all vector mask instructions (Section
5126- <<sec-vector-mask>>).
5125+ The V extension supports all vector mask instructions
5126+ ( <<sec-vector-mask>>).
51275127
5128- The V extension supports all vector permutation instructions (Section
5129- <<sec-vector-permute>>).
5128+ The V extension supports all vector permutation instructions
5129+ ( <<sec-vector-permute>>).
51305130
51315131The V extension depends upon the F and D
51325132extensions, and implements all vector floating-point instructions
5133- (Section <<sec-vector-float>>) for floating-point operands with EEW=32
5133+ (<<sec-vector-float>>) for floating-point operands with EEW=32
51345134or EEW=64 (including widening instructions and conversions between
51355135FP32 and FP64). Vector single-width floating-point reductions
51365136(<<sec-vector-float-reduce>>) for EEW=32 and EEW=64 are supported as
@@ -5159,7 +5159,7 @@ The Zvfhmin extension depends on the Zve32f extension.
51595159
51605160The Zvfh extension provides support for vectors of IEEE 754-2008
51615161binary16 values.
5162- When the Zvfh extension is implemented, all instructions in Sections
5162+ When the Zvfh extension is implemented, all instructions in
51635163<<sec-vector-float>>, <<sec-vector-float-reduce>>,
51645164<<sec-vector-float-reduce-widen>>, <<sec-vector-float-move>>,
51655165<<sec-vfslide1up>>, and <<sec-vfslide1down>>
0 commit comments