打印

刚用这个片子没几天,没什么送大家的!

[复制链接]
2643|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lianshumou|  楼主 | 2008-6-4 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, AD, TI, TE, IO
送大家一个汇编版的浮点乘法!比标准库要快不少!
;==============================================================================================
; ----Function: float Float_Mul(float A,float B);
; -Description: 
; --Parameters: 
; -----Returns: 
; -------Notes: 
;==============================================================================================
Float_Mul    
            movs    r0,r0            ;判零
            bxeq    r14
            movs    r1,r1
            moveq    r0,r1
            bxeq    r14
            ubfx    r2,r0,#23,#8
            ubfx    r3,r1,#23,#8
            add        r2,r3
            subs    r2,#0x7e
            movcc    r0,#0
            bxcc    r14
            cmp        r2,#0xff
            mvnhi    r0,#0
            bxhi    r14
            eors    r3,r0,r1
            orrmi    r2,#0x100
            lsl        r0,#8
            lsl        r1,#8
            orr        r0,#0x80000000
            orr        r1,#0x80000000
            umull    r1,r0,r0,r1
            adds    r0,#0x40
            lsrpl    r0,#7            ;小于0.5
            subpl    r2,#1            ;指数调整
            lsrmi    r0,#8            ;大于等于0.5
            eor        r0,#0x800000    ;清第23位
            bfi        r0,r2,#23,#8
            bx        r14
沙发
lianshumou|  楼主 | 2008-6-5 08:33 | 只看该作者

看样子大家对算法优化不感兴趣啊!

使用特权

评论回复
板凳
平常人| | 2008-6-5 08:41 | 只看该作者

俺来捧个场子,LZ说说怎么用啊

比如如何调用,尤其是如何从C程序调用。

使用特权

评论回复
地板
samuelyu| | 2008-6-5 09:10 | 只看该作者

; ----Function: float Float_Mul(float A,float B);

注释里写得很清楚啊;
楼主自己写的汇编么?

使用特权

评论回复
5
lianshumou|  楼主 | 2008-6-5 13:39 | 只看该作者

是自已写的汇编!

关于浮点转为定点和方式!
这种方式当然会更快!但在一些应用中不得不用浮点还要要速度时就有用了!

浮点转为定点我有更快的方式!
利用Q格式的数据! 而后用移位的方式变换数据格式! 
如:  小数 0.1  变为Q16的格式为:  0.1*65536
这种方式会有点精度损失!但满足大部分需要!

使用特权

评论回复
6
老狼| | 2008-6-6 13:52 | 只看该作者

好!

我来捧个场!

但是请教个问题!你的浮点数从哪来的?目前,我只用过一种传感器,输出的是浮点数(IEE754),否则,我的系统里。没有浮点数,都是整数计算!所以用不到你这个函数!

使用特权

评论回复
7
香水城| | 2008-6-6 14:05 | 只看该作者

楼主有具体的算法运行时间比较吗?比标准库快多少?

这是ARM7还是ARM9还是Cortex-M3的指令?

使用特权

评论回复
8
老狼| | 2008-6-6 22:35 | 只看该作者

有必要用浮点么?

别说这种简单的定标,就算是 FFT输出的定标,我也是整数形式是输出,保留小数点后3位!我的系统里就没有浮点!如果用浮点,就没法玩下去了!
另外,数**算,尽量不要调用库函数,最好开方函数,三角函数,等等,这些都自己重写!效率高!

使用特权

评论回复
9
makesoft| | 2008-6-6 23:31 | 只看该作者

奇怪的想法,有库函数不用要自己写?

使用特权

评论回复
10
老狼| | 2008-6-7 00:10 | 只看该作者

太有必要了!

当你的运算速度成为瓶颈的时候,就两种选择,
要么换CPU,设计推倒重来!
要么优化算法,很多算法都比标准的库函数快得多!

使用特权

评论回复
11
simon21ic| | 2008-6-7 03:31 | 只看该作者

建议

汇编代码需要注明参数使用的寄存器和代码使用的寄存器,即使这个代码是在C中调用的

使用特权

评论回复
12
lianshumou|  楼主 | 2008-6-7 11:26 | 只看该作者

测试的速度是标准库的10倍以上!和程序执行的空间有关

使用特权

评论回复
13
samuelyu| | 2008-6-7 14:43 | 只看该作者

Q16 是我用的比较多的折中的方法;

也许我比较懒,大面积的修改库函数我是不干的;

使用特权

评论回复
14
lianshumou|  楼主 | 2008-6-7 21:19 | 只看该作者

大面积修改是不可能的!

只是自已用到的那几个会去做特别优化!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

560

帖子

1

粉丝