目錄
- 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則跳轉