From 5390a729d96f9469168b74c3ecf52b99a7055c3d Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Mon, 15 Jul 2019 21:42:29 +0200 Subject: [PATCH] riscv: Implement VLA stuff makes 78_vla_label and 79_vla_continue work. --- riscv64-gen.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/riscv64-gen.c b/riscv64-gen.c index 9115044e..2eab4e41 100644 --- a/riscv64-gen.c +++ b/riscv64-gen.c @@ -824,16 +824,20 @@ ST_FUNC void ggoto(void) ST_FUNC void gen_vla_sp_save(int addr) { - tcc_error("implement me: %s", __FUNCTION__); + ES(0x23, 3, 8, 2, addr); // sd sp, fc(s0) } ST_FUNC void gen_vla_sp_restore(int addr) { - tcc_error("implement me: %s", __FUNCTION__); + EI(0x03, 3, 2, 8, addr); // ld sp, fc(s0) } ST_FUNC void gen_vla_alloc(CType *type, int align) { - tcc_error("implement me: %s", __FUNCTION__); + int rr = ireg(gv(RC_INT)); + EI(0x13, 0, rr, rr, 15); // addi RR, RR, 15 + EI(0x13, 7, rr, rr, -16); // andi, RR, RR, -16 + o(0x33 | (2 << 7) | (2 << 15) | (rr << 20) | (0x20 << 25)); //sub sp, sp, rr + vpop(); } #endif