riscv实现自定义指令并用qemu运行 您所在的位置:网站首页 qemu仿真riscv指令集 riscv实现自定义指令并用qemu运行

riscv实现自定义指令并用qemu运行

2023-11-13 05:53| 来源: 网络整理| 查看: 265

目的:

实现cube指令,传入一个数,比如2,那么该指令返回的结果是8,如果是3,则返回3^3=27。

riscv指令的类型:

对于riscv,其指令按照特定的类型分为一下几种。

目前的实现只基于R-type。

其扩展指令集的格式如下

.insn r opcode, func3, func7, rd, rs1, rs2

按照其语法规则opcode表示操作码,目前是7位,对于非压缩指令来说,最后两位是0。所以自己可以定义一个操作码,当然有一下操作码已经使用了,具体可以查看下面的仓库。

https://github.com/riscv/riscv-opcodes

也可以在riscv官网上

https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf

的第Chapter 24 RV32/64G Instryction Set Listings查看目前riscv定义的指令码。

比如关于算数的指令集定义如下:

自己设计一条指令要在这些标准指令之外的,比如操作码为0x7b。

内联汇编格式如下:

asm volatile(".insn r 0x7b, 6, 6, %0, %1, x0" : "=r"(cube) : "r"(addr));

于是,按照语法解析如下:

 *      func7      rs2      rs1    func3           rd        opcode * 31---------25--------19------15------12----------------6----------0 * | 000110    | 00000  | *****  |  110  |    *****       |  1111011 | * |------------------------------------------------------|----------|

上图中,*表示的是任意值,所以该指令在翻译的时候,实际上就是取出rs1表示的是寄存器地址,然后返回的是rd,也是寄存器地址。最后,从寄存器中存放的地址取数据则得到相应的值。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有