为什么 RV64 为 32 位操作而不是 64 位操作引入新的操作码

2024-01-16

在浏览 RISC-V 规范时,我注意到 64 位版本与 32 位版本的不同之处在于,它

  1. 将寄存器扩展至 64 位
  2. 更改了指令以作用于整个 64 位范围。
  3. 添加了执行 32 位操作的新指令

这使得 RV32 代码与 RV64 不兼容。 但是,如果 64 位版本是通过以下方式实现的:

  1. 将寄存器扩展至 64 位
  2. 重命名ADD/SUB/SHL/.. to ADDW/SUBW/SHLW/..并使它们仅在带符号扩展的 32 位上运行。
  3. 添加新指令ADD/SUB/SHL/.. or ADDD/SUBD/SHLD/..作用于完整的 64 位

这将允许 RV32 程序也可以在 RV64 上运行。为了实现 CPU,工作量将保持不变,因为在这两种情况下都必须实现 64 位和 32 位指令,并且相比之下,仅交换 64 位和 32 位版本的操作码符合规格。 (乘法指令可能除外。)

那么为什么 RISC-V 决定将新的操作码分配给 32 位操作而不是 RV64 中的 64 位操作呢?


RV64 和 RV32 非常兼容。如果程序不依赖隐式模 32 位算术并且所有地址都适合 32 位,则机器代码可能是相同的。然而,向 RV64 处理器添加完整的 RV32 用户模式非常容易。

RV32 的 64 位超集太复杂了。 AUIPC、JAL、LOAD、STORE 和 BRANCH 没有足够的操作码空间。如果有额外的扩展,情况会更糟。

RV64 中的少数 32 位指令主要用于过度使用模 32 位算术的程序。这是很常见的问题。不过,快速且可移植的代码应该避免它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 RV64 为 32 位操作而不是 64 位操作引入新的操作码 的相关文章

随机推荐

  • 如何在 Doxygen 示例中保留注释

    我有一个简单的方法 带有一条注释 我想在我的 doxygen 主页中用作示例 code void showNum int numToDisplay This is just a method to display a value std c
  • 有没有办法对打印媒体和默认布局使用相同的 CSS 样式表?

    我正在寻找一种方法 为打印媒体使用与默认屏幕布局相同的样式表 对我来说的好处是我不必每次更新 CSS 时都更新 2 个文件 我更喜欢有一个样式表 并通过以某种方式表示它们来指定印刷媒体的特殊规则 这可能是不可能的 但我想我应该把问题放在那里
  • Python - 解析 Json 和 XML 哪个更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 更改 php 中检索到的日期的时区

    我正在从数据库中检索格式为 2013 09 15 08 45 00 的日期 该日期是在 UTC 中设置的 我需要将其更改为另一个动态时区 基于用户 到目前为止我已经 datetime row gt field data field perf
  • 乌龟的笔触可以改变吗?

    我需要使用 Python 的海龟图形来绘制条形图 我认为简单地将笔做成粗正方形会更容易 这样我就可以像这样绘制条形图 而不必担心制作数十个矩形并填充它们 当我使用设置乌龟形状时turtle shape square 不过 它只会改变笔的外观
  • Pycharm Django 调试真的很慢

    我有一个中等大小的网站 但 PyCharm 需要大约 30 秒才能启动 Runserver 并准备好运行应用程序 如果我 运行 应用程序而不是 调试 则启动只需大约 3 秒 我可以做哪些事情来加快代码更改和调试周期 我使用的是带有 16Gb
  • Cassandra 节点几乎空间不足,但 Nodetool 清理正在增加磁盘使用?

    我们的一个节点的磁盘使用率为 95 我们向集群添加了另一个节点 希望能够重新平衡 但该节点上的磁盘空间并没有下降 我尝试执行nodetool cleanup 假设节点上有多余的键 但磁盘空间正在增加 清理真的会减少尺寸吗 是的 会的 但是您
  • 验证出生日期并检查年龄[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在我的表单中 我使用下拉菜单来显示日 月 年 你能帮我验证一下日期吗 我必须验证输入的年龄是否大于 15 岁 还要检查闰年等 PHP
  • 如何在react中不添加url的情况下导航到特定路线

    我在用着react router我有一些嵌套的路线 stories and stories storyId 现在我的问题是我有一个组件是一个单一的故事并使用这个特定的storyId导航至路线 stories storyId 单击它即可查看该
  • Asp.net Core 模型绑定器接受布尔类型的随机整数

    鉴于模型具有布尔属性 public class Person public string Name get set public bool IsMale get set 当尝试发布以下有效负载时 name Bob isMale 12345
  • 将数据帧添加到 Spark 中的列表

    我正在尝试创建 n dataframes根据一的数据 我正在检查 a 的整数值column in dataframe并循环创建 n 的sql语句dataframes像 一样多Integers在专栏中 这是我的代码 val maxvalue
  • 为什么使用带有硬编码种子的随机总是产生相同的结果? [复制]

    这个问题在这里已经有答案了 下面的简单 Java 程序使用了java util Random类 使其始终显示 hello world 代码片段如下所示 package nomain import java util Random final
  • 通过 ssh 在 Windows 上远程启动 matlab?不可能的?

    你好 我正在尝试通过与 Cygwin 一起安装的 OpenSSH 在 Windows 上远程运行 matlab 但是在没有 GUI 的情况下在 Windows 中启动 matlab 似乎是不可能的 如果我在本地登录 我可以启动 matlab
  • 当索引大于数组长度时,Javascript 循环回到数组开头

    我一直在到处寻找解决方案 但我似乎无法在任何地方找到答案 也许我只是错误地表述了我的问题 但是如果索引大于数组长度 我如何循环回到数组的开头 请参阅下面我的代码的示例 Array of colours let colours FFBE36
  • StateFlow 和 LiveData 有什么区别?

    正如我在标题中提到的 我很好奇两者之间的一般差异 你能帮忙吗 我找不到具体的区别 因为互联网上有复杂的例子 在性能方面有哪些差异 在哪些场景下有优势 将 StateFlow 与 Kotlin Flow 结合使用是有利的 但是在使用 Live
  • Python/Django ModuleNotFoundError:没有名为“餐厅”的模块

    执行 python 代码时观察到以下错误跟踪 潜在原因ModuleNotFoundError 没有名为 餐厅 的模块 traceback most recent call last File C Users Archibald Dev tr
  • pandas 数据框,添加一列作为每组另一列的移动平均值

    我有一个数据框df像下面这样 dates pd date range 2000 01 01 2001 01 01 df1 pd DataFrame date dates value np random normal size len dat
  • 如何在 kotlin/android studio 中设置 protobuf?

    第一次使用 protobuf 所以按照 google 的说明 我将所有 protos 放在我的 android studio 项目的 protos 文件夹中 我知道 proto 文件设置正确 我使用以下方法编译该文件夹中的文件 protoc
  • 如何使用外部来源的 paperscript?

    我正在尝试从教程中学习 paper js 但我无法使其从外部文件工作 实现外部 paperscript 文件的最简单方法是什么 正如中所述入门 http paperjs org tutorials getting started worki
  • 为什么 RV64 为 32 位操作而不是 64 位操作引入新的操作码

    在浏览 RISC V 规范时 我注意到 64 位版本与 32 位版本的不同之处在于 它 将寄存器扩展至 64 位 更改了指令以作用于整个 64 位范围 添加了执行 32 位操作的新指令 这使得 RV32 代码与 RV64 不兼容 但是 如果