🔬This is a nightly-only experimental API. (
stdsimd
#48556)Available on AArch64 only.
Expand description
ARM’s Transactional Memory Extensions (TME).
This CPU feature is available on Aarch64 - A architecture profile. This feature is in the non-neon feature set. TME specific vendor documentation can be found TME Intrinsics Introduction.
The reference is ACLE Q4 2019.
ACLE has a section for TME extensions and state masks for aborts and failure codes. ARM A64 Architecture Register Datasheet also describes possible failure code scenarios.
Constants
- _TMFAILURE_CNCLExperimentalTransaction executed a TCANCEL instruction
- _TMFAILURE_DBGExperimentalTransaction aborted due to a debug trap.
- _TMFAILURE_ERRExperimentalTransaction aborted because a non-permissible operation was attempted
- _TMFAILURE_IMPExperimentalFallback error type for any other reason
- _TMFAILURE_INTExperimentalTransaction failed from interrupt
- _TMFAILURE_MEMExperimentalTransaction aborted because a conflict occurred
- _TMFAILURE_NESTExperimentalTransaction aborted due to transactional nesting level was exceeded
- _TMFAILURE_REASONExperimentalExtraction mask for failure reason
- _TMFAILURE_RTRYExperimentalTransaction retry is possible.
- _TMFAILURE_SIZEExperimentalTransaction aborted due to read or write set limit was exceeded
- _TMFAILURE_TRIVIALExperimentalIndicates a TRIVIAL version of TM is available
- _TMSTART_SUCCESSExperimentalTransaction successfully started.
Functions
- Cancels the current transaction and discards all state modifications that were performed transactionally.
- Commits the current transaction. For a nested transaction, the only effect is that the transactional nesting depth is decreased. For an outer transaction, the state modifications performed transactionally are committed to the architectural state.
- Starts a new transaction. When the transaction starts successfully the return value is 0. If the transaction fails, all state modifications are discarded and a cause of the failure is encoded in the return value.
- Tests if executing inside a transaction. If no transaction is currently executing, the return value is 0. Otherwise, this intrinsic returns the depth of the transaction.