首页/指令库/AMOMAXU-H
AMOMAXU.H

RISC-V AMOMAXU.H 指令详解

指令手册R-type

AMOMAXU.H 原子读取 halfword 旧值、符号扩展写 rd,并按无符号 16-bit 比较 old halfword 与 rs2[15:0],较大者写回。

指令语法

amomaxu.h rd, rs2, (rs1)
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
Zabha原子操作

指令行为说明

AMOMAXU.H 是 Zabha 字节/半字原子内存操作中的 halfword AMO。它按 16-bit 宽度执行读改写,rd 接收旧内存 halfword 的符号扩展值;按无符号 16-bit 比较 old halfword 与 rs2[15:0],较大者写回。aq/rl 位只提供内存排序标注,不改变数据计算。

AMOMAXU.H 原子指令解析与执行动画

展示 Zabha halfword 原子指令的字段解析、aq/rl 排序位、内存读取和 RMW 状态更新。

rd
rs2
rs1
amomaxu.h
,
,(
)
执行环境
31..27
26
25
24..20
19..15
14..12
11..7
6..0
11100
funct5
0
aq
0
rl
01011
rs2
01010
rs1
001
funct3
00101
rd
0101111
opcode
原子数据路径
instruction
0xE0B512AF
opcode
0101111 -> AMO
funct3
001 -> halfword width
funct5
11100 -> AMOMAXU.H
aq / rl
0/0 -> unordered
rd / rs2 / rs1
t0(x5) / a1(x11)=0x0003 / a0(x10)=0x00001000
memory read
mem[0x00001000] -> old halfword 0x0005
RMW
5 >= 3 -> 0x0005
rd / memory
t0(x5) = 0x00000005; mem[0x00001000] = 0x0005
当前步骤

概念步骤:拿到 32-bit 原子指令编码

Zabha 扩展 halfword 原子指令使用 32-bit 编码;动画先展示字段切分。

encoding: 0xE0B512AF
syntax : amomaxu.h t0(x5), a1(x11), (a0(x10))
result : t0(x5) = 0x00000005; mem[0x00001000] = 0x0005
Unsigned 16-bit Halfword Comparison
old halfword
0x0005 (5)
rs2 halfword
0x0003 (3)
comparison
old >= rs2 -> old value
memory result
0x0005

AMOMAXU.H 按无符号 16-bit halfword 比较选择内存写回值;这不是逐 bit 逻辑运算。

该动画展示 ISA 可见的原子读改写、比较并交换、LR/SC 预留状态和内存排序位,不表示任何特定 CPU 的缓存一致性实现、流水线或时序。

快速理解与检索要点

AMOMAXU.H 是 L5 Zabha halfword AMO:以 16-bit 宽度原子读取旧内存值,旧值符号扩展写入 rd,同时按无符号 16-bit 比较 old halfword 与 rs2[15:0],较大者写回。

编码使用 AMO major opcode 0101111,funct3=001 表示 halfword 宽度,funct5 选择具体 AMO 操作。
所有 AMO.H 的 rd 写回都是旧 halfword 的符号扩展值;无符号后缀只改变 min/max 比较解释。
rs2 只提供低 16 位参与计算,地址按 2 字节自然对齐,aq/rl 只影响内存排序语义。

常见使用场景

原子与同步

结合 «amomaxu.h a0, a2, (a1)» 等实际代码理解该场景。

循环与迭代

结合 «amomaxu.h a0, a2, (a1)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

rd 返回旧内存 halfword 符号扩展到 XLEN 的值,不是写回内存的新值。
rs2 只有低 16 位参与 halfword 计算,高位不参与本次 AMO.H 数据结果。
无符号只影响 min/max 比较方式;rd 的旧值写回仍是符号扩展,不是零扩展。
目标地址必须按 halfword 自然对齐;aq/rl 排序位不替代对齐要求。

常见问题

AMOMAXU.H 的 rd 是零扩展吗?

不是。Zabha 的 AMO.H old value 写回 rd 时符号扩展到 XLEN;AMOMINU.H/AMOMAXU.H 的 U 只表示无符号比较。

AMOMAXU.H 会修改多少内存?

架构语义只修改目标 16-bit halfword,并以 halfword 宽度计算新内存值;相邻字节不属于该数据结果。