dsp程序汇编优化

dsp程序汇编优化,第1张

指消唤令之间能否并行主要是依据内核资源和指令间是否型圆存在相互依赖的关系来决定的。你把你的C源码经过CCS的C编译器后生成的汇编语言(ASM文件)来改是现实的,因为已经进过了编译器的汇编优化,基本上就没有可读性,而且也不能作为源文件来输入的。要想做汇编优化,第一步可以考虑从写卜桥塌线性汇编指令开始,因为相对于汇编语言而言,对编码者的要求低不少。积累到一定的基础了,再可以考虑使用汇编语言。

这个要看你使用什么编译器了。查看编译器的帮助文档,它会告诉你它支持那些指令集,并且做哪些可能的优化。

不同的编译器,搭散是不一样的知改氏。

补充:GCC 不太清楚,你连VC++的版本都不说。汗,VC6是不支持SSE的,需要安装VC6SP5。

VS2005 和 VS2008 都支持 SSE。对 SSE/MMX 指令集优化得最好的,还是 Intel 的 c++ 编译器。

对并行和高性能计算,Fortran 的优势比较歼绝大。特别是 Fortran2003 的新特征,为并行计算做了很多专门的设定。Intel 也有 Fortran 的编译器。

刚开始学习STM32汇编,可能不是最简形式;以下程序MDK编译通过了;

***********************************************

ALPHA_FORMULA_1 参数传递缓指S=R1,D=R2,A=R3

***********************************************

ALPHA_FORMULA_1

PUSH {R0,R1,R3-R7,LR}

MUL.W R0,R1,R3

MOV.W R4,#0X1F

SUB.W R4,R3

MUL.W R4,R2

LSR.W R4,R4,#0X05

ADD.W R2,R0,R4

POP {R0,R1,R3-R7,PC}

***********************************************

alpha_blend_2 参数传递P1=R1,P2=R2,A=R3

参数p2_t由R0传出

***********************************************

alpha_blend_2

PUSH {R1-R7,LR}

LDR.W R4,=0Xf81f07e0 R4=p1_t = (p1 &0xf81f07e0)

AND.W R4,R1

LDR.W R5,=0X07e0f81f R5=p1 &= 0x07e0f81f

AND.W R5,R1

LDR.W R6,=0Xf81f07e0 R6=p2_t = (p2 &0xf81f07e0)

AND.W R6,R2

LDR.W R7,=0X07e0f81f R7=p2 &= 0x07e0f81f

AND.W R7,R2

ROR.W R4,R4,#16 LOOP_SHIFT_R(p1_t, 16) //p1_t 循环拿册右移 16位

ROR.W R6,R6,#16 LOOP_SHIFT_R(p2_t, 16) //p2_t 循环右移 16位

MOV.W R1,R4 ALPHA_FORMULA_1(p1_t, p2_t, a) /扰敏配/公式套用

MOV.W R2,R6

BL.W ALPHA_FORMULA_1

MOV.W R6,R2

MOV.W R1,R5 ALPHA_FORMULA_1(p1, p2, a)

MOV.W R2,R7

BL.W ALPHA_FORMULA_1

MOV.W R7,R2

LDR.W R2,=0X07e0f81f R6=p2_t &= 0x07e0f81f//

AND.W R6,R2

LDR.W R2,=0X07e0f81f R7=p2 &= 0x07e0f81f

AND.W R7,R2

ROR.W R6,R6,#16 LOOP_SHIFT_R(p2_t, 16) //p2_t循环右移 16位

ORR.W R7,R6 p2_t |= p2

MOV.W R0,R6 return p2_t

POP {R1-R7,PC}

***********************************************


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存