【问题标题】:Do RISC processors not have backward compatibility?RISC 处理器没有向后兼容性吗?
【发布时间】:2020-11-18 17:09:16
【问题描述】:

我正在阅读一本教科书,上面写着:

RISC 处理器在嵌入式处理器市场上表现非常出色,可控制诸如蜂窝电话、汽车刹车和互联网设备等系统。在这些应用中,节省成本和功耗比保持向后兼容性更重要。

这是否意味着 RISC 处理器(例如 ARM)不能向后兼容旧版本?

【问题讨论】:

  • 哪本书?
  • @phuclv 教科书是CSAPP
  • 你在这方面读得太重了。 “更重要”的反义词是“不重要”。
  • 没有市场用例。为什么要将废物添加到没有价值的产品中?
  • 如果本文试图回复RISC和向后兼容性无关,那就找一本更好的教科书。您可以轻松阅读指令集上的 arm 文档,并了解兼容性的程度。

标签: arm cpu-architecture backwards-compatibility instruction-set risc


【解决方案1】:

没错;例如,在非常旧的 ARM 上,具有非零低位的字加载意味着旋转对齐的字。在现代 ARM 上,这些位只是地址的一部分,给你一个未对齐的负载。

因此,ARM 在某一时刻巧妙地破坏了与依赖该功能的稀有代码的兼容性,使得这些旧二进制文件在现代 ARM 上无法使用。大多数 ARM 二进制文件仍然很好,因为它们完全避免了未对齐的字加载/存储。

【讨论】:

  • 感谢您的回答。那么为什么我们不能像 X86-64 那样让 RISC 处理器向后兼容呢?
  • @slowjams:如果你愿意,你可以这样做,只是没有市场理由以不进行可能导致轻微不兼容性的改进为代价来保持向后兼容。我认为像 MIPS 之类的其他一些 RISC ISA 确实维持了很长时间的向后兼容(直到 MIPS64r6 重新组织了一堆操作码并提供了没有分支延迟槽的分支。)
【解决方案2】:

另一个例子是MIPS

通常,当引入新的 ISA 版本时,会添加指令,但旧指令仍保持原样以实现向后兼容性。例如,在 x86 中,许多几十年来无人使用的指令直到现在仍然有效并受到支持。然而,在 MIPS III 中,一些指令被删除以释放一些操作码。然后在 MIPS 技术从 SGI 分离出来的 MIPS V 之后,引入了一次大修:MIPS32/MIPS64。命名方案已更改,并删除了更多说明

  • 一些有条件的移动
  • 可能的分支指令(在以前的版本中已弃用)。
  • 16 位立即数的整数溢出捕获指令
  • 整数累加器指令(连同 HI/LO 寄存器,移至 DSP 特定应用扩展)
  • 未对齐的加载指令(LWL 和 LWR),(要求大多数普通加载和存储支持未对齐的访问,可能通过陷阱和添加新指令 (BALIGN))

MIPS32/MIPS64

它还“重新组织了指令编码,为未来的扩展腾出了空间。”

其中一个原因可能是因为 MIPS 将关注点从高性能系统转向嵌入式系统

【讨论】:

  • 直到 2014 MIPS32r6 / MIPS64r6 才出现操作码重组。在那之前,我认为 MIPS32 / MIPS64 已经足够接近向后兼容,至少对于用户空间代码而言。我想我记得 Wikipedia 对此更清楚,至少有一些 MIPS32r6 的子标题将它与早期的 MIPS32 区分开来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多