hello.c
#include <stdio.h>
extern int plus(int a, int b);
int main(void)
{
printf("hello, %d\n", plus(111, 222));
}
plus.S
.text
.global plus
plus:
add a0,a1,a0
ret
编译:
riscv64-linux-gnu-gcc -o hello hello.c plus.S -g
运行:
$ QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ qemu-riscv64 hello
hello, 333
qemu虚拟机参考:
risc-v gcc 工具链编译 与 qemu 虚拟机 (ubuntu等发行版linux平台搭建RISCV模拟环境)
https://whycan.com/t_1685.html#p64753
离线
上面的命令行默认生成RISC-V压缩指令集(16bit)
如果不想生成压缩指令集(norvc) 可以用这个指令:
riscv64-linux-gnu-gcc -o hello hello.c plus.S -g -march=rv64imafd -mabi=lp64d
mach 参数去掉了c
参考: https://github.com/xboot/xboot/blob/master/src/arch/riscv64/mach-d1/xboot.mk
离线
如果只想 汇编代码想单独控制:
plus.S
.option norvc
.text
.global plus, shift
plus:
add a0,a1,a0
ret
shift:
lui a0,0xa000
ret
在代码最前面加:
.option rvc (强制使用压缩指令)
.option norvc (强制使用非压缩指令)
离线