SW.AQRL

RISC-V SW.AQRL 指令详解

指令手册R-type

Zalasr 原子存储 4 字节,带 acquire+release-RCsc 排序标注。

指令语法

sw.aqrl rs2, (rs1)
操作数说明
源寄存器 rs2:提供要写入内存的低位数据,宽度由 B/H/W/D 形式决定。
地址寄存器 rs1:直接提供内存地址;Zalasr 语法没有 offset 立即数字段。
编码字段 rd 固定为 00000/x0;rl 位必须为 1,aq/rl 只影响排序标注。
Zalasr缓存与同步

指令行为说明

SW.AQRL 是 Zalasr 独立原子 load-acquire/store-release 家族中的 4 字节有序原子存储。它把 x[rs2] 的低 32 位原子写入 x[rs1] 指向的地址;语法没有 offset 字段,编码中的 rd 固定为 x0。地址默认必须按访问宽度自然对齐,除非 misaligned atomicity granule PMA 放宽该要求。

SW.AQRL Zalasr 指令解析与执行动画

展示 Zalasr 独立 store-release 的 AMO 编码、无 offset 地址语法、32-bit 数据传输和 aq/rl 排序标注。

rs2
rs1
sw.aqrl
,(
)
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00111
funct5
1
aq
1
rl
01011
rs2
01010
rs1
010
funct3
00000
rd=00000
0101111
opcode
Zalasr 数据路径
instruction
0x3EB5202F
opcode
0101111 -> AMO major opcode
funct5
00111 -> SW.AQRL
aq / rl
1/1 -> acquire+release
operands
rs2=a1(x11), rs1=a0(x10), rd=x0
address
a0(x10) -> 0x00001000 (no offset)
store source
low 32 bits of a1(x11) -> 0x89ABCDEF
execute
atomic store 32 bits at 0x00001000
writeback
mem[0x00001000] = 0x89ABCDEF
32-bit 传输视图
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
rs2 low 32
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

SW.AQRL 只把 rs2 的低 32 位写入内存;rs2 高位不参与本次存储值。

该动画展示 Zalasr 的 ISA 可见原子 load/store 与 aq/rl 排序标注;不模拟 LR/SC 预留、AMO read-modify-write 旧值返回、cache、总线或流水线时序。

快速理解与检索要点

SW.AQRL 直接使用 rs1 作为地址,原子写入 rs2 的低 32 位;aq/rl 位提供排序标注,不会改变写入数据。

语法是 sw.aqrl rs2, (rs1),没有 offset 字段,地址来自 x[rs1]。
funct5=00111 选择 Zalasr store-release 类,funct3=010 选择 SW.AQRL 的访问宽度;AMO major opcode 为 0101111,Zalasr store 的 rl 位必须为 1,rd 固定为 x0。
存储值来自 x[rs2] 的低 32 位。
aq/rl 只描述内存排序,不改变写入数据,也不会返回旧内存值。

常见使用场景

原子与同步

结合 «sw.aqrl x5, (x6)» 等实际代码理解该场景。

并发与多核

结合 «sw.aqrl x5, (x6)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

语法没有 offset 立即数字段;地址直接取自 rs1。
存储只使用 rs2 的低 32 位;高位不参与写入值。
未设置 rl 的 Zalasr store 编码是 RESERVED。
Zalasr 是单条有序原子 load/store,不是 LR/SC 预留协议,也不是 AMO read-modify-write 旧值返回。

常见问题

SW.AQRL 可以写 offset(rs1) 吗?

不可以。官方语法是 sw.aqrl rs2, (rs1),没有 offset 立即数字段;地址直接来自 rs1。

SW.AQRL 是 LR/SC 或 AMO read-modify-write 吗?

不是。Zalasr 这些指令是单条有序原子 load/store;动画不展示预留状态或旧值返回。

aq/rl 会改变数据结果吗?

不会。aq/rl 是排序标注;存储值仍是 rs2 的低 32 位。