此 ABI 适用于支持通常称为“x86”或“IA-32”的指令集的 CPU。此 ABI 的特性包括:
-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32
这些标记指向 Pentium Pro 指令集,以及 MMX、SSE、SSE2、SSE3 及 SSSE3 扩展指令集。生成的代码在顶层 Intel 32 位 CPU 之间进行了均衡优化。
如需了解有关编译器标记的更多信息,特别是与性能优化相关的信息,请参阅 GCC x86 性能提示。
ABI 不含任何其他可选 IA-32 扩展指令集,例如:
您仍可使用这些扩展指令集,只要您使用运行时功能探测来启用它们,并且为不支持它们的设备提供回退机制。
NDK 工具链假设在函数调用之前进行 16 字节堆栈对齐。默认工具和选项会强制实施此规则。如果编写的是汇编代码,必须确保堆栈对齐,而且其他编译器也遵守此规则。
请参阅以下文档了解更多详情:
此 ABI 适用于支持通常称为“x86-64”的指令集的 CPU。它支持 GCC 通常使用以下编译器标记生成的指令:
-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel
这些标记指向 x86-64 指令集(根据 GCC 文档),以及 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2 和 POPCNT 扩展指令集。生成的代码在顶层 Intel 64 位 CPU 之间进行了均衡优化。
如需了解有关编译器标记的更多信息,特别是与性能优化相关的信息,请参阅 GCC x86 性能。
此 ABI 不含任何其他可选的 x86-64 扩展指令集,例如:
您仍可使用这些扩展指令集,只要您使用运行时功能探测来启用它们,并且为不支持它们的设备提供回退机制。
请参阅以下文档了解更多详情:
默认情况下,NDK 指向所有非弃用 ABI。您可通过在 Application.mk
文件中设置 APP_ABI
来指向单个 ABI。以下代码段演示了使用 APP_ABI
的几个示例
APP_ABI :=