ZHCUAQ1F july 2015 – april 2023
编译器工具包括将 C/C++ 源语句插入到编译器的汇编语言输出中的功能。交叉列出功能可用于检查为每个 C 语句生成的汇编代码。交叉列出的行为有所不同,具体取决于是否使用了优化器以及指定了哪些选项。
调用交叉列出功能的最简单方法是使用 --c_src_interlist 选项。要在名为 function.c 的程序上编译和运行交叉列出功能,请输入:
cl6x --c_src_interlist function
--c_src_interlist 选项阻止编译器删除交叉列出的汇编语言输出文件。输出汇编文件 function.asm 被正常汇编。
在没有优化器的情况下调用交叉列出功能时,交叉列出将作为代码生成器与汇编器之间的单独通道运行。该功能读取汇编和 C/C++ 源文件,合并这些文件,然后将 C/C++ 语句作为注释写入汇编文件中。
有关将交叉列出功能与优化器一起使用的信息,请参阅节 4.16。使用 --c_src_interlist 选项会导致性能和/或代码大小下降。
以下示例显示了一个典型的交叉列出的汇编文件。
_main:
STW .D2 B3,*SP--(12)
STW .D2 A10,*+SP(8)
;------------------------------------------------------------------------------
; 5 | printf("Hello, world\n");
;------------------------------------------------------------------------------
B .S1 _printf
NOP 2
MVKL .S1 SL1+0,A0
MVKH .S1 SL1+0,A0
|| MVKL .S2 RL0,B3
STW .D2 A0,*+SP(4)
|| MVKH .S2 RL0,B3
RL0: ; CALL OCCURS
;------------------------------------------------------------------------------
; 6 | return 0;
;------------------------------------------------------------------------------
ZERO .L1 A10
MV .L1 A10,A4
LDW .D2 *+SP(8),A10
LDW .D2 *++SP(12),B3
NOP 4
B .S2 B3
NOP 5
; BRANCH OCCURS