《CC性能优化》
建议的程序开发流程
C程序
C程序优化
用线性汇编改
写关键代码段
BIT/TI
2
学习内容
一、C代码的性能优化
变量声明-两种变量访问方式
C编译选项
Intrinsics
字访问
二、混合语《CC性能优化》
建议的程序开发流程
C程序
C程序优化
用线性汇编改
写关键代码段
BIT/TI
2
学习内容
一、C代码的性能优化
变量声明-两种变量访问方式
C编译选项
Intrinsics
字访问
二、混合语言编程-编写C可调用的汇编程序
建立C环境
建立汇编环境
编写线性汇编函数
三、实验
BIT/TI
3
一、C代码的性能优化
1. 变量声明
BIT/TI
4
对局部变量的访问
在堆栈内分配存储空间
用堆栈首地址作首基地址,用指针*+B15(disp)来访问
BIT/TI
5
全局变量/静态变量-两种访问方式
-Near变量
int n;
main()
{ ...
n +=...
}
编译后的汇编输出和访问方式
.bss _n, 4, 4
*+DP(_n), A0
far int n;
main()
{ ...
n += ...
}
编译后的汇编输出和访问方式
_n .usect .far,2,2
mvk _n, A1
mvkh _n, A1
*+A1, A0
一条指令访问
三条指令访问
BIT/TI
6
Near变量的生成和使用
C语言
汇编语言
LDW .D2 *+B15(12), Reg
相对偏移地址
BIT/TI
7
为什么要使用Far变量?
程序中使用的全局变量和静态变量超过了32K字节
*+DP(offset)
DP的偏移地址
限制在15位
BIT/TI
8
Far变量的生成
使用关键字Far定义,
用#pragma DATA_SECTION ( )定义新的数据段
far short m;
short far n;
#pragma DATA_SECTION (y, “myVariables”);
int y[32];
关键字far
新的数据段
BIT/TI
9
Near/Far变量-例子
编译输出
声明
C变量名加下划线
BIT/TI
10
变量声明总结
,用一条指令访问。
采用near形式声明全局变量,,用一条指令访问。
采用far形式声明全局变量,,用三条指令访问,应尽量避免采用。
BIT/TI
11
一、C代码的性能优化
2. C编译选项
BIT/TI
12
C优化器选项
优化器选项
有软件流水功能
BIT/TI
13
与优化有关的其它编译选项
建议使用
-pm 与-o3合用,进行程序级优化
-mt 程序中没有数据aliasing
-x2 函数内联
不要使用
-ml 大模式()
-g 符号调试
-s, -ss, -os C编译器生成的汇编文件内,C语句作为注释出现
Aliasing
两个指针指向同一个变量,
或一个指针修改后指向
另外一个变量
BIT/TI
14
一、C代码的性能优化
3. Intrinsics
Intrinsics:直接与C62xx汇编指令相对应的特殊内联函数,没有函数调用开支。
BIT/TI
15
常用Intrinsics列表
加法、减法、乘法
位域操作、long转换
为int
对应汇编指令
.trip
BIT/TI
16
几种编程方式的比较
C代码
使用Intrinsics的C代码
嵌入汇编
汇编代码
y = a * b;
y = _mpy (a, b);
asm (“MPY A0, A1, A2”);
MPY A0, A1, A2, ; a, b, y
代码效率低
容易破坏C环境
编程工作量大
BIT/TI
17
Intrinsics的特点
函数参数使用C变量名(不是寄存器),与C环境兼容
不增加C的编程工作量
代码效率与汇编相同
BIT/TI
18
一、C代码的性能优化
4. 字访问
BIT/TI
19
字访问优化方法
1. 利用32位字访问16位数据(三种方法)
1) 联合Union
2) 强制类
《CC性能优化》 来自淘豆网m.daumloan.com转载请标明出处.