riscv gcc编译器的构建 当前公认的riscv gcc主线在 https://github.com/riscv-collab/riscv-gnu-toolchain 该master分支是稳定的可以使用的riscv 版本。但是现在做riscv扩展指令集分析,这里选择 https://github.com/riscv-collab/riscv-gnu-toolchain/tree/basic-rvv 该分支实现了也就是riscv b扩展,v扩展的最...
重新编译riscv-gcc工具链。然后进行测试: 使用如下命令: riscv-nuclei-elf-gcc -march=rv64gcp -mabi=lp64 -E -dM a.h | grep riscv 得到: #define __riscv 1 #define __riscv_atomic 1 #define __riscv_cmodel_medlow 1 #define __...
同上理,此处的前缀riscv64(还有riscv32的版本)与运行在64位或者32位电脑上毫无关系,此处的64和32是指如果没有通过-march和-mabi选项指定RISC-V架构的位宽,默认将会按照64位还是32位的RISC-V架构来编译程序。有关-march和-mabi选项的含义,请参见第3节。 以“riscv-none-embed-”为前缀的版本,则表示是最新为...
(–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],可以根据自己的需要选择,–...
march=rv32imac -mabi=ilp32 -o- -S -O3//所生成的汇编代码如下,从中可以看出,浮点数乘法操作由C库函数(__muldf3)进行支持,这是因为:- -march选项指明了目标平台支持的模块化指令子集为I/M/A/C,其中未包含了F和D指令子集,即不支持单精度和双精度浮点指令,因此无法直接使用RISC-V的浮点指令来支持浮点...
图1 riscv-none-embed工具链下载链接 3 RISC-V GCC工具链的(–march=)和(–mabi=)选项 3.1 (–march=)选项 由于RISC-V的指令集是模块化的指令集,因此在为目标RISC-V平台进行交叉编译之时,需要通过选项指定目标RISC-V平台所支持的模块化指令集组合,该选项为(-march=),有效的选项值如下: ...
1、riscv32-unknown-elf-gcc 该工具,针对于riscv32架构的编译器,使用的C运行库为newlib。 执行以下命令: ../configure --prefix=/opt/riscv32 --with-arch=rv32imc --with-abi=xxx make --mabi可以选择如下: ilp32 ilp32f ilp32d 编译完成后,在/opt/riscv/bin目录下,有riscv32-unknown-elf-gcc的...
例如上面的命令,只编译march为rv32gc,abi为ilp32d的gcc模型。省略掉很多库的编译,让编译的时间缩短了不少。 5.小结为自己的处理器添加特定的CSR支持,一种情况下可以使用CSR的地址进行,另外一种就是修改汇编器,前一种方法比较直观,适合使用riscv通用编译器的开发方式进行开发,但是不够直观。后一种则需要修改汇编...
#define __riscv_fsqrt 1 #define __riscv_div 1 从内置宏参数,可以看出编译器,支持RV32IMAFDC指令集架构。 二、增加内置宏参数 对于riscv,支持p扩展,该扩展,是针对于dsp应用。 如果我们想,当gcc的-march选项中,有指定p扩展指令集,那么编译器就内置__riscv_dsp宏。如果没有指定p扩展指令集,就不内置该...
最后生成的riscv gcc工具链可以做测试。 结合编译参数,开启O2优化。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 '-march=rv64gcv_zba_zbb_zbc_zbs' ,'-mabi=lp64d' 可以生成带有RVB扩展的格式的代码。 不难看出,当写出下面的函数时 代码语言:javascript 代码运行次数:0 运行 AI代码解释 long ...