ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
使用 --optimizer_interlist 和 --c_src_interlist 选项进行优化(--opt_level=n 或 -On 选项)编译时,可以控制交叉列出特性的输出。
当 --optimizer_interlist 选项与优化一起使用时,交叉列出功能不会 单独运行。相反,编译器会在代码中插入注释,指示编译器已如何重新排列和优化代码。这些注释在汇编语言文件中以 ;** 开头显示。除非也使用了 --c_src_interlist 选项,否则不会交叉列出C/C++ 源代码。
交叉列出功能会影响优化代码,因为其可能会阻止某些优化跨越 C/C++ 语句边界。优化使正常的源代码交叉列出变得不切实际,因为编译器会大幅度重新排列程序。因此,使用 --optimizer_interlist 选项时,编译器会编写重构的 C/C++ 语句。
当 --c_src_interlist 和 --optimizer_interlist 选项与优化一起使用时,编译器会插入其注释,并且交叉列出功能在汇编器之前运行,从而将原始 C/C++ 源代码合并到汇编文件中。
例如,假设下述C代码是使用优化 (--opt_level=2) 和 --optimizer_interlist 选项编译的:
int copy (char *str, const char *s, int n)
{
int i;
for (i = 0; i < n; i ++)
*str++ = *s++;
}
汇编文件包含与汇编代码交叉列出的编译器注释。
_main:
STMFD SP!, {LR}
;** 5----------------------- printf("Hello, world\n");
ADR A1, SL1
BL _printf
;** 6----------------------- return 0;
MOV A1, #0
LDMFD SP!, {PC}
如果添加--c_src_interlist 选项(使用--opt_level=2、--c_src_interlist 和 --optimizer_interlist 进行编译),则汇编文件会包含与汇编代码交叉列出的编译器注释和 C 源代码。
_main:
STMFD SP!, {LR}
;** 5----------------------- printf("Hello, world\n");
;------------------------------------------------------------------------------
; 5 | printf("Hello, world\n");
;------------------------------------------------------------------------------
ADR A1, SL1
BL _printf
;** 6----------------------- return 0;
;------------------------------------------------------------------------------
; 6 | return 0;
;------------------------------------------------------------------------------
MOV A1, #0
LDMFD SP!, {PC}