在C/C++与汇编语言混合编程的情况下,一般我们都会选择C/C++来实现所期待的功能。在我们用C/C++来实现某些位操作、数学运算等功能后,编译器会尽可能地把它们编译为一些已经高度优化的汇编函数(内联函数),一般情况下是一条或者多条汇编指令的集合,在封装之后,我们可以在C/C++编程的时候直接使用这样的内联函数。如果不直接使用它们,那么在单步调试的时候,也可以从C/C++代码编译生成的汇编代码中找到对应的内联函数,能够帮助我们加深对编译和代码执行的理解。这些编译器的内联函数都有一个显著的外观,即以两个下划线作为开头,而使用方法则与C/C++编程中函数的调用形式是一样的。例如:
long lvar;
int ivar;
unsigned int uivar;
lvar = __mpyxu(ivar, uivar);
下面我们就列举一下TMS320C28x C/C++ 编译器的内联函数。为了方便对比说明,表格并不是完全安装函数名的字母顺序来排列的。
表1 TMS320C28x C/C++ 编译器的内联函数列表
表2 TMS320C28x C/C++ 编译器的内联函数列表-面向FPU
在C/C++与汇编语言混合编程的情况下,一般我们都会选择C/C++来实现所期待的功能。在我们用C/C++来实现某些位操作、数学运算等功能后,编译器会尽可能地把它们编译为一些已经高度优化的汇编函数(内联函数),一般情况下是一条或者多条汇编指令的集合,在封装之后,我们可以在C/C++编程的时候直接使用这样的内联函数。如果不直接使用它们,那么在单步调试的时候,也可以从C/C++代码编译生成的汇编代码中找到对应的内联函数,能够帮助我们加深对编译和代码执行的理解。这些编译器的内联函数都有一个显著的外观,即以两个下划线作为开头,而使用方法则与C/C++编程中函数的调用形式是一样的。例如:
long lvar;
int ivar;
unsigned int uivar;
lvar = __mpyxu(ivar, uivar);
下面我们就列举一下TMS320C28x C/C++ 编译器的内联函数。为了方便对比说明,表格并不是完全安装函数名的字母顺序来排列的。
表1 TMS320C28x C/C++ 编译器的内联函数列表
表2 TMS320C28x C/C++ 编译器的内联函数列表-面向FPU
举报