2025-04-01 00:13:21 +08:00
..
2025-04-01 00:13:21 +08:00
2025-04-01 00:13:21 +08:00
2025-04-01 00:13:21 +08:00

后端代码生成

riscv32i

仿照ripes的syscall实现了rv32-vm

syscall ecall 系统调用

// ecall 系统调用函数实现
#define ECALL_PNT_INT(num) \
    ADDI(REG_A0, REG_X0, num), \
    ADDI(REG_A7, REG_X0, 0x1), \
    ECALL(),

#define ECALL_PNT_STR(str) \
    ADDI(REG_A0, REG_X0, str), \
    ADDI(REG_A7, REG_X0, 0x4), \
    ECALL(),

#define ECALL_EXIT(errno) \
    ADDI(REG_A0, REG_X0, errno), \
    ADDI(REG_A7, REG_X0, 10), \
    ECALL(),

#define ECALL_SCAN_INT(int) \
    ADDI(REG_A7, (1025 + 4)), \
    ECALL(),

#define ECALL_SCAN_STR(str) \
    ADDI(REG_A0, REG_X0, str), \
    ADDI(REG_A7, REG_X0, (1025 + 5)), \
    ECALL(),

// 函数声明
void ecall_pnt_int(int num);
void ecall_pnt_str(char *str);
void ecall_exit(int errno);
int ecall_scani();
void ecall_scans(char *str);