硬件如何识别 RISC-V 压缩指令?

How do hardware recognizes RISC-V compressed instructions?

这是我第一次在Whosebug 上提问,我已经对这个问题做了一些搜索。如果我遗漏了什么,请告诉我。

请问硬件是如何识别RVC指令的

比如我取一个32位的指令,想判断第一个16位是不是RVC指令。我的问题是关于 LUI 指令。 LUI 以 20 位立即数开始。由于立即数可以是任意数,那么第一个16位立即数可以是RVC指令吗?

我怎么知道第一个 16 位是 RVC 指令还是 imm/func/.. 的一部分或其他什么?

I fetch a 32-bit instruction and want to decide whether the first 16-bit is a RCV instruction. My question is about LUI instruction. LUI begins with 20-bit immediate. Since immediate can be any number, may the first 16-bit immediate be a RVC instruction?

您正在查看从最高有效位到最低有效位的编码,但对于 RISC V,这是倒退的。从指令集的角度来看,LUI 从最低有效位“开始”并以最高有效位结束。 RISC V 上的位编号对于 LSB 为 0,对于 MSB 为 31(当 32 位时)。

RISC V 指令集是从小字节序的角度定义的,因此指令中编号最低的字节使用相当简单的方案对指令的大小进行编码。通常,第一个(最低位)两位指定 32 位或 16 位指令,但其他大小(如 48 和 64 及更大)也是可能的,并使用额外的位。

在两位中,我们可以编码 4 个不同的值:一个用于 32 位指令,两个用于 16 位指令(它们很短,因此需要更多编码),一个两者都没有,它用于 48 位或更大的编码(然后使用更多位来指示实际长度)。