|
|
|
|
移动端

1.13.8 浮点指令

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为大家介绍浮点指令。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 19:29

【新品产上线啦】51CTO播客,随时随地,碎片化学习

1.13.8 浮点指令

有两种类型的浮点指令:向量浮点(VFP)指令和NEON指令。

ARMv6处理器,例如Raspberry Pi(第一代)的ARM11,只支持VFP指令。新一代架构,例如ARMv7,只支持NEON指令。最常见的浮点操作映射到VFP指令与NEON指令。例如,VFP指令中的FADDS和NEON指令VADD.F32(当使用S寄存器时)都执行一个单精度浮点数加法。

NEON指令集的影响比VFP指令集更广泛,所以虽然大多数VFP指令价于NEON指令,但有许多NEON指令可以执行VFP指令不可能做到的操作。

为了描述适用于ARM11和ARM Cortex处理器编程技术的浮点数和单指令多数据(SIMD),本节和第2章将介绍VFP和NEON指令。

表1-11所示为VFP和NENO版本常用的浮点指令。和整型运算指令类似,大多数浮点指令支持条件执行,但在32位浮点状态和控制寄存器(FPSCR)中有一套独立的浮点指令标记。NEON指令只使用从31位到27位寄存器,而VFP指令使用额外的位。

表1-11 浮点指令

(续)

相对于整型指令,浮点指令使用一组单独寄存器组。ARMv6/VFP提供32位浮点寄存器,32个单精度寄存器(命名为s0~s31)或者16双精度寄存器(命名为d0~s15)。

ARMv7/NENO提供了可用于很多方面的64位浮点寄存器,例如:

64单精度寄存器(命名为s0~s63)。

32双元单精度寄存器(命名为d0~d31)。

16四元单精度寄存器(命名为q0~q15)。

32双精度寄存器(命名为d0~d31)。

16二元双精度寄存器(命名为q0~q15)。

在VFP和NENO中,寄存器d0与寄存器s0和s1占有相同的物理空间,寄存器d1与寄存器s2和s3占有相同的物理空间。

浮点寄存器中的值可以与通用寄存器进行交换,并为单精度、双精度和整数之间的类型转换提供了硬件支持。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

C#入门经典(第3版)

本书将全面介绍C#编程的所有知识,共分为5篇:第1篇是C#语言:介绍了C#语言的所有内容,从基础知识到面向对象的技术,应有尽有。第2篇是Win...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊