2010-12-08 13 views
6

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.¿Qué arquitecturas ARM admite LLVM?

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?

Respuesta

7

Sus source code listas de 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]>; 
+0

Es bueno tener una lista autorizada de esta manera. Sin embargo, es difícil saber qué nivel de estabilidad tiene cada arquitectura. –

+2

Si bien estos son los arcos que conoce el backend de LLVM, se prueban mejor en v5te, v6 y v7a. v5te es una configuración en LLVM Buildbot http://google1.osuosl.org:8011/ y v6 y v7a son probados como arm-apple-darwin (iOS) en el "robotbar" BuildBot de Apple. – ohmantics

+0

Se vincula al tronco, pero ¿de qué versión se tomó esta lista? – RedX

1

He ejecutado el código generado 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.

Cuestiones relacionadas