aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhang Boyang <zhangboyang.id@gmail.com>2017-08-21 19:38:11 +0800
committerZhang Boyang <zhangboyang.id@gmail.com>2017-08-21 19:38:11 +0800
commitb8fe8fc2105455eb5004be89fa8575aa928a18f3 (patch)
tree558e4ca701a5b0dea33ae3018d09f07a46965796
parentac41e015f105382acccd0c9320407be42342ac6f (diff)
downloadtinycc-b8fe8fc2105455eb5004be89fa8575aa928a18f3.tar.gz
tinycc-b8fe8fc2105455eb5004be89fa8575aa928a18f3.tar.bz2
called function should pop the arguments when using fastcall
-rw-r--r--i386-gen.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/i386-gen.c b/i386-gen.c
index 3646084..f1d95cd 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -504,7 +504,7 @@ ST_FUNC void gfunc_call(int nb_args)
#endif
gcall_or_jmp(0);
- if (args_size && func_call != FUNC_STDCALL)
+ if (args_size && func_call != FUNC_STDCALL && func_call != FUNC_FASTCALLW)
gadd_sp(args_size);
vtop--;
}
@@ -586,8 +586,8 @@ ST_FUNC void gfunc_prolog(CType *func_type)
param_index++;
}
func_ret_sub = 0;
- /* pascal type call ? */
- if (func_call == FUNC_STDCALL)
+ /* pascal type call or fastcall ? */
+ if (func_call == FUNC_STDCALL || func_call == FUNC_FASTCALLW)
func_ret_sub = addr - 8;
#ifndef TCC_TARGET_PE
else if (func_vc)