RISC-V裸函数编译后出现多余nop和mv a0,a5指令的原因咨询
RISC-V裸函数编译后出现多余nop和mv a0,a5指令的原因咨询
我最近在折腾RISC-V的裸函数,写了这么一段代码:
__attribute__ ((naked)) int foo() { asm volatile("li a0, 1"); asm volatile("ret"); }
结果编译后生成的汇编代码里,居然多出来两条我完全没写的指令:
foo: li a0, 1 ret nop mv a0,a5
更奇怪的是,要是我把这个函数的返回类型改成void,这两条多余的指令就凭空消失了!有没有大佬能给我解释下,这两条额外的nop和mv a0,a5到底是怎么冒出来的啊?
备注:内容来源于stack exchange,提问作者Timmmm




