aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i386-gen.c15
-rw-r--r--tccgen.c2
2 files changed, 11 insertions, 6 deletions
diff --git a/i386-gen.c b/i386-gen.c
index 3a26f7a..946e42d 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -79,7 +79,7 @@ enum {
#include "tcc.h"
/* define to 1/0 to [not] have EBX as 4th register */
-#define USE_EBX 1
+#define USE_EBX 0
ST_DATA const int reg_classes[NB_REGS] = {
/* eax */ RC_INT | RC_EAX,
@@ -636,7 +636,15 @@ ST_FUNC void gfunc_epilog(void)
o(0x585a); /* restore returned value, if any */
}
#endif
- o(0x5b * USE_EBX); /* pop ebx */
+
+ /* align local size to word & save local variables */
+ v = (-loc + 3) & -4;
+
+#if USE_EBX
+ o(0x8b);
+ gen_modrm(TREG_EBX, VT_LOCAL, NULL, -(v+4));
+#endif
+
o(0xc9); /* leave */
if (func_ret_sub == 0) {
o(0xc3); /* ret */
@@ -645,9 +653,6 @@ ST_FUNC void gfunc_epilog(void)
g(func_ret_sub);
g(func_ret_sub >> 8);
}
- /* align local size to word & save local variables */
-
- v = (-loc + 3) & -4;
saved_ind = ind;
ind = func_sub_sp_offset - FUNC_PROLOG_SIZE;
#ifdef TCC_TARGET_PE
diff --git a/tccgen.c b/tccgen.c
index dddeea1..8281d1e 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5164,8 +5164,8 @@ static void expr_cond(void)
#endif
} else
rc = RC_INT;
- save_regs(1);
gv(rc);
+ save_regs(1);
if (g)
gv_dup();
tt = gvtst(1, 0);