SH.AQRL

RISC-V SH.AQRL 指令详解

指令手册R-type

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

指令语法

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

指令行为说明

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

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

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

rs2
rs1
sh.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
001
funct3
00000
rd=00000
0101111
opcode
Zalasr 数据路径
instruction
0x3EB5102F
opcode
0101111 -> AMO major opcode
funct5
00111 -> SH.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 16 bits of a1(x11) -> 0x1234
execute
atomic store 16 bits at 0x00001000
writeback
mem[0x00001000] = 0x1234
16-bit 传输视图
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
rs2 low 16
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

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

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

快速理解与检索要点

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

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

常见使用场景

原子与同步

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

并发与多核

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

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

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

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

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

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

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

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