@@ -464,6 +464,7 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
464464
465465* Added feature test macro for FEAT_SSVE_FEXPA.
466466* Added feature test macro for FEAT_CSSC.
467+ * Added support for producer-consumer data placement hints.
467468
468469### References
469470
@@ -1826,6 +1827,13 @@ The `__ARM_FEATURE_SYSREG128` macro can only be implemented in the AArch64
18261827execution state. Intrinsics for the use of these instructions are specified in
18271828[Special register intrinsics](#special-register-intrinsics).
18281829
1830+ ### Producer-consumer data placement hints
1831+
1832+ `__ARM_FEATURE_PCDPHINT` is defined to `1` if there is hardware
1833+ support for the producer-consumer data placement hints (FEAT_PCDPHINT)
1834+ instructions and if their associated intrinsics are
1835+ available.
1836+
18291837## Floating-point and vector hardware
18301838
18311839### Hardware floating point
@@ -2604,6 +2612,7 @@ be found in [[BA]](#BA).
26042612| [`__ARM_FEATURE_PAC_DEFAULT`](#pointer-authentication) | Pointer authentication protection | 0x5 |
26052613| [`__ARM_FEATURE_PAUTH`](#pointer-authentication) | Pointer Authentication Extension (FEAT_PAuth) | 1 |
26062614| [`__ARM_FEATURE_PAUTH_LR`](#pointer-authentication) | Armv9.5-A Enhancements to Pointer Authentication Extension (FEAT_PAuth_LR) | 1 |
2615+ | [`__ARM_FEATURE_PCDPHINT`](#producer-consumer-data-placement-hints) | Producer-consumer data placement hint instructions (FEAT_PCDPHINT) | 1 |
26072616| [`__ARM_FEATURE_QBIT`](#q-saturation-flag) | Q (saturation) flag (32-bit-only) | 1 |
26082617| [`__ARM_FEATURE_QRDMX`](#rounding-doubling-multiplies) | SQRDMLxH instructions and associated intrinsics availability | 1 |
26092618| [`__ARM_FEATURE_RCPC`](#rcpc) | Release Consistent processor consistent Model (64-bit-only) | 1 |
@@ -3574,6 +3583,16 @@ as in `__pldx`.
35743583`__pldx` and `__plix` arguments cache level and retention policy
35753584are ignored on unsupported targets.
35763585
3586+ ### Intent to read prefetch
3587+
3588+ ``` c
3589+ void __ir(void const volatile *addr);
3590+ ```
3591+ Generates an intent to read on update prefetch instruction. The argument should
3592+ be any expression that may designate a data address. This intrinsic does
3593+ not require specification of cache level or retention policy. Support for this
3594+ intrinsic is indicated by `__ARM_FEATURE_PCDPHINT`.
3595+
35773596## NOP
35783597
35793598``` c
@@ -4746,6 +4765,56 @@ stored to memory is modified by replacing the low 32 bits of
47464765`value.val[0]` with the contents of the `ACCDATA_EL1` system register.
47474766The returned value is the same as for `__arm_st64bv`.
47484767
4768+ ## Atomic store with PCDPHINT intrinsics
4769+
4770+ These intrinsics provide an atomic store intrinsic, which will
4771+ make use of the `STSHH` hint instruction immediately followed by the
4772+ associated store instruction.
4773+ This intrinsic is available when `__ARM_FEATURE_PCDPHINT` is defined.
4774+
4775+ To access these intrinsics, `<arm_acle.h>` should be included.
4776+
4777+ ``` c
4778+ void __arm_stshh_u8(void const volatile *addr,
4779+ uint8_t data,
4780+ unsigned int mem, /* Memory order */
4781+ unsigned int ret); /* Retention Policy */
4782+ ```
4783+
4784+ ``` c
4785+ void __arm_stshh_u16(void const volatile *addr,
4786+ uint16_t data,
4787+ unsigned int mem, /* Memory order */
4788+ unsigned int ret); /* Retention Policy */
4789+ ```
4790+
4791+ ``` c
4792+ void __arm_stshh_u32(void const volatile *addr,
4793+ uint32_t data,
4794+ unsigned int mem, /* Memory order */
4795+ unsigned int ret); /* Retention Policy */
4796+ ```
4797+
4798+ ``` c
4799+ void __arm_stshh_u64(void const volatile *addr,
4800+ uint64_t data,
4801+ unsigned int mem, /* Memory order */
4802+ unsigned int ret); /* Retention Policy */
4803+ ```
4804+ The first argument in these intrinsics is a pointer `addr` containing an address.
4805+ The second argument `data` is the data which is to be stored.
4806+ The 3rd and 4th arguments can contain the following values.
4807+
4808+ | **Memory Order** | **Value** | **Summary** |
4809+ | ------------------| --------- | -------------------------------------------------------------------------------------------------- |
4810+ | Relaxed | 0 | No constraints imposed on other reads or writes, only this operation's atomicity is guaranteed. |
4811+ | Release | 1 | No reads or writes in the current thread can be reordered after this store. |
4812+
4813+ | **Retention Policy** | **Value** | **Summary** |
4814+ | -------------------- | --------- | -------------------------------------------------------------------------------- |
4815+ | KEEP | 0 | Signals to retain the updated location in the local cache of the updating PE. |
4816+ | STRM | 1 | Signals to not retain the updated location in the local cache of the updating PE. |
4817+
47494818# Custom Datapath Extension
47504819
47514820The intrinsics in this section provide access to instructions in the
0 commit comments