指令长度编码-maven3种打包方式中maven-assembly-plugin的使用详解

时间:2024-06-29 10:59:17
【文件属性】:

文件名称:指令长度编码-maven3种打包方式中maven-assembly-plugin的使用详解

文件大小:3.65MB

文件格式:PDF

更新时间:2024-06-29 10:59:17

risc-v

1.2 指令长度编码 基本 RISC-V ISA 具有 32 位固定长度指令,并且必须在 32 位边界对齐。然而,标准 RISC-V 编码模式被设计成支持变长指令的扩展,在这个扩展中,每条指令长度可以是 16 位指令包 裹(parcel)长度的整数倍,并且这些指令包裹必须在 16 位边界对齐。第 14 章中描述的标 准压缩 ISA 扩展,通过提供压缩的 16 位指令,减少了代码大小,并放松了对齐要求,允许 所有指令(16 位和 32 位)对齐到任意 16 位边界,以提高代码密度。 图 1.1 展示了标准 RISC-V 指令长度编码约定。所有基本 ISA 中的 32 位指令的最低 2 位 被设置为 11。可选的压缩 16 位指令集扩展中的指令,最低 2 位被设置为 00、01 或者 10。 超过 32 位的标准指令集扩展,在低位有额外的位被设置为 1,48 位、64 位长度约定如图 1.1 所示。指令长度在 80 位到 176 位之间的长度信息,被编码到一个 3 位的字段[14:12]中,给 出了 16 位字的数量,加上最开始的 5×16 位字。位[14:12]编码为 111,保留给未来更长的 指令编码。 xxxxxxxxxxxxxxaa 16 位(aa≠11) ···xxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxbbb11 32 位(bbb≠111) ···xxxx xxxxxxxxxxxxxxxx xxxxxxxxxx011111 48 位 ···xxxx xxxxxxxxxxxxxxxx xxxxxxxxx0111111 64 位 ···xxxx xxxxxxxxxxxxxxxx xnnnxxxxx1111111 (80+16*nnn)位,nnnn≠1111 ···xxxx xxxxxxxxxxxxxxxx x111xxxxx1111111 保留给≥192 位 字节地址: 基址+4 基址+2 基址 图 1.1:RISC-V 指令长度编码 由于压缩格式的代码大小和能耗节约,我们想将对压缩格式内建支持加入 到 ISA 编码模式中,而不是事后再来添加。但是为了简化实现,我们也不希望 压缩格式支持是必须的。我们也希望可选地支持更长的指令,用于实验和更大 的指令集扩展。虽然我们的编码约定需要一个对核心 RISC-V ISA 更为紧凑的编 码,但是这样做有几个好处。 一个支持标准 G 的 ISA 实现,只需要在指令缓存(instruction cache)保存 指令的最高 30 位(带来 6.25%的节约)。当重新填充指令缓存时,任何最低两 位有一位为零的指令,应当在被保存到缓存之前,被重新编码为 30 位非法指 令,以确保出现非法指令异常行为。 可能更为重要的是,通过浓缩我们的基本 ISA 为一个 32 位指令字的子集, 我们留给定制扩展更多的空间。特别地,基本 RV32I ISA 在 32 位指令字中,使 用了少于 1/8 的编码空间。如同在第 10 章所述,一个不需要支持标准压缩指


网友评论