2010-12-08 17 views
6

Farklı mimarilere sahip çeşitli ARM işlemciler üzerinde çalışan C ile yazılmış yazılımlar üzerinde çalışıyorum (çoğunlukla ARMv5, ARMv6). Şu anda kodumuzu birkaç farklı RVDS sürümü ile derliyoruz, ancak bazı özel enstrümantasyonlar eklemek için LLVM ile bazı kodları derlemeyi düşünüyoruz.LLVM hangi ARM mimarilerini destekliyor?

LLVM'nin ARM ve Başparmak hedefleri olduğunu biliyorum, ancak özellikle hangi mimarileri destekliyor? LLVM ARMv5 üzerinde kod çalışması üretecek mi? Hangi sınırlamalardan haberdar olmalıyım?

cevap

7

Onların source code listeleri aşağıdaki kemerler:

// 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

Böyle bir yetkili liste olması iyi. Yine de, her mimarinin hangi seviyede istikrar gösterdiğini bilmek zor. –

+2

Bunlar LLVM arka ucunun bildiği kemerler olsa da, en iyi v5te, v6 ve v7a üzerinde test edilir. v5te, LLVM Buildbot http://google1.osuosl.org:8011/ adresinde bir yapılandırmadır ve v6 ve v7a'nın ikisi de Apple'ın "smooshlab" Buildbot'unda arm-apple-darwin (iOS) olarak test edilmiştir. – ohmantics

+0

Gövde bağlantıları var, ancak bu listeden hangi versiyon alındı? – RedX

1

ARMv4 ve ARMv6'da kesinlikle llvm üretilen kodu çalıştırdım. Bazı ARMv5 platformlarım var ama orada denediğimi hatırlamıyorum. Bir jenerik -march = kolunun çıktısını en az ortak payda (ARMv4) kodu verecek, yani ARMv5 üzerinde çalışacağı anlamına gelir. Bu tüm gömülü, işletim sistemi türü hiçbir işe yaramadı, ben kol linux ikili ya da bunun gibi bir şey yaratmak için llvm kullanmadım.