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 選項(xiàng)進(jìn)行優(yōu)化(--opt_level=n 或 -On 選項(xiàng))編譯時(shí),可以控制交叉列出特性的輸出。
當(dāng) --optimizer_interlist 選項(xiàng)與優(yōu)化一起使用時(shí),交叉列出功能不會(huì) 單獨(dú)運(yùn)行。相反,編譯器會(huì)在代碼中插入注釋,指示編譯器已如何重新排列和優(yōu)化代碼。這些注釋在匯編語言文件中以 ;** 開頭顯示。除非也使用了 --c_src_interlist 選項(xiàng),否則不會(huì)交叉列出C/C++ 源代碼。
交叉列出功能會(huì)影響優(yōu)化代碼,因?yàn)槠淇赡軙?huì)阻止某些優(yōu)化跨越 C/C++ 語句邊界。優(yōu)化使正常的源代碼交叉列出變得不切實(shí)際,因?yàn)榫幾g器會(huì)大幅度重新排列程序。因此,使用 --optimizer_interlist 選項(xiàng)時(shí),編譯器會(huì)編寫重構(gòu)的 C/C++ 語句。
當(dāng) --c_src_interlist 和 --optimizer_interlist 選項(xiàng)與優(yōu)化一起使用時(shí),編譯器會(huì)插入其注釋,并且交叉列出功能在匯編器之前運(yùn)行,從而將原始 C/C++ 源代碼合并到匯編文件中。
例如,假設(shè)下述C代碼是使用優(yōu)化 (--opt_level=2) 和 --optimizer_interlist 選項(xiàng)編譯的:
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 選項(xiàng)(使用--opt_level=2、--c_src_interlist 和 --optimizer_interlist 進(jìn)行編譯),則匯編文件會(huì)包含與匯編代碼交叉列出的編譯器注釋和 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}