目录
- 1. NEON寄存器
- 关键特性
- 数据排列示例
- 2. 浮点指令
- 2.1 FMUL指令
- 2.2 FADD指令
- 2.3 FCMP指令
1. NEON寄存器
AArch64架构提供32个128位NEON向量寄存器(V0-V31),支持SIMD并行计算
关键特性
寄存器类型 | 数量 | 位宽 | 数据视图 |
---|---|---|---|
Q寄存器 | 32 | 128b | Q0-Q31 |
D寄存器 | 32 | 64b | D0-D31 |
S寄存器 | 32 | 32b | S0-S31 |
H寄存器 | 32 | 16b | H0-H31 |
B寄存器 | 32 | 8b | B0-B31 |
数据排列示例
// 将4个32位单精度浮点数装入寄存器
LD1 {V0.4S}, [X1] // 从X1地址加载4个float到V0
2. 浮点指令
2.1 FMUL指令
浮点乘法运算(单/双精度)
语法格式:
FMUL <Vd>.<T>, <Vn>.<T>, <Vm>.<T> // 向量版本
FMUL <Dd>, <Dn>, <Dm> // 标量双精度
FMUL <Sd>, <Sn>, <Sm> // 标量单精度
示例:
FMUL V0.2D, V1.2D, V2.2D // V0 = V1 * V2 (两个双精度浮点)
FMUL S3, S4, S5 // S3 = S4 * S5 (单精度)
2.2 FADD指令
浮点加法运算
语法变体:
FADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T> // 向量
FADD <Dd>, <Dn>, <Dm> // 标量双精度
FADD <Sd>, <Sn>, <Sm> // 标量单精度
特殊用法:
FADD V0.4S, V0.4S, V0.4S // 快速实现向量*2操作
2.3 FCMP指令
浮点比较指令(设置NZCV标志)
语法格式:
FCMP <Dn>, <Dm> // 双精度比较(Dn-Dm)
FCMP <Sn>, <Sm> // 单精度比较
FCMP <Dn>, #0.0 // 与零值比较
标志位说明:
标志位 | 含义 | 条件码 |
---|---|---|
N | 结果为负 | LT |
Z | 结果为零 | EQ |
C | 无进位/结果非NaN | LO |
V | 溢出/存在NaN | VS |
示例:
FCMP D0, D1 // 比较D0和D1
B.GT label // 若D0 > D1则跳转