为什么gcc emmiting代码与ARM指令集的2字节边界alignment?

我正在使用GCC(包含在Android NDK中的版本)检查我正在为ARM Android平台编译的C程序的汇编语言输出。

我指定了长度为4个字节的ARM指令集,而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数alignment到2个字节的边界!

下面是生成的代码显示错误.align指令的示例:

.Ltext0: .global __aeabi_dmul .global __aeabi_d2iz .section .text.InitializeFIRFilter,"ax",%progbits .align 2 .global InitializeFIRFilter .type InitializeFIRFilter, %function InitializeFIRFilter: .fnstart 

根据这个文件 ,正确的alignment应该是4这是有道理的。

我试图通过使用-falign-functions = 4强制alignment,但它被忽略。

这里是我在Android.mk文件中指定的构build标志

 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) 

任何人都可以发现我做错了什么,或知道如何执行正确的代码alignment? 提前非常感谢!

Solutions Collecting From Web of "为什么gcc emmiting代码与ARM指令集的2字节边界alignment?"