ZHCUAU3J January 2018 – March 2024
以下是其他选项的详细说明:
--advice:performance | 生成编译时优化建议。请参阅节 4.11。 |
--float_operations_allowed= {none|all|32|64} | 限制允许的浮点运算类型。默认为 all。如果设置为 none、32 或 64,则检查应用程序是否将在运行时执行运算。例如,如果命令行指定 --float_operations_allowed=32,则编译器会在生成双精度运算时发出错误消息。这可以用来确保双精度运算不会意外地被引入到应用程序中。检查是在进行宽松模式优化后执行的,因此完全删除非法运算不会产生任何诊断消息。 |
--fp_mode={relaxed|strict} | 默认的浮点模式为 strict。要启用宽松浮点模式,请使用 --fp_mode=relaxed 选项。宽松浮点模式会使双精度浮点计算和存储在可能的情况下转换为单精度浮点。这种行为不符合 ISO 要求,但会加快代码速度,准确性会有降低。宽松模式下会发生以下具体的变化:
|
在以下示例中,iN=整数变量,fN=浮点变量,dN=双精度变量:
|
|
要启用宽松浮点模式,请使用 --fp_mode=relaxed,这也会设置 --fp_reassoc=on。要禁用宽松浮点模式,请使用 --fp_mode=strict,这也会设置 --fp_reassoc=off。 | |
如果指定了 --strict_ansi,则会自动设置 --fp_mode=strict。可以通过在 --strict_ansi 之后指定 --fp_mode=relaxed 以采用严格的 ANSI 模式来启用宽松浮点模式。 | |
--fp_reassoc={on|off} | 启用或禁用浮点算术的重新关联。如果设置了 --strict_ansi,则设置 --fp_reassoc=off,因为浮点算术的重新关联是违反 ANSI 要求的。 |
因为浮点值的精度有限,并且浮点运算是四舍五入的,所以浮点算术既不具有结合性,也不具有分配性。。例如,(1 + 3e100) - 3e100 不等于 1 + (3e100 - 3e100)。如果严格遵循 IEEE 754,编译器通常不能重新关联浮点运算。使用 --fp_reassoc=on 时,允许编译器重新关联代数,但代价是某些运算的精度会降低。 | |
--fp_single_precision_constant | 致使所有未添加后缀的浮点常量都被视为单精度值。默认情况下,如果未使用此选项,则此类常量会按照 EABI 输出的预期隐式转换为双精度常量。如果浮点常量始终符合 32 位浮点数所支持的范围,那么将它们视为此类常量可以提高性能。此选项可与 --fp_mode 和 -float_support 选项的任何设置一起使用。 |
--preinclude=filename | 在编译开始时包含 filename 的源代码。这可用于建立标准的宏定义。在包含搜索列表上的目录中搜索文件名。文件按照指定的顺序进行处理。 |
--printf_support={full| nofloat|minimal} |
支持更小、有限版本的 printf 函数系列(sprintf、fprintf 等)和 scanf 函数系列(sscanf、fscanf 等)运行时支持函数。有效值为:
|
没有运行时错误检查来检测是否使用了未包含支持的格式说明符。--printf_support 选项位于 --run_linker 选项之前,并且必须在执行最终链接时使用。 |