Architecture LLVM支持哪些ARM体系结构?

Architecture LLVM支持哪些ARM体系结构?,architecture,arm,llvm,Architecture,Arm,Llvm,我从事的软件是用C编写的,运行在各种不同体系结构的ARM处理器上(主要是ARMv5、ARMv6)。目前,我们使用几个不同版本的RVDS编译代码,但我们正在考虑使用LLVM编译一些代码,以便添加一些自定义工具 我知道LLVM有ARM和Thumb目标,但它具体支持哪些体系结构?LLVM生成的代码能在ARMv5上工作吗?我应该注意哪些限制?我已经在ARMv4和ARMv6上运行了llvm生成的代码。我有一些ARMv5平台,但不记得我是否在那里尝试过。我假设泛型-march=arm的输出将给出最小公分母(

我从事的软件是用C编写的,运行在各种不同体系结构的ARM处理器上(主要是ARMv5、ARMv6)。目前,我们使用几个不同版本的RVDS编译代码,但我们正在考虑使用LLVM编译一些代码,以便添加一些自定义工具


我知道LLVM有ARM和Thumb目标,但它具体支持哪些体系结构?LLVM生成的代码能在ARMv5上工作吗?我应该注意哪些限制?

我已经在ARMv4和ARMv6上运行了llvm生成的代码。我有一些ARMv5平台,但不记得我是否在那里尝试过。我假设泛型-march=arm的输出将给出最小公分母(ARMv4)代码,这意味着它将在ARMv5上运行。这些都是嵌入式的,没有操作系统类型的工作注意,我没有使用llvm创建arm linux二进制文件或类似的东西。

他们列出了以下ARCH:

// 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]>;
//ARM体系结构。
def ArchV4T:子目标特征;
def ArchV5T:子目标特征;
def ArchV5TE:子目标特征;
def ArchV6:子目标特征;
def ArchV6M:子目标特征;
def ArchV6T2:子目标特性;
def ArchV7A:子目标特征;
def ArchV7M:子目标特征;

最好有这样一个权威列表。不过,很难知道每个体系结构的稳定性级别。虽然这些是LLVM后端所知道的拱门,但它最好在v5te、v6和v7a上进行测试。v5te是LLVM Buildbot上的一种配置,v6和v7a都作为arm apple darwin(iOS)在苹果的“smooshlab”Buildbot上进行了测试。它链接到trunk,但此列表是从哪个版本获取的?@RedX:应该在2.8和2.9之间的某个时间获取。看看2.8版本,这看起来相当准确。llvm 3.4为armv4t生成的代码肯定不支持互通,这是EABI所要求的。生成的llvm推送
lr
,并将其弹出回
pc
。但是,如果由于在armv4t上,
pop pc
不能在ARM和Thumb模式之间切换,因此需要互通,则基本上禁止这种操作。函数必须通过armv4t上的
bx
指令返回其调用者。