斯特韦克斯 (存储词条件索引) 指令
用途
与先前的 lwarx 指令结合使用,以模拟指定内存位置上的读/修改/写操作。
注: stwcx。 仅在 PowerPC® 体系结构中支持指令。
语法
| 位数 | VALUE |
|---|---|
| 0 - 5 | 31 |
| 6 - 10 | RS |
| 11 - 15 | 亚美尼亚共和国 |
| 16 - 20 | 经常预算 |
| 21 - 30 | 150 |
| 31 | 1 |
描述
stwcx。 lwarx 指令是用于对存储器执行读/修改-写操作的基本指令或简单指令。 如果执行了存储,那么将使用 stwcx。 和 lwarx 指令确保在执行 lwarx 指令的时间与 stwcx 的时间之间没有其他处理器或机制修改目标内存位置。 指令完成。
使用 stwcx 时,请考虑以下事项。 指令:
- 如果通用寄存器 (GPR) RA 为 0 ,那么有效地址 (EA) 为 GPR RB的内容,否则 EA 为 GPR RA 的内容与 GPR RB的内容之和。
- 如果存在由 lwarx 指令创建的保留,那么 GPR RS 的内容将存储在存储中的字中并由 EA 寻址,并且将清除该保留。 否则,不会更改存储器。
- 如果执行存储,那么条件寄存器字段 0 的位 0-2 设置为 0b001,否则设置为 0b000。 XER 的 SO 位将复制到条件寄存器字段 0 的位 4。
stwcx。 指令有一种语法形式,不影响 "定点异常寄存器"。 如果 EA 不是 4 的倍数,那么结果未定义。
参数
| 项 | 描述 |
|---|---|
| RS | 指定存储数据的源通用寄存器。 |
| RA | 指定用于 EA 计算的源通用寄存器。 |
| 经常预算 | 指定用于 EA 计算的源通用寄存器。 |
示例
- 以下代码通过原子地装入和替换存储器中的字来执行 "访存和存储":
# Assume that GPR 4 contains the new value to be stored. # Assume that GPR 3 contains the address of the word # to be loaded and replaced. loop: lwarx r5,0,r3 # Load and reserve stwcx. r4,0,r3 # Store new value if still # reserved bne- loop # Loop if lost reservation # The new value is now in storage. # The old value is returned to GPR 4. - 以下代码通过将寄存器中的值与存储器中的字进行原子地比较来执行 "比较和交换":
如果寄存器中的值等于存储中的单词,那么第二个寄存器中的值将存储在存储中的单词中。 如果它们不相等,那么存储中的词将装入到第一个寄存器中,并且条件寄存器字段 0 的 EQ 位将设置为指示比较结果。# Assume that GPR 5 contains the new value to be stored after # a successful match. # Assume that GPR 3 contains the address of the word # to be tested. # Assume that GPR 4 contains the value to be compared against # the value in memory. loop: lwarx r6,0,r3 # Load and reserve cmpw r4,r6 # Are the first two operands # equal? bne- exit # Skip if not equal stwcx. r5,0,r3 # Store new value if still # reserved bne- loop # Loop if lost reservation exit: mr r4,r6 # Return value from storage # The old value is returned to GPR 4. # If a match was made, storage contains the new value.