architecture - ¿Qué arquitecturas ARM admite LLVM?
(2)
Trabajo en software escrito en C que se ejecuta en una variedad de procesadores ARM con diferentes arquitecturas (ARMv5, ARMv6 principalmente). Actualmente compilamos nuestro código con algunas versiones diferentes de RVDS, pero estamos buscando compilar algún código con LLVM para agregar algunos instrumentos personalizados.
Sé que LLVM tiene objetivos ARM y Thumb, pero ¿qué arquitecturas admite, específicamente? ¿El código generado por LLVM funcionará en ARMv5? ¿De qué limitaciones debería ser consciente?
He ejecutado el código generado por llvm en ARMv4, y ARMv6 definitivamente. Tengo algunas plataformas ARMv5 pero no recuerdo si lo intenté allí. Asumiría que el resultado de un brazo genérico -march = daría el mínimo denominador común (ARMv4), lo que significa que se ejecutará en ARMv5. Todo esto estaba incrustado, ningún tipo de sistema operativo funciona, no he utilizado llvm para crear binarios de arm linux ni nada de eso.
Su código fuente enumera los siguientes archs:
// ARM architectures.
def ArchV4T : SubtargetFeature<"v4t", "ARMArchVersion", "V4T", "ARM v4T">;
def ArchV5T : SubtargetFeature<"v5t", "ARMArchVersion", "V5T", "ARM v5T">;
def ArchV5TE : SubtargetFeature<"v5te", "ARMArchVersion", "V5TE", "ARM v5TE, v5TEj, v5TExp">;
def ArchV6 : SubtargetFeature<"v6", "ARMArchVersion", "V6", "ARM v6">;
def ArchV6M : SubtargetFeature<"v6m", "ARMArchVersion", "V6M", "ARM v6m", [FeatureNoARM, FeatureDB]>;
def ArchV6T2 : SubtargetFeature<"v6t2", "ARMArchVersion", "V6T2", "ARM v6t2", [FeatureThumb2]>;
def ArchV7A : SubtargetFeature<"v7a", "ARMArchVersion", "V7A", "ARM v7A", [FeatureThumb2, FeatureNEON, FeatureDB]>;
def ArchV7M : SubtargetFeature<"v7m", "ARMArchVersion", "V7M", "ARM v7M", [FeatureThumb2, FeatureNoARM, FeatureDB, FeatureHWDiv]>;