@@ -398,6 +398,8 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
398
398
399
399
* Fixed incorrect system register dependencies in Function Multi Versioning.
400
400
* Added a requirement for function version declaration in Function Multi Versioning.
401
+ * Fixed some rendering issues in the online Markdown documentation and fixed
402
+ a misplaced anchor.
401
403
402
404
### References
403
405
@@ -531,18 +533,14 @@ This document uses the following terms and abbreviations.
531
533
532
534
The following terms are used to specify C and C++ semantics:
533
535
534
- <!-- Do not remove the following `span`, it is needed to create an
535
- anchor that can be referred via an internal hyperlink to the paragraph
536
- following it. --><span id="abstract-machine"></span>
536
+ <span id="abstract-machine"></span>
537
537
538
538
**abstract machine**
539
539
540
540
> The conceptual machine that the C and C++ language standards use to define
541
541
> the behavior of programs.
542
542
543
- <!-- Do not remove the following `span`, it is needed to create an
544
- anchor that can be referred via an internal hyperlink to the paragraph
545
- following it. --><span id="evaluated-call"></span>
543
+ <span id="evaluated-call"></span>
546
544
547
545
**evaluated call**
548
546
@@ -552,9 +550,7 @@ following it. --><span id="evaluated-call"></span>
552
550
> For example, any calls that occur in the operand of a `sizeof`
553
551
> expression are not evaluated.
554
552
555
- <!-- Do not remove the following `span`, it is needed to create an
556
- anchor that can be referred via an internal hyperlink to the paragraph
557
- following it. --><span id="external-linkage"></span>
553
+ <span id="external-linkage"></span>
558
554
559
555
**external linkage**
560
556
@@ -566,9 +562,7 @@ following it. --><span id="external-linkage"></span>
566
562
> intrinsics are functions and, if so, what linkage they have. However,
567
563
> certain ACLE support functions are defined to have external linkage.
568
564
569
- <!-- Do not remove the following `span`, it is needed to create an
570
- anchor that can be referred via an internal hyperlink to the paragraph
571
- 2following it. --><span id="ill-formed"></span>
565
+ <span id="ill-formed"></span>
572
566
573
567
**ill-formed** programs or pieces of programs
574
568
@@ -586,9 +580,7 @@ anchor that can be referred via an internal hyperlink to the paragraph
586
580
> quality-of-implementation perspective, it is better to reject
587
581
> ill-formed programs wherever possible.
588
582
589
- <!-- Do not remove the following `span`, it is needed to create an
590
- anchor that can be referred via an internal hyperlink to the paragraph
591
- 2following it. --><span id="unprototyped-function"></span>
583
+ <span id="unprototyped-function"></span>
592
584
593
585
**unprototyped functions**
594
586
@@ -996,9 +988,7 @@ to be included, if the header files are available:
996
988
* [`<arm_fp16.h>`](#arm_fp16.h)
997
989
* [`<arm_bf16.h>`](#arm_bf16.h)
998
990
999
- <!-- Do not remove the following `span`, it is needed to create an
1000
- anchor that can be referred via an internal hyperlink to the section
1001
- following it. --><span id="arm_sve.h"></span>
991
+ <span id="arm_sve.h"></span>
1002
992
1003
993
### `<arm_sve.h>`
1004
994
@@ -1567,9 +1557,7 @@ feature also implies support for the Q flag.
1567
1557
ACLE 2.0 for A-profile. They are fully supported for M and R-profiles.
1568
1558
This macro is defined for AArch32 only.
1569
1559
1570
- <!-- Do not remove the following `span`, it is needed to create an
1571
- anchor that can be referred via an internal hyperlink to the section
1572
- following it. --><span id="32-bit-simd-instructions"></span>
1560
+ <span id="32-bit-simd-instructions"></span>
1573
1561
1574
1562
### 32-bit SIMD instructions
1575
1563
@@ -1917,6 +1905,8 @@ support Wireless MMX.
1917
1905
1918
1906
### 16-bit floating-point extensions
1919
1907
1908
+ <span id="16-bit-floating-point-data-processing-operations"></span>
1909
+
1920
1910
#### 16-bit floating-point data processing operations
1921
1911
1922
1912
`__ARM_FEATURE_FP16_SCALAR_ARITHMETIC` is defined to `1` if the
@@ -2103,10 +2093,6 @@ is only available when `__ARM_ARCH >= 8`.
2103
2093
`__ARM_FEATURE_QRDMX` is defined to 1 if SQRDMLAH and SQRDMLSH
2104
2094
instructions and their associated intrinsics are available.
2105
2095
2106
- <!-- Do not remove the following `span`, it is needed to create an
2107
- anchor that can be referred via an internal hyperlink to the section
2108
- following it. --> <span id="16-bit-floating-point-data-processing-operations"></span>
2109
-
2110
2096
#### Dot Product extension
2111
2097
2112
2098
`__ARM_FEATURE_DOTPROD` is defined if the dot product data manipulation
@@ -2161,9 +2147,7 @@ the SVE2 bit permute (FEAT_SVE_BitPerm) instructions and if the associated
2161
2147
ACLE intrinsics are available. This implies that `__ARM_FEATURE_SVE2` is
2162
2148
nonzero.
2163
2149
2164
- <!-- Do not remove the following `span`, it is needed to create an
2165
- anchor that can be referred via an internal hyperlink to the section
2166
- following it. --><span id="16-bit-to-64-bit-integer-widening-outer-product-intrinsics"></span>
2150
+ <span id="16-bit-to-64-bit-integer-widening-outer-product-intrinsics"></span>
2167
2151
2168
2152
#### 16-bit to 64-bit integer widening outer product intrinsics
2169
2153
@@ -3656,9 +3640,7 @@ operations [[G.191]](#G.191):
3656
3640
This example assumes the implementation preserves the Q flag on return
3657
3641
from an inline function.
3658
3642
3659
- <!-- Do not remove the following `span`, it is needed to create an
3660
- anchor that can be referred via an internal hyperlink to the section
3661
- following it. --> <span id="32-bit-simd-operations"></span>
3643
+ <span id="32-bit-simd-operations"></span>
3662
3644
3663
3645
## 32-bit SIMD Operations
3664
3646
@@ -5543,9 +5525,7 @@ The intrinsics in this section provide C and C++ programmers with a
5543
5525
simple programming model allowing easy access to code-generation of the
5544
5526
Advanced SIMD instructions for both AArch64 and AArch32 execution states.
5545
5527
5546
- <!-- Do not remove the following `span`, it is needed to create an
5547
- anchor that can be referred via an internal hyperlink to the section
5548
- following it. --> <span id="neon-intrinsics-concepts"></span>
5528
+ <span id="neon-intrinsics-concepts"></span>
5549
5529
5550
5530
### Concepts
5551
5531
@@ -5655,9 +5635,7 @@ mangling purposes.
5655
5635
5656
5636
`float64_t` is defined as an alias for `double`.
5657
5637
5658
- <!-- Do not remove the following `span`, it is needed to create an
5659
- anchor that can be referred via an internal hyperlink to the section
5660
- following it. --> <span id="16-bit-floating-point-arithmetic-scalar-intrinsics"></span>
5638
+ <span id="16-bit-floating-point-arithmetic-scalar-intrinsics"></span>
5661
5639
5662
5640
### 16-bit floating-point arithmetic scalar intrinsics
5663
5641
@@ -5682,9 +5660,7 @@ an implementation is required to ensure that including
5682
5660
To only enable support for the scalar 16-bit floating-point intrinsics,
5683
5661
the header `<arm_fp16.h>` may be included directly.
5684
5662
5685
- <!-- Do not remove the following `span`, it is needed to create an
5686
- anchor that can be referred via an internal hyperlink to the section
5687
- following it. --> <span id="16-bit-brain-floating-point-arithmetic-scalar-intrinsics"></span>
5663
+ <span id="16-bit-brain-floating-point-arithmetic-scalar-intrinsics"></span>
5688
5664
5689
5665
### 16-bit brain floating-point arithmetic scalar intrinsics
5690
5666
@@ -6251,9 +6227,7 @@ N1570 version of the C standard.
6251
6227
6252
6228
> Update the entries that refer to the clauses above.
6253
6229
6254
- <!-- Do not remove the following `span`, it is needed to create an
6255
- anchor that can be referred via an internal hyperlink to the section
6256
- following it. --><span id="sizeless-types-in-cxx"></span>
6230
+ <span id="sizeless-types-in-cxx"></span>
6257
6231
6258
6232
##### Sizeless types in C++
6259
6233
@@ -9063,9 +9037,7 @@ extended in the future.
9063
9037
9064
9038
### Introduction to streaming and non-streaming mode
9065
9039
9066
- <!-- Do not remove the following `span`, it is needed to create an
9067
- anchor that can be referred via an internal hyperlink to the paragraph
9068
- following it. --><span id="streaming-mode"></span>
9040
+ <span id="streaming-mode"></span>
9069
9041
9070
9042
The AArch64 architecture defines a concept called “streaming mode”,
9071
9043
controlled by a processor state bit called PSTATE.SM. At any given
@@ -9082,16 +9054,12 @@ Streaming mode has three main effects on C and C++ code:
9082
9054
vector length. See [Effect of streaming mode on VL](#effect-of-streaming-mode-on-vl)
9083
9055
for more details.
9084
9056
9085
- * <!-- Do not remove the following `span`, it is needed to create an
9086
- anchor that can be referred via an internal hyperlink to the paragraph
9087
- following it. --><span id="streaming-intrinsic"></span>
9057
+ * <span id="streaming-intrinsic"></span>
9088
9058
Some instructions can only be executed in streaming mode, which means
9089
9059
that their associated ACLE intrinsics can only be used in streaming mode.
9090
9060
These intrinsics are called “streaming intrinsics”.
9091
9061
9092
- * <!-- Do not remove the following `span`, it is needed to create an
9093
- anchor that can be referred via an internal hyperlink to the paragraph
9094
- following it. --><span id="non-streaming-intrinsic"></span>
9062
+ * <span id="non-streaming-intrinsic"></span>
9095
9063
Some other instructions can only be executed in non-streaming mode,
9096
9064
which means that their associated ACLE intrinsics can only be used
9097
9065
in non-streaming mode. These intrinsics are called
@@ -9114,9 +9082,7 @@ instructions go. For example, when stepping through a program in a
9114
9082
debugger, the processor mode might sometimes be different from the one
9115
9083
implied by the source code.
9116
9084
9117
- <!-- Do not remove the following `span`s, they are needed to create an
9118
- anchor that can be referred via an internal hyperlink to the paragraph
9119
- following it. --><span id="non-streaming-statement"></span>
9085
+ <span id="non-streaming-statement"></span>
9120
9086
<span id="streaming-statement"></span>
9121
9087
<span id="streaming-compatible-statement"></span>
9122
9088
@@ -9218,10 +9184,7 @@ following example situations:
9218
9184
the vector length. For example, this could be useful for
9219
9185
“length agnostic” SVE math routines.
9220
9186
9221
- <!-- Do not remove the following `span`s, they are needed to create an
9222
- anchor that can be referred via an internal hyperlink to the paragraph
9223
- following it. --><span id="streaming-type"></span><span
9224
- id="streaming-compatible-type"></span>
9187
+ <span id="streaming-type"></span><span id="streaming-compatible-type"></span>
9225
9188
9226
9189
For this reason, the “streaming”, “non-streaming” and
9227
9190
“streaming-compatible” classification extends to function types:
@@ -9360,9 +9323,7 @@ the size specified by the non-streaming vector length.
9360
9323
The following definitions are useful when describing the consequences
9361
9324
of this behavior on the vector length:
9362
9325
9363
- * <!-- Do not remove the following `span`, it is needed to create an
9364
- anchor that can be referred via an internal hyperlink to the paragraph
9365
- following it. --><span id="vl-dependent"></span>
9326
+ * <span id="vl-dependent"></span>
9366
9327
A type T is said to be “VL-dependent” if an object of type T created
9367
9328
while the [abstract machine](#abstract-machine) is in streaming mode
9368
9329
has a different size from an object of type T created while the abstract
@@ -9378,15 +9339,11 @@ following it. --><span id="vl-dependent"></span>
9378
9339
it has been created. The “VL-dependent” classification instead
9379
9340
decides when it is valid to access the object, as described below.
9380
9341
9381
- * <!-- Do not remove the following `span`, it is needed to create an
9382
- anchor that can be referred via an internal hyperlink to the paragraph
9383
- following it. --><span id="streaming-object"></span>
9342
+ * <span id="streaming-object"></span>
9384
9343
A VL-dependent object created while the abstract machine is in
9385
9344
streaming mode is called a “streaming object”.
9386
9345
9387
- * <!-- Do not remove the following `span`, it is needed to create an
9388
- anchor that can be referred via an internal hyperlink to the paragraph
9389
- following it. --><span id="non-streaming-object"></span>
9346
+ * <span id="non-streaming-object"></span>
9390
9347
A VL-dependent object created while the abstract machine is in
9391
9348
non-streaming mode is called a “non-streaming object”.
9392
9349
@@ -9403,9 +9360,7 @@ then the behavior is undefined:
9403
9360
9404
9361
If, during the execution of a program, a function F1 calls a function F2, then:
9405
9362
9406
- * <!-- Do not remove the following `span`s, they are needed to create an
9407
- anchor that can be referred via an internal hyperlink to the paragraph
9408
- following it. --><span id="streaming-caller"></span>
9363
+ * <span id="streaming-caller"></span>
9409
9364
<span id="non-streaming-caller"></span>
9410
9365
F1 is said to be a “streaming caller” if:
9411
9366
@@ -9416,9 +9371,7 @@ following it. --><span id="streaming-caller"></span>
9416
9371
9417
9372
Otherwise, F1 is said to be a “non-streaming caller”.
9418
9373
9419
- * <!-- Do not remove the following `span`s, they are needed to create an
9420
- anchor that can be referred via an internal hyperlink to the paragraph
9421
- following it. --><span id="streaming-callee"></span>
9374
+ * <span id="streaming-callee"></span>
9422
9375
<span id="non-streaming-callee"></span>
9423
9376
F2 is said to be a “streaming callee” if:
9424
9377
@@ -9587,9 +9540,7 @@ SME provides an area of storage called ZA, of size SVL.B×SVL.B bytes.
9587
9540
It also provides a processor state bit called PSTATE.ZA to control
9588
9541
whether ZA is enabled.
9589
9542
9590
- <!-- Do not remove the following `span`, they are needed to create an
9591
- anchor that can be referred via an internal hyperlink to the paragraph
9592
- following it. --><span id="za-state"></span>
9543
+ <span id="za-state"></span>
9593
9544
9594
9545
In C and C++ code, access to ZA is controlled at function granularity:
9595
9546
a function either [uses](#uses-state) ZA or it does not. Another way to
@@ -9626,9 +9577,7 @@ lookup table called ZT0 which can be accessed through specialized instructions.
9626
9577
ZT0 is architecturally linked to ZA such that changing PSTATE.ZA enables or
9627
9578
disables both ZA and ZT0 simultaneously.
9628
9579
9629
- <!-- Do not remove the following `span`, they are needed to create an
9630
- anchor that can be referred via an internal hyperlink to the section
9631
- following it. --><span id="zt-state"></span>
9580
+ <span id="zt-state"></span>
9632
9581
This means that when the hardware supports SME2, a function that has
9633
9582
[ZA state](#za-state) also has ZT state.
9634
9583
@@ -9687,9 +9636,7 @@ The function type attributes cannot be used with K&R-style
9687
9636
9688
9637
### SME keyword attributes related to streaming mode
9689
9638
9690
- <!-- Do not remove the following `span`, it is needed to create an
9691
- anchor that can be referred via an internal hyperlink to the paragraph
9692
- following it. --><span id="arm_streaming"></span>
9639
+ <span id="arm_streaming"></span>
9693
9640
9694
9641
#### `__arm_streaming`
9695
9642
@@ -9715,9 +9662,7 @@ generally associated with non-streaming Advanced SIMD code.
9715
9662
See [Managing streaming mode across function boundaries](#managing-streaming-mode-across-function-boundaries)
9716
9663
for more information.
9717
9664
9718
- <!-- Do not remove the following `span`, it is needed to create an
9719
- anchor that can be referred via an internal hyperlink to the paragraph
9720
- following it. --><span id="arm_streaming_compatible"></span>
9665
+ <span id="arm_streaming_compatible"></span>
9721
9666
9722
9667
#### `__arm_streaming_compatible`
9723
9668
@@ -9745,9 +9690,7 @@ is generally associated only with non-streaming Advanced SIMD code.
9745
9690
See [Managing streaming mode across function boundaries](#managing-streaming-mode-across-function-boundaries)
9746
9691
for more information.
9747
9692
9748
- <!-- Do not remove the following `span`, it is needed to create an
9749
- anchor that can be referred via an internal hyperlink to the paragraph
9750
- following it. --><span id="arm_locally_streaming"></span>
9693
+ <span id="arm_locally_streaming"></span>
9751
9694
9752
9695
#### `__arm_locally_streaming`
9753
9696
@@ -9842,9 +9785,7 @@ specified in this section.
9842
9785
> and then return the top bit of X0. See [[AAPCS64]](#AAPCS64) for
9843
9786
> more details about `__arm_sme_state`.
9844
9787
9845
- <!-- Do not remove the following `span`, they are needed to create an
9846
- anchor that can be referred via an internal hyperlink to the paragraph
9847
- following it. --><span id="arm_in_streaming_mode"></span>
9788
+ <span id="arm_in_streaming_mode"></span>
9848
9789
9849
9790
**`__arm_in_streaming_mode()`**
9850
9791
@@ -9855,9 +9796,7 @@ following it. --><span id="arm_in_streaming_mode"></span>
9855
9796
> However, the call is not semantically a constant expression even in
9856
9797
> those cases.
9857
9798
9858
- <!-- Do not remove the following `span`, they are needed to create an
9859
- anchor that can be referred via an internal hyperlink to the paragraph
9860
- following it. --><span id="arm_za_disable"></span>
9799
+ <span id="arm_za_disable"></span>
9861
9800
9862
9801
**`__arm_za_disable()`**
9863
9802
0 commit comments