请问ARM9(S3C2440)怎么进行浮点运算,软浮点怎么弄啊

请问ARM9(S3C2440)怎么进行浮点运算,软浮点怎么弄啊,第1张

main函数一开始

加上__rt_lib_init(0,0)//添加浮点支持

三轮游角函数,开根号需加<math.h>

列子:float f,x=30

f = sin(x)//注意x是弧度

f = sqrt(x)//开根号

浮点,三角运信穗算当然比一般运算慢了,但2440的速度还是行的。

还有问题么?腊坦销没问题就给分,呵呵

ABS 绝对值

ACS 反余弦

ADF 加法

ASN 反正弦

ATN 反正切

CMF 比较浮点值

CNF 比较取负的浮点值

COS 余弦

DVF 除法

EXP 指数

FDV 快速除法

FIX 转换浮点值成整数

FLT 转换整数成浮点值

FML 快速乘法

FRD 快速反向除法

LDF 装载浮点值

LFM 装载多个浮点值

LGN 自然对数

LOG 常用对数

MNF 传送取负的值

MUF 乘法

MVF 传送值/浮点寄存器到一个浮点寄存器

NRM 规格化

POL 极化角

POW 幂

RDF 反向除法

RFC 读 FP 控制寄存器

RFS 读 FP 状态寄存器

RMF 余数

RND 舍入成整值

RPW 反向幂

RSF 反向减法

SFM 存储多个浮点值

SIN 正弦

SQT 平方根

STF 存储浮点值

SUF 减法

TAN 正切

URD 非规格化舍入

WFC 写 FP 控制寄存器

WFS 写 FP 状态寄存器

 

本文档部分内容取自 ARM 汇编器手册。

ARM 可以与最多 16 个协处理器相接口(interface)。ARM3 和以后的处理器在 ARM 内有虚拟的协处理器来处理内部控制功能。而可获得的第一个协处理器是浮点处理器。这个芯片衡冲处理 IEEE 标准的浮点运算。定义了一个标准的 ARM 浮点指令集,所以编码可以跨越所有 RISC OS 机器。如果不存在实际的硬件,则这些指令被截获并由浮点模拟器模块(FPEmulator)来执行。程序不需要知道是否存在 FP 协处理器。唯一不同的是执行速度。

RISC OS 的 BASIC 汇编器,作为标准,不支持任何真实的浮点指令。你可以转换整数到你的实现定义的‘浮点’并用它们进行(最普通的定点)基本数学运算,但你不能与浮点协处理器交互并以‘固有的’方式来做这些事情。但是,扩展汇编器功能的补丁中包含了 FP 指令。

ARM IEEE FP 系统由 8 个高咐敏歼精度 FP 寄存器(F0 到 F7)。寄存器的格式是无关紧要的,因为你不能直接访问这些寄存器,寄存器只在它被传送到内存或 ARM 寄存器时是‘可见的’。在内存中,一个 FP 寄存器占用三个字,但因为 FP 系统把它重新装载到自己的寄存器中,这三个字的格式是无关紧要的。还有一个 FPSR (浮点状态寄存器),它类似于 ARM 自己的 PSR,持有应用程序可能需要的状态信息。可获得的每个标志都有拿物一个‘陷阱’,这允许应用程序来启用或禁用与给定错误关联的陷阱。FPSR 还允许你得知在 FP 系统得不同实现之间的区别。还有一个 FPCR (浮点控制寄存器)。它持有应用程序不应该访问的信息,比如开启和关闭 FP 单元的标志。典型的,硬件有 FPCR 而软件没有。

FP 单元可以软件实现比如 FPEmulator 模块,硬件实现比如 FP 芯片(和支持代码),或二者的组合。二者的最好的例子是 Warm Silence Software 补丁,它允许 ARM FP *** 作利用配备在 PC 协处理器卡上的 80x87 作为作为一个浮点协处理器。

计算的结果如同有无限的精度,接着被舍入成要求的精度。舍入方式有就近舍入,向正无穷(P)舍入, 向负无穷舍入(M), 或向零舍入。缺省的是就近舍入。如果不可抉择,则舍入到最近似的偶数。工作精度是 80 位,其组成是 64 位尾数,15 位指数,和一个符号位。在一些实现中对用单精度工作的指令提供了更好的性能 - 特别是完全基于软件的那些实现。

FPSR 包含 FP 系统所需的状态。总是提供 IEEE 标志,但只在一次 FP 比较 *** 作之后才可获得结果标志。

浮点指令不应该用在 SVC 模式下。

FPSR 的低字节是例外标志字节。

6 4 3 2 1 0

FPSR: 保留 INXUFLOFLDVZIVO

当引发一个例外条件的时候,把在位 0 到 4 中的适当的累计(cumulative)例外标志设置为 1。如果设置了相关的陷阱位,则按 *** 作系统指定的方式把一个例外递送给用户程序。(注意在下溢的情况下,陷阱启用位的状态决定在什么条件下设置下溢标志。) 只能用 WFS 指令清除这些标志。

IVO - invalid operation 无效 *** 作

在进行的 *** 作的一个 *** 作数是无效时设置 IVO。无效 *** 作有:

在一个捕获(trapping)的 NaN (not-a-number:非数)上进行任何 *** 作。

无穷大幅值(magnitude)相减,例如 (+∞) + (-∞)。

乘法 0 * ∞。

除法 ∞/∞ 或 x/0。

x REM y 这里 x = ∞ 或 y = 0。

(REM 是浮点除法 *** 作的余数。)

任何小于 0 的数的平方根。

在上溢或 *** 作数是 NaN 的时候进行转换成整数或十进制数。

如果上溢使转换不可能,则生成最大的正或负整数(依赖于 *** 作数的符号)并通知(signal)一个 IVO。

比较时有未对阶(Unordered) *** 作数例外。

ACS、ASN、SIN、COS、TAN、LOG、L www.hbbz08.com GN、POW、或 RPW 有无效/错误的参数。

DVZ - division by zero 除零

如果除数是零而被除数是一个有限的、非零的数则设置 DVZ 标志。如果禁用了陷阱则返回一个正确的有符号的无穷。还为 LOG(0) 和 LGN(0) 设置这个标志。如果禁用了陷阱则返回负无穷。

OFL - overflow 上溢

结果幅值超出目的格式最大的数的时候设置 OFL 标志,舍入的结果是指数范围无限大的(unbounded)。 因为在结果被舍入之后检测上溢,在一些 *** 作之后是否发生上溢依赖于舍入模式。如果禁用了陷阱,要么返回一个有正确符号的无穷,要么返回这个格式的最大的有限数。这依赖于舍入模式和使用的浮点系统。

UFL - underflow 下溢

两个有关联的事件产生下溢:

极小值(tininess) - 微小的非零结果在幅值上小于这个格式的最小规格化数。

准确性损失 - 反规格化导致的准确性损失可能大于单独舍入导致的准确性损失。

依赖于 UFL 陷阱启用位的值,以不同的方式设置 UFL 标志。如果启用了陷阱,则不管是否有准确性损失极,在检测到极小值时就设置 UFL 标志。如果禁用了陷阱,则在检测到极小值和准确性损失二者时设置 UFL 标志(在这种情况下还设置 INX 标志);否则返回一个有正确符号的零。因为在结果被舍入之后检测下溢,在

在ARM7的系统上,没有浮点运算FPU。

ARM7500FE里面增加了一个浮点运算单元。

-----------------------------------------

这是卖首从硬件的角度上说的,肢余但是有中饥数的编译器支持浮点运算。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12346789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存