ARM半精度浮点算术指令列表查询及GCC编译行为疑问
A-profile架构Arm架构参考手册(重点标注)
FPHP,位[27:24]
0b0011 与0b0010功能一致,并新增对半精度浮点算术的支持。
问题
何处可获取实现半精度浮点算术的ARM指令列表?
更新内容
Arm版Clang(armclang)相关说明
__fp16数据类型并非算术数据类型,仅用于存储和转换。_Float16数据类型为算术数据类型,对_Float16值的运算采用半精度算术。
因此,使用Arm版Clang时应采用_Float16(而非__fp16)。
Arm版GCC相关说明
__fp16类型仅可作为
<arm_fp16.h>中定义的内部函数参数,或用作存储格式。在C/C++表达式中进行算术及其他运算时,__fp16值会自动提升为float。建议可移植代码采用ISO/IEC TS 18661-3:2015定义的_Float16类型。
因此,使用Arm版GCC时应采用_Float16(而非__fp16)。
后续疑问
但为何在Nate Eldredge提供的示例中,Arm版GCC生成了vmul.f16指令,而非先进行半精度与单精度的转换再执行vmul.f32?根据上述说明,C/C++表达式中的__fp16值应自动提升为float,为何此案例中未发生提升?
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

