Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Por qué gcc emmiting código alineado a un límite de 2 bytes para el conjunto de instrucciones ARM?

Estoy inspeccionando la salida de lenguaje ensamblador de un programa C que estoy compilando para la plataforma ARM de Android usando GCC (la versión incluida en el Android NDK).

Estoy especificando el conjunto de instrucciones ARM que son 4 bytes de longitud en lugar de THUMB, pero sorprendentemente, el código de lenguaje ensamblado emmited es alinear las funciones a un límite de 2 bytes!

Aquí hay una muestra del código generado que muestra la directiva .align incorrecta:

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

De acuerdo con este documento , la alineación correcta debe ser 4 que tiene sentido.

Estoy tratando de forzar la alineación utilizando las funciones -falign = 4, pero se está ignorando.

Aquí están los indicadores de construcción que estoy especificando en el archivo 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) 

¿Puede alguien detectar lo que estoy haciendo mal, o saber cómo puedo aplicar la alineación de código correcto? ¡Muchas gracias por adelantado!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.