ARMv4/5/6的哪些部分代码无法在ARMv7上运行?

8

据我了解,像Cortex-A9这样的ARMv7处理器通常与旧版ARM体系结构的代码大多数兼容。但是,例如在尝试在Cortex-A8上运行ARM9代码时报告了段错误。

ARMv4/5/6 (ARM7TDMI/ARM9/ARM11)代码中哪些部分不能在ARMv7处理器上工作?存在哪些功能或架构特征,可能导致为这些版本构建的程序在ARMv7上失效?


http://infocenter.arm.com 上有您需要的所有文档,查看架构参考手册和技术参考手册即可。 - old_timer
这有点太复杂了,有人能把这些信息提炼成易于理解的东西吗?我正在寻找像“旧的ARM代码通常可以在ARMv7处理器上运行,但有以下例外…”这样的答案。 - bwDraco
1
你读过ARMv7a架构参考手册的附录'M'和'O'吗?它们似乎提供了你正在寻找的最接近答案。 - James Greenhalgh
我无法访问那份文档,只有ARM客户才能下载这些文件。 - bwDraco
1
@DragonLord 不正确 - 访问架构文档需要注册,但不要求成为客户。 - unixsmurf
显示剩余2条评论
2个回答

4

对于应用程序代码而言,主要问题是未对齐的内存访问。在ARMv4之前,并可在ARMv4到ARMv6上进行配置,从未对齐地址进行LDR加载将导致读取数据旋转,其他内存访问则会像地址的最低有效2位为零一样。


1
实际上,这就是在这个问题中看到的行为。 本质上,您是在说链接问题的原始帖子中获得的旋转输出特征是ARMv6及更早版本的特征,并且相同的代码会在ARMv7上崩溃? - bwDraco
1
@bwDraco 你可以配置ARMv7上发生的情况:要么崩溃,要么产生正确的数据。某个地方有一个开关可以控制这个。 - fuz

2

编译针对ARM指令集armv4的代码应该能够正常工作。

除了您没有研究这个主题(避免研究它的时间比研究它还长)之外,您提出的问题的真正问题是,您可能希望从一个平台移植到另一个平台的大部分代码与外围设备有关,而不是指令集。大多数代码无法移植,不是由于指令集,而是由于定时器、UART、视频和USB控制器等。这些不是Wintel盒子,它们不试图实现反向兼容性。

您链接的问题实际上没有实质内容,因为OP没有放置任何代码,在stackoverflow上也没有公开讨论过这个问题,这可能是糟糕的代码,与处理器核心无关,或者可能是不存在的外围设备和访问这些设备,人们会期望挂起或崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接