在编译器中添加参数'-mcmodel=medlow”,如下所示:
riscv32-unknown-elf-gcc -mcmodel=medlow -mabi=ilp32 -O2 -o test.elf test.c
该参数告诉编译器,使用medlow模型来编译代码,这种模型支持32位地址空间,允许使用压缩指令,可以使得生成的二进制文件更加紧凑。同时,还需要保证代码中使用的指令都是rv32i指令集中支持的指令,否则编译将会失败。
示例代码:
#include
int main(void)
{
int a = 1, b = 3, c = 0;
asm volatile(
"add %0, %1, %2\n\t"
"add %0, %0, %0\n\t"
"nop\n\t"
"add %0, %0, %0\n\t"
"c.mov.n %s3, %0\n\t"
: "=r"(c)
: "r"(a), "r"(b)
: "s3"
);
return c;
}