-
-msmall-divides
- 如果不存在硬件除法器,那么该选项可生成专为小型除法最优化的代码。对于分子和分母介于 0 到 15(含)之间的有符号整数除法,此开关可以提供基于表格查找的超快除法。启用硬件除法器时,此开关无效。
-
-mxl-gp-opt
- 如果您的程序包含地址,并且地址中最高有效位部分(上 16 位)中有非零位,那么对该地址执行加载或存储操作需要 2 条指令。
MicroBlaze 处理器 ABI 可以提供 2 个全局小型数据区域,每个区域可以包含最多 64 KB 的数据。这些区域内的任意存储器位置均可使用小型数据区域锚点和 1 个 16 位即时值来访问,只需 1 条指令用于加载或存储小型数据区域即可。此最优化可使用
-mxl-gp-opt
命令行参数开启。在这些区域内可存储大小小于某一阈值的变量,并且可使用较少的指令来对这些变量进行寻址。在链接阶段内会计算这些地址。重要: 如果当前使用该选项,则必须将其提供给程序构建进程的编译命令和链接命令。未一致使用此开关可能导致编译、链接或运行时错误。 -
-mno-clearbss
- 该选项可用于对仿真中使用的程序进行编译。
根据 C 语言标准,未初始化的全局变量分配到 .bss 节中,并且当程序开始执行时,保证这些变量的值为 0。通常这是通过 C 语言启动文件运行循环并在程序开始执行时以 0 值填充 .bss 节来实现的。最优化编译器还会将 C 语言代码中赋值 0 的全局变量分配到
.bss
节。在仿真环境中,以上两种语言特性可能都属于并非必要的开销。部分仿真器会将整个存储器自动归零。即使在正常环境中,您也可以编写不依赖于初始为 0 的全局变量的 C 语言代码。此开关可用于这些场景。它会导致 C 语言启动文件不以 0 值来初始化
.bss
节。它还会在内部强制禁止编译器在 .bss 节内分配初始为 0 值的全局变量,而是改为将其移至.data
节。该选项可以为您的应用改善启动时间。请谨慎使用该选项,确保不使用依赖于初始为 0 的全局变量的代码,并确保您的仿真平台不执行存储器的 0 值。 -
-mxl-stack-check
- 通过该选项,您可以检查程序运行时是否发生栈上溢。
编译器会在每个函数的序言中插入代码,并将栈指针值与可用存储器进行对比。如果栈指针超出可用内存,那么程序会跳转到子例程
_stack_overflow_exit
。该子例程会将variable _stack_overflow_error
的值设置为 1。您可以通过在源代码中提供
_stack_overflow_exit
函数充当栈上溢处理程序,以覆盖标准栈上溢处理程序。