Vdsp(bf561)中的浮点运算(6):float加减运算[VC/C++编程]
本文“Vdsp(bf561)中的浮点运算(6):float加减运算[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
一向认为float加减运算很简单,无非就是将之转换为__float32_add和__float32_sub这两个函数调用罢了,然后用软件模拟举行加减运算.但真的如此简单吗?当一些让人不太舒服的条件呈现的时刻,还是如此吗?
1.1 Vdsp对float加减运算的处理
在vdsp下,可以很简单地用:
float add(float x, float y)
{
float r = x + y;
return r;
}
float sub(float x, float y)
{
float r = x - y;
return r;
}
来完成浮点加减运算,编译器自动将里面的加法操作转换为___float32_add的函数调用,而将减法操作转换为___float32_sub的函数调用,这两个函数的调用实目前libdsp/fpadd.asm中:
___float32_sub:
BITTGl (R1,31); // Flip sign bit of Y, fall through to add
.align 2;
___float32_add:
从这几行代码可以看出减法无非就是把减数改变标记再用加法实现罢了.
1.2 当y为0时
看__float32_add的代码:
// check for addition of 0.0
R3 = R1 << 1; // Remove sign
CC = R3; // If Y=0, return X
IF !CC JUMP .return_x_nopop;
………..
.return_x_nopop:
#if CHECKING_FOR_NEGZERO_RES
R1 = R0 << 1;
CC = R1;
IF !CC R0 = R1; // convert any -0.0 to 0.0
#endif
RTS;
直接返回x的值,此时的操作需求的CYCLE数为25.
1.3 当x为0时
R2 = R0 << 1; // Remove sign
CC = R2; // If X=0, return Y
IF !CC JUMP .return_y_nopop;
……….
.return_y_nopop:
R0 = R1;
RTS;
直接返回y的值,此时的操作需求的CYCLE数为26.
以上是“Vdsp(bf561)中的浮点运算(6):float加减运算[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |