GCC编译工具链——RISCV扩展指令集(一)

RISCV-GNU-toolchain是编译工具链,简单来说其能够将我们熟悉的高级程序语言“翻译”成机器语言,这个翻译的过程这里就不再赘述,因为涉及到编译器原理部分的知识,有兴趣的可以看一下《深入分析gcc》,王亚刚的。

由于现在最新的RISCV-GNU-toolchain已经把K指令分支并进了主要分支里面,从代码修改的角度不需要任何修改就能实现加解密指令测试。但这里介绍使用.insn指令模板进行修改的方法,明白如何增加或修改指令。

第一步需要获取Gcc编译链,

Git clone https://gitcode.net/mirrors/riscv/riscv-gnu-toolchain.git

内部有安装步骤,但是为了详细这里就冗余一下

Ubuntu:

sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build

Cenos/feroda:

sudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-devel

安装依赖后,两种方式一种是命令

git submodule update --init –recursive

该命令会把所有的分支拉进来,但是不会生成编译工具链

第二种就是直接

./configure --prefix=/opt/riscv
make

这个官方的安装就是默认newlib的,其他的linux或者embbed这里不一样的就是依赖库的问题,工具链在编译程序语言的时候会调用不同的库进行。生成的编译工具链会放到/opt/riscv路径下。(–march=)和(–mabi=)表示编译选项,由于RISC-V的指令集是模块化的指令集,因此在为目标RISC-V平台进行交叉编译之时,需要通过选项指定目标RISC-V平台所支持的模块化指令集组合。-march=的选项有rv32i[m][a][f[d]][c], rv32g[c], rv64i[m][a][f[d]][c], rv64g[c],可以根据自己的需要选择,–mabi= 有ilp32, ilp32f, ilp32d,lp64, lp64f, lp64d,ilp32就是32位,lp64就是64位。–mcmodel=这个选项有兴趣的可以自己查查相关资料。这里强调一样,不要测试Make 之后会需要一比较长的时间。

编译工具链安装完成后可以进行测试,推荐在bashrc文件下添加export PATH=/opt/riscv/bin:$PATH后,进行测试,这样子可以减少代码量。

riscv64-unknown-elf-gcc -o hello hello.c

这里就是最简单的测试了helloworld程序,表示你的工具链已经安装成功,但是不一定能读出其他指令。

更全面的测试你的指令集是否安装成功。

./configure –prefix=/opt/riscv
make linux
make report-linux SIM=qemu

GCC中,扩展RISC-V指令可以通过添加新的目标处理器选项来实现。以下是一个简单的步骤来扩展RISC-V指令集: 1. 获取RISC-V GCC工具:首先,你需要获取RISC-V GCC工具。你可以从RISC-V官方GitHub存储库获取源代码,然后编译工具。或者,你也可以使用预编译工具,例如Sifive提供的Freedom开发平台。 2. 了解GCC寄存器描述文件:GCC使用一种称为“寄存器描述文件(Register Description File)”的文件来描述目标处理器的寄存器和指令集。你需要了解这个文件的结构和格式。 3. 修改寄存器描述文件:根据你需要扩展指令集,你需要修改寄存器描述文件以添加新的指令。你可以定义新的指令格式、操作码和操作数等。 4. 更新GCC源代码:将修改后的寄存器描述文件与GCC源代码一起使用。你需要将该文件放置在正确的目录中,并更新相关的构建系统脚本。 5. 构建和安装GCC:使用修改后的GCC源代码构建新版本的GCC。按照通常的构建过程进行,并确保在构建期间指定新的目标处理器选项。 6. 测试新指令:构建完成后,你可以使用新版本的GCC编译和运行包含新指令的程序。确保新指令能够正确地被编码和执行。 请注意,这是一个简单的概述,并且具体的步骤可能因你要扩展指令集GCC版本而有所不同。在实际操作中,你可能需要更深入地了解GCC的内部结构和相关文档。此外,还要注意遵循RISC-V的指令集架构规范,并确保新指令的正确性和兼容性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值