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

RISC-V AMOXOR.H 指令详解

指令手册R-type

AMOXOR.H 原子读取 halfword 旧值、符号扩展写 rd,并对旧 halfword 与 rs2[15:0] 逐 bit XOR 后写回。

指令语法

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

指令行为说明

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

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

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

rd
rs2
rs1
amoxor.h
,
,(
)
执行环境
31..27
26
25
24..20
19..15
14..12
11..7
6..0
00100
funct5
0
aq
0
rl
01011
rs2
01010
rs1
001
funct3
00101
rd
0101111
opcode
原子数据路径
instruction
0x20B512AF
opcode
0101111 -> AMO
funct3
001 -> halfword width
funct5
00100 -> AMOXOR.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
0x0005 ^ 0x0003 -> 0x0006
rd / memory
t0(x5) = 0x00000005; mem[0x00001000] = 0x0006
当前步骤

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

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

encoding: 0x20B512AF
syntax : amoxor.h t0(x5), a1(x11), (a0(x10))
result : t0(x5) = 0x00000005; mem[0x00001000] = 0x0006
16-bit halfword 结果视图
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
old halfword
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
rs2 halfword
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

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

快速理解与检索要点

AMOXOR.H 是 L5 Zabha halfword AMO:以 16-bit 宽度原子读取旧内存值,旧值符号扩展写入 rd,同时对旧 halfword 与 rs2[15:0] 逐 bit XOR 后写回。

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

常见使用场景

原子与同步

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

循环与迭代

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

使用前检查清单

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

容易混淆 / 常见误区

rd 返回旧内存 halfword 符号扩展到 XLEN 的值,不是写回内存的新值。
rs2 只有低 16 位参与 halfword 计算,高位不参与本次 AMO.H 数据结果。
AMOXOR.H 是 16-bit 逐 bit 运算,不会对相邻 byte/halfword 执行 32-bit word AMO。
目标地址必须按 halfword 自然对齐;aq/rl 排序位不替代对齐要求。

常见问题

AMOXOR.H 的 rd 是零扩展吗?

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

AMOXOR.H 会修改多少内存?

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