1. AArch64浮点比较指令概述
在AArch64架构中,浮点比较是SIMD和浮点运算的重要组成部分。FCMEQ(Floating-point Compare Equal)和FCMGT(Floating-point Compare Greater Than)这两条指令提供了高效的向量化浮点比较能力,支持从半精度(FP16)到双精度的多种浮点格式。
提示:AArch64的浮点比较指令严格遵循IEEE 754标准,这意味着它们能正确处理NaN(Not a Number)等特殊值,并支持各种舍入模式和异常处理。
1.1 指令基本特性
FCMEQ和FCMGT指令具有以下核心特征:
- 支持标量(单个值)和向量(多个值并行)比较模式
- 覆盖三种浮点精度:FP16(16位)、单精度(32位)、双精度(64位)
- 比较结果以掩码形式返回:全1表示真,全0表示假
- 支持两种比较模式:
- 寄存器与寄存器比较(FCMGT Vd, Vn, Vm)
- 寄存器与零值比较(FCMGT Vd, Vn, #0.0)
1.2 IEEE 754标准支持
这些指令严格实现IEEE 754-2008标准规定的比较语义:
- 当任一操作数为NaN时,比较结果为"无序"(unordered)
- 支持两种NaN处理方式:
- 静默NaN(quiet NaN)不触发异常
- 信号NaN(signaling NaN)可触发无效操作异常
- 零值的符号位(+0 vs -0)被视为相等
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指令编码与格式解析
2.1 基本编码结构
FCMEQ和FCMGT指令采用AArch64标准SIMD编码格式,主要字段包括:
code复制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
---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0 | 1 | 0 | 1 | 1 | 1 | 1 |
