stdcx。 (存储双字条件索引) 指令
用途
根据现有预留,有条件地将通用寄存器的内容存储到存储位置。
语法
| 位数 | VALUE |
|---|---|
| 0 - 5 | 31 |
| 6 - 10 | S |
| 11 -- 15 | A |
| 16 - 20 | B |
| 21 - 30 | 214 |
| 31 | 1 |
描述
如果存在预留,那么为 stdcx 指定的内存地址。 指令与建立保留的装入和保留指令指定的指令相同, RS 的内容存储在由有效地址 (EA) 寻址的内存中的双字中; 清除保留。
如果 GPR RA 不是 0 ,那么 EA 是 GPR RA 和 D (位移大小) 的内容总和, 16 位,带符号的两个补码整数,全字对齐,符号扩展为 64 位。 如果 GPR RA 为 0 ,那么 EA 为 D。
如果存在预留,但存在 stdcx 指定的内存地址。 指令与建立保留的装入和保留指令指定的指令不同,将清除保留,并且未定义 RS 的内容是否存储到 EA 寻址的内存中的双字中。
如果不存在保留,那么该指令将在不改变内存的情况下完成。
如果成功执行存储,那么条件寄存器字段 0 的位 0-2 将设置为 0b001,否则,它们将设置为 0b000。 XER 的 SO 位将复制到条件寄存器字段 0 的位 4。
EA 必须是 8 的倍数。 如果未执行此操作,那么将调用系统对齐异常处理程序或未定义结果。
请注意,当正确使用时,装入和保留以及存储条件指令可以为内存的单个对齐字 (装入字和保留和存储字条件) 或双字 (装入双字和保留和存储双字条件) 提供原子更新函数。
通常,正确的使用要求 load word 和 reserve 与 store word 条件配对, load double word 和 reserve 与 store double word 条件配对,具有对的两个指令指定的相同内存地址。 唯一的例外是,未配对的存储字条件或存储对任何 (scratch) EA 的双字条件指令可用于清除处理器持有的任何预留。
如果发生以下任何事件,那么将清除预留:
- 保留保留的处理器执行另一个装入和保留指令; 这将清除第一个保留并建立新的保留。
- 保存预留的处理器对任何地址执行存储条件指令。
- 另一个处理器对与预留关联的地址执行任何存储指令
- 除保留的处理器以外的任何机制都将存储到与保留关联的地址。
参数
| 项 | 描述 |
|---|---|
| RS | 指定存储数据的源通用寄存器。 |
| RA | 指定用于 EA 计算的源通用寄存器。 |
| 经常预算 | 指定用于 EA 计算的源通用寄存器。 |
实现
仅为 64 位实现定义此指令。 在 32 位实现上使用它将导致调用系统非法指令错误处理程序。