我正在检查一个我使用GCC(包括在Android NDK中的版本)编译为ARM Android平台的C程序的汇编语言输出。
我指定了ARM指令集,这些指令集长度为4个字节而不是THUMB,但令人惊讶的是,生成的汇编代码将函数对齐到2个字节的边界!
以下是生成的代码示例,显示了错误的.align指令:
.Ltext0:
.global __aeabi_dmul
.global __aeabi_d2iz
.section .text.InitializeFIRFilter,"ax",%progbits
.align 2
.global InitializeFIRFilter
.type InitializeFIRFilter, %function
InitializeFIRFilter:
.fnstart
根据这个文档,正确的对齐方式应该是4,这很有道理。我试图使用-falign-functions=4来强制对齐,但它被忽略了。
这是我在Android.mk文件中指定的构建标志。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := nativeJadeMobile
LOCAL_SRC_FILES := nativeJadeMobile.c fftasm.s
LOCAL_LDLIBS := -llog
LOCAL_CFLAGS += -marm -ffast-math -O2 -march=armv6 -falign-functions=4 -save-temps -S
include $(BUILD_SHARED_LIBRARY)
有谁能发现我做错了什么,或者知道如何强制执行正确的代码对齐?非常感谢您的帮助!
.p2align
,这是一个明确的2的幂,而不是依赖于目标的字节计数或指数。 - Peter Cordes