Warum ist gcc emission Code auf eine 2-Byte-Grenze für die ARM-Befehlssatz ausgerichtet?

Ich bin Inspektion der Assembler-Sprache Ausgabe eines C-Programms Ich bin für die ARM Android-Plattform mit GCC (die Version in der Android NDK enthalten) kompilieren.

Ich spezifiziere die ARM-Befehlssatz, die 4 Bytes in der Länge statt THUMB sind, aber überraschenderweise ist der emmited Assembler-Sprachcode die Ausrichtung von Funktionen auf eine 2-Byte-Grenze!

Hier ist ein Beispiel des generierten Codes, der die falsche .align-Direktive zeigt:

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

Nach diesem Dokument sollte die korrekte Ausrichtung 4 sein, was sinnvoll ist.

Ich versuche, die Ausrichtung mit den -falign-functions = 4 zu erzwingen, aber es wird ignoriert.

Hier sind die Build-Flags, die ich in der Android.mk-Datei spezifiziere

 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) 

Kann jemand vorstellen, was mache ich falsch, oder weiß, wie kann ich die korrekte Codeausrichtung erzwingen? Vielen Dank im Voraus!

Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.