【问题标题】:RiscV spec v2.1 Vol 1 User Level ISA duplicate opcodes listing?RiscV 规范 v2.1 第 1 卷用户级 ISA 重复操作码列表?
【发布时间】:2017-05-04 20:14:26
【问题描述】:

我不认为这是一个大问题,但我发现用户级 ISA 规范的 RV32I 和 RV64I 指令集的操作码“SLLI、SRLI 和 SRAI”有重复条目。这与“除了 RV32I”的表头相矛盾,看起来是重复错误。我指的是"Risc-V Instruction Set Manual/Volume I: User-Level ISA Version 2.1" (pdf) 中的第 9 章“RV32/64G 指令集列表”中的表格,其目的是仅列出每个操作码一次:

RV32I Base Instruction Set
0000000 shamt rs1 001 rd 0010011 SLLI
0000000 shamt rs1 101 rd 0010011 SRLI
0100000 shamt rs1 101 rd 0010011 SRAI
...

RV64I Base Instruction Set (in addition to RV32I)
000000 shamt rs1 001 rd 0010011 SLLI
000000 shamt rs1 101 rd 0010011 SRLI
010000 shamt rs1 101 rd 0010011 SRAI

由于我没有看到对此帖子的任何回复 - 这是在 RiscV 规范中发布此类小问题的正确论坛吗?

【问题讨论】:

  • Dave,您能否将准确的 URL(网络)链接添加到文档 (content.riscv.org/wp-content/uploads/2016/06/…)?问题的准确报价?为什么您将相同的操作码视为问题/错误? (这可能是询问错别字的错误论坛)
  • dave,它们是不同的:32 位模式的 5 位 shamt 和 64 位模式的 6 位 shamt。引用表格中的行有助于比较它们,因此,在发布问题时进行一些编辑(添加链接和引号)。有时您可以在发送给 SO 之前关闭问题。
  • osgx 你是对的 - 它们的 shamt 字段宽度不同。尽管它们使用相同的操作码助记符。谢谢。如果我没有清楚地说明我的原始帖子,我深表歉意,以后我将使用指向规范的网络链接。

标签: specifications riscv


【解决方案1】:

《Risc-V 指令集手册/第一卷:用户级 ISA 版本 2.1》 https://content.riscv.org/wp-content/uploads/2016/06/riscv-spec-v2.1.pdf 在第 9 章列表中(pdf 第 64 页,文本第 54 页):

RV32I Base Instruction Set
0000000 shamt rs1 001 rd 0010011 SLLI
0000000 shamt rs1 101 rd 0010011 SRLI
0100000 shamt rs1 101 rd 0010011 SRAI

然后在下一页

RV64I Base Instruction Set (in addition to RV32I)
000000 shamt rs1 001 rd 0010011 SLLI
000000 shamt rs1 101 rd 0010011 SRLI
010000 shamt rs1 101 rd 0010011 SRAI
0000000 shamt rs1 001 rd 0011011 SLLIW
0000000 shamt rs1 101 rd 0011011 SRLIW
0100000 shamt rs1 101 rd 0011011 SRAIW

在第 38 页 (pdf) 28 (text) 中定义了说明:

31 26 25 24 20 19 15 14 12 11 7 6 0
imm[11:6] imm[5]   imm[4:0]  rs1 funct3 rd  opcode
   6      1         5         5    3    5    7
000000   shamt[5] shamt[4:0] src SLLI  dest OP-IMM
000000   shamt[5] shamt[4:0] src SRLI  dest OP-IMM
010000   shamt[5] shamt[4:0] src SRAI  dest OP-IMM
000000     0      shamt[4:0] src SLLIW dest OP-IMM-32
000000     0      shamt[4:0] src SRLIW dest OP-IMM-32
010000     0      shamt[4:0] src SRAIW dest OP-IMM-32

SLLI 是逻辑左移(零移入低位); SRLI 是逻辑右移(零移到高位); SRAI 是算术右移(原始符号位被复制到空出的高位中)。对于 RV32I,如果 imm[5] != 0,SLLISRLISRAI 会生成非法指令异常。 SLLIWSRLIWSRAIW 是仅限 RV64I 的指令,它们的定义类似,但对 32 位值进行操作并产生带符号的 32 位结果.如果 imm[5] != 0

则 SLLIW、SRLIW 和 SRAIW 生成非法指令异常

因此,在 32 位模式和 64 位模式下,SLLI/SRLI/SRAI 的行为不同。在 32 位模式下,它们有 5 位 shamt,而在 64 位模式下,它们有 6 位 shamt。

这不矛盾

这不是。您只是没有计算/比较不同表中的 imm 值。在一个表中是0000000 shamt(7 个零,5 位 shamt),在另一个表中是 000000 shamt(6 个零,6 位 shamt)。

【讨论】:

  • osgx 在你发布你的答案之后 - 我决定测试我的理解(看来我在这个论坛上的评论大小有限)。我将发布另一个问题。请参考这个新问题。
  • @daveW,如果您认为此问题已关闭并已回答,您可能会或可能不会通过单击左侧的“v”形按钮将此答案标记为正确。如果您认为此问题和答案根本没有用,您可以尝试将其标记为删除,也可以不尝试。
  • osgx - 请参阅问题标题“RiscV 汇编器 - 试验 RV32I 的 'slli' 命令”
  • osgx - 经过一番思考,我认为从规范第 54 页开始的表格可以使用不同的格式。查看许多连续的 0 是一个“眼图”,因此我觉得这很容易出错。 'imm[11:0]' 描述的'slli' 上方下一行的'andi' 指令在我看来要容易得多。如何将此建议提交给 RiscV?
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 2020-10-20
相关资源
最近更新 更多