我需要将 C(或更好)转换为 https://venus.cs61c.org/ 将接受的 RISC-V
I need to convert C (or better) into RISC-V that https://venus.cs61c.org/ will accept
我已经尝试了 https://godbolt.org/ 和所有到 RISC-V 的不同转换,但它仍然出错。
例如我的 C 代码:
#include <stdio.h>
int main(){
printf("test");
return 0;
}
转换为:
main: # @main
addi sp, sp, -16
sw ra, 12(sp) # 4-byte Folded Spill
sw s0, 8(sp) # 4-byte Folded Spill
addi s0, sp, 16
mv a0, zero
sw a0, -16(s0) # 4-byte Folded Spill
sw a0, -12(s0)
lui a0, %hi(.L.str)
addi a0, a0, %lo(.L.str)
call printf
lw a0, -16(s0) # 4-byte Folded Reload
lw s0, 8(sp) # 4-byte Folded Reload
lw ra, 12(sp) # 4-byte Folded Reload
addi sp, sp, 16
ret
.L.str:
.asciz "test"
它在“lui”处给出错误,因为它需要 2 个参数但收到了 3 个。我尝试使用 .data 部分和 .text 部分组织代码,但仍然没有工作。
使用 la $a0, .L.str
代替 2 指令 %hi,%lo 组合。
此外,使用 .string
而不是 .asciz
。
我已经尝试了 https://godbolt.org/ 和所有到 RISC-V 的不同转换,但它仍然出错。
例如我的 C 代码:
#include <stdio.h>
int main(){
printf("test");
return 0;
}
转换为:
main: # @main
addi sp, sp, -16
sw ra, 12(sp) # 4-byte Folded Spill
sw s0, 8(sp) # 4-byte Folded Spill
addi s0, sp, 16
mv a0, zero
sw a0, -16(s0) # 4-byte Folded Spill
sw a0, -12(s0)
lui a0, %hi(.L.str)
addi a0, a0, %lo(.L.str)
call printf
lw a0, -16(s0) # 4-byte Folded Reload
lw s0, 8(sp) # 4-byte Folded Reload
lw ra, 12(sp) # 4-byte Folded Reload
addi sp, sp, 16
ret
.L.str:
.asciz "test"
它在“lui”处给出错误,因为它需要 2 个参数但收到了 3 个。我尝试使用 .data 部分和 .text 部分组织代码,但仍然没有工作。
使用 la $a0, .L.str
代替 2 指令 %hi,%lo 组合。
此外,使用 .string
而不是 .asciz
。