LW.AQRL

RISC-V LW.AQRL 指令详解

指令手册R-type

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

指令语法

lw.aqrl rd, (rs1)
操作数说明
目标寄存器 rd:接收符号扩展后的加载结果;若 rd=x0,写回被丢弃。
地址寄存器 rs1:直接提供内存地址;Zalasr 语法没有 offset 立即数字段。
编码字段 rs2 固定为 00000;aq 位必须为 1,aq/rl 只影响排序标注。
Zalasr缓存与同步

指令行为说明

LW.AQRL 是 Zalasr 独立原子 load-acquire/store-release 家族中的 4 字节有序原子加载。它从 x[rs1] 指向的地址原子读取 32 位,按该宽度符号扩展后写入 x[rd];语法没有 offset 字段。地址默认必须按访问宽度自然对齐,除非 misaligned atomicity granule PMA 放宽该要求。

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

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

rd
rs1
lw.aqrl
,(
)
排序标注
aq=1, rl=1 (acquire+release)
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00110
funct5
1
aq
1
rl
00000
rs2=00000
01010
rs1
010
funct3
00101
rd
0101111
opcode
Zalasr 数据路径
instruction
0x360522AF
opcode
0101111 -> AMO major opcode
funct5
00110 -> LW.AQRL
aq / rl
1/1 -> acquire+release
operands
rd=t0(x5), rs1=a0(x10)
address
a0(x10) -> 0x00001000 (no offset)
memory read
mem[0x00001000] -> 0x80000002
execute
sign_extend(0x80000002, 32) -> 0x80000002
writeback
t0(x5) = 0x80000002
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
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
memory 32
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

LW.AQRL 从内存取 32 位,并按该宽度的符号位扩展到 XLEN 后写 rd。

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

快速理解与检索要点

LW.AQRL 直接使用 rs1 作为地址,原子读取 4 字节并符号扩展到 rd;aq/rl 位提供排序标注,不会改变加载数据。

语法是 lw.aqrl rd, (rs1),没有 offset 字段,地址来自 x[rs1]。
funct5=00110 选择 Zalasr load-acquire 类,funct3=010 选择 LW.AQRL 的访问宽度;AMO major opcode 为 0101111,Zalasr load 的 aq 位必须为 1。
加载 32 位后按源宽度符号扩展到 XLEN。
aq/rl 只描述内存排序,不改变加载、符号扩展或 rd=x0 的架构语义。

常见使用场景

原子与同步

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

并发与多核

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

使用前检查清单

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

容易混淆 / 常见误区

语法没有 offset 立即数字段;地址直接取自 rs1。
加载结果按 32 位源宽度符号扩展到 XLEN;Zalasr 没有无符号加载形式。
未设置 aq 的 Zalasr load 编码是 RESERVED。
Zalasr 是单条有序原子 load/store,不是 LR/SC 预留协议,也不是 AMO read-modify-write 旧值返回。

常见问题

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

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

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

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

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

不会。aq/rl 是排序标注;加载值仍按源宽度符号扩展到 rd。