下载地址
https://www.nucleisys.com/download.php
我的电脑是ubuntu20.04 下载Nuclei GNU Tool chain ubuntu x86-64版本
解压缩
tar jxvf nuclei_riscv_newlibc_prebuilt_linux64_2022.08.tar.bz2
然后要设置一下环境变量才能在任何路径下使用该应用/软件
这个下载的工具链压缩包 解压缩后的文件名是 gcc 找到gcc里面的bin文件夹可以看到所有的应用程序都在这个文件夹里,那么这个文件夹地址就是要设置的环境变量地址
可以在终端打开这个bin文件夹使用 pwd命令查看地址
sudo vim /etc/profile
export PATH="/home/liwanwan/gcc/bin:$PATH" //改成自己文件的地址,添加环境变量
:wq //保存并退出
source /etc/profile //使环境变量生效
echo $PATH //查看有没有成功添加环境变量
随便写一个c程序测试一下是否能编译成功
mkdir test
cd test
vim mul.c //建立一个名为mul.c的c文件
这是一个名为dmul的函数,它有两个参数,均为double类型
#include<stdio.h>
double dmul(double a, double b)
{
return b*a;
}
使用-march=rv64imafdc和-mabi=lp64d的组合进行编译
riscv-nuclei-elf-gcc mul.c -march=rv64imafdc -mabi=lp64d -o- -S -O3
生成的汇编代码如下:
dmul:
fmul.d fa0,fa1,fa0
ret
从中可以看出,对于浮点数的乘法操作,直接使用RISC-V的fuml.d指令进行支持,且函数两个double类型的参数直接使用浮点数通用寄存器(fa0和fa1)进行传递,这是因为:
-march选项指明了目标平台支持的模块化指令子集为imafdc,其中包含了F和D指令子集,即支持单精度浮点数指令和双精度浮点数指令,因此可以使用RISCV的浮点数指令来支持对浮点数的操作;
-mapi选项后缀“d”,表示当浮点数作为函数的参数进行传递时,无论是单精度浮点数还是双精度浮点数,均可直接通过寄存器进行传递
-march和-mabi的选项值要根据目标平台的需求来定