diff --git a/arm-gen.c b/arm-gen.c index e766ce43..afbc23b6 100644 --- a/arm-gen.c +++ b/arm-gen.c @@ -1187,7 +1187,7 @@ again: /* Manually free remaining registers since next parameters are loaded * manually, without the help of gv(int). */ - save_regs(nb_args); + save_regs(nb_args+1); if(todo) { o(0xE8BD0000|todo); /* pop {todo} */ diff --git a/arm64-gen.c b/arm64-gen.c index efe42461..3d333155 100644 --- a/arm64-gen.c +++ b/arm64-gen.c @@ -948,7 +948,7 @@ ST_FUNC void gfunc_call(int nb_args) vswap(); } - save_regs(0); + save_regs(1); arm64_gen_bl_or_b(0); --vtop; if (stack) diff --git a/i386-gen.c b/i386-gen.c index b6629d40..646f261e 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -475,7 +475,7 @@ ST_FUNC void gfunc_call(int nb_args) } vtop--; } - save_regs(0); /* save used temporary registers */ + save_regs(1); /* save used temporary registers */ func_sym = vtop->type.ref; func_call = func_sym->f.func_call; /* fast call case */ diff --git a/x86_64-gen.c b/x86_64-gen.c index 045dd2c5..50252d35 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -903,7 +903,6 @@ void gfunc_call(int nb_args) vtop--; } save_regs(0); - /* Copy R10 and R11 into RCX and RDX, respectively */ if (nb_args > 0) { o(0xd1894c); /* mov %r10, %rcx */