Skip to content

Commit f73cc1c

Browse files
committed
Remove support for Transactional Memory Extension (TME)
The Transactional Memory Extension (TME) was introduced as part of Armv9-A but has not been adopted by the ecosystem. This mirrors what Arm has observed with similar extensions in other architectures. Support for TME has now been officially withdrawn, as noted here: ``` FEAT_TME is withdrawn from all future versions of Arm® Architecture Reference Manual for A-profile architecture. ``` referenced in Known Issue D24093, documented here: https://developer.arm.com/documentation/102105/lb-05/
1 parent c8b44d0 commit f73cc1c

File tree

1 file changed

+1
-120
lines changed

1 file changed

+1
-120
lines changed

main/acle.md

Lines changed: 1 addition & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,7 @@ Armv8.4-A [[ARMARMv84]](#ARMARMv84). Support is added for the Dot Product intrin
467467
* Added feature test macro for FEAT_CSSC.
468468
* Added support for modal 8-bit floating point matrix multiply-accumulate widening intrinsics.
469469
* Added support for 16-bit floating point matrix multiply-accumulate widening intrinsics.
470+
* Removed all references to Transactional Memory Extension (TME)
470471

471472
### References
472473

@@ -1769,13 +1770,6 @@ the Armv8.1-A [[ARMARMv81]](#ARMARMv81) architecture are supported on this targe
17691770
Note: It is strongly recommended that standardized C11/C++11 atomics are used to
17701771
implement atomic operations in user code.
17711772

1772-
### Transactional Memory Extension
1773-
1774-
`__ARM_FEATURE_TME` is defined to `1` if the Transactional Memory
1775-
Extension instructions are supported in hardware and intrinsics defined
1776-
in [Transactional Memory Extension (TME)
1777-
intrinsics](#transactional-memory-extension-tme-intrinsics) are available.
1778-
17791773
### Armv8.7-A Load/Store 64 Byte extension
17801774

17811775
`__ARM_FEATURE_LS64` is defined to 1 if the Armv8.7-A `LD64B`,
@@ -14486,119 +14480,6 @@ The MVE load and store instructions provide for alignment assertions, which may
1448614480
speed up access to aligned data (and will fault access to unaligned data). The
1448714481
MVE intrinsics do not directly provide a means for asserting alignment.
1448814482

14489-
# Transactional Memory Extension (TME) intrinsics
14490-
14491-
## Introduction
14492-
14493-
This section describes the intrinsics for the instructions of the
14494-
Transactional Memory Extension (TME). TME adds support for transactional
14495-
execution where transactions are started and
14496-
committed by a set of new instructions. The TME instructions are present
14497-
in the AArch64 execution state only.
14498-
14499-
TME is designed to improve performance in cases where larger system scaling
14500-
requires atomic and isolated access to data structures whose composition is
14501-
dynamic in nature and therefore not readily amenable to fine-grained locking
14502-
or lock-free approaches.
14503-
14504-
TME transactions are *isolated*. This means that transactional stores are
14505-
hidden from other observers, and transactional loads cannot see stores from
14506-
other observers until the transaction commits. Also, if the transaction fails
14507-
then stores to memory and writes to registers by the transaction are discarded
14508-
and the processor returns to the state it had when the transaction started.
14509-
14510-
TME transactions are *best-effort*. This means that the architecture does not
14511-
guarantee success for any transaction. The architecture requires that all
14512-
transactions specify a failure handler allowing the software to fallback to a
14513-
non-transactional alternative to provide guarantees of forward progress.
14514-
14515-
TME defines *flattened nesting* of transactions, where nested transactions are
14516-
subsumed by the outer transaction. This means that the effects of a nested
14517-
transaction do not become visible to other observers until the outer
14518-
transaction commits. When a nested transaction fails it causes the
14519-
outer transaction, and all nested transactions within, to fail.
14520-
14521-
The TME intrinsics are available when `__ARM_FEATURE_TME` is defined.
14522-
14523-
## Failure definitions
14524-
14525-
Transactions can fail due to various causes. The following macros
14526-
are defined to help use or detect these causes.
14527-
14528-
``` c
14529-
#define _TMFAILURE_REASON 0x00007fffu
14530-
#define _TMFAILURE_RTRY 0x00008000u
14531-
#define _TMFAILURE_CNCL 0x00010000u
14532-
#define _TMFAILURE_MEM 0x00020000u
14533-
#define _TMFAILURE_IMP 0x00040000u
14534-
#define _TMFAILURE_ERR 0x00080000u
14535-
#define _TMFAILURE_SIZE 0x00100000u
14536-
#define _TMFAILURE_NEST 0x00200000u
14537-
#define _TMFAILURE_DBG 0x00400000u
14538-
#define _TMFAILURE_INT 0x00800000u
14539-
#define _TMFAILURE_TRIVIAL 0x01000000u
14540-
```
14541-
14542-
## Intrinsics
14543-
14544-
``` c
14545-
uint64_t __tstart (void);
14546-
```
14547-
14548-
Starts a new transaction. When the transaction starts successfully the return
14549-
value is 0. If the transaction fails, all state modifications are discarded
14550-
and a cause of the failure is encoded in the return value. The macros
14551-
defined in [Failure definitions](#failure-definitions) can be used
14552-
to detect the cause of the failure.
14553-
14554-
``` c
14555-
void __tcommit (void);
14556-
```
14557-
14558-
Commits the current transaction. For a nested transaction, the only effect
14559-
is that the transactional nesting depth is decreased. For an outer transaction,
14560-
the state modifications performed transactionally are committed to the
14561-
architectural state.
14562-
14563-
``` c
14564-
void __tcancel (/*constant*/ uint64_t);
14565-
```
14566-
14567-
Cancels the current transaction and discards all state modifications that
14568-
were performed transactionally. The intrinsic takes a 16-bit immediate input that encodes
14569-
the cancellation reason. This input could be given as
14570-
14571-
``` c
14572-
__tcancel (_TMFAILURE_RTRY | (failure_reason & _TMFAILURE_REASON));
14573-
```
14574-
14575-
if retry is true or
14576-
14577-
``` c
14578-
__tcancel (failure_reason & _TMFAILURE_REASON);
14579-
```
14580-
14581-
if retry is false.
14582-
14583-
``` c
14584-
uint64_t __ttest (void);
14585-
```
14586-
14587-
Tests if executing inside a transaction. If no transaction is currently
14588-
executing, the return value is 0. Otherwise, this intrinsic returns the depth of the
14589-
transaction.
14590-
14591-
## Instructions
14592-
14593-
| **Intrinsics** | **Argument** | **Result** | **Instruction** |
14594-
| --------------------------------------------- | ---------------- | -------------- | ----------------- |
14595-
| uint64_t __tstart (void) | - | Xt -> result | tstart <Xt> |
14596-
| void __tcommit (void) | - | - | tcommit |
14597-
| void __tcancel (/*constant*/ uint64_t reason) | reason -> #<imm> | - | tcancel #<imm> |
14598-
| uint64_t __ttest (void) | - | Xt -> result | ttest <Xt> |
14599-
14600-
These intrinsics are available when `arm_acle.h` is included.
14601-
1460214483
# memcpy family of operations intrinsics - MOPS
1460314484

1460414485
## Introduction

0 commit comments

Comments
 (0)