SD.RL

RISC-V SD.RL 指令详解

指令手册R-type

Zalasr 原子存储 8 字节,带 release-RCsc 排序标注(RV64-only)。

指令语法

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

指令行为说明

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

SD.RL Zalasr 指令解析与执行动画

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

rs2
rs1
sd.rl
,(
)
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00111
funct5
0
aq
1
rl
01011
rs2
01010
rs1
011
funct3
00000
rd=00000
0101111
opcode
Zalasr 数据路径
instruction
0x3AB5302F
opcode
0101111 -> AMO major opcode
funct5
00111 -> SD.RL
aq / rl
0/1 -> release
operands
rs2=a1(x11), rs1=a0(x10), rd=x0
address
a0(x10) -> 0x0000000000001000 (no offset)
store source
low 64 bits of a1(x11) -> 0x0123456789ABCDEF
execute
atomic store 64 bits at 0x0000000000001000
writeback
mem[0x0000000000001000] = 0x0123456789ABCDEF
64-bit 传输视图
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
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
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
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 64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

SD.RL 只把 rs2 的低 64 位写入内存;rs2 高位不参与本次存储值。

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

快速理解与检索要点

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

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

常见使用场景

原子与同步

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

并发与多核

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

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

SD.RL 可以写 offset(rs1) 吗?

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

SD.RL 是 LR/SC 或 AMO read-modify-write 吗?

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

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

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