From 089dea355a28da44376ce4f5195baa4b4e0b217d Mon Sep 17 00:00:00 2001 From: jiang <30155751@qq.com> Date: Sat, 3 May 2014 23:51:09 +0800 Subject: tcc on i386 are still having problems at work.Thank Roy report again. Struck on several variables can be connected to commit in the register. I am worried whether tcc can run the os. Since my machine is ubuntu 64 bits I can test my machine. --- i386-gen.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'i386-gen.c') diff --git a/i386-gen.c b/i386-gen.c index 018307a..cfa9cc6 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -21,7 +21,7 @@ #ifdef TARGET_DEFS_ONLY /* number of available registers */ -#define NB_REGS 4 +#define NB_REGS 8 #define NB_ASM_REGS 8 /* a register can belong to several classes. The classes must be @@ -41,7 +41,6 @@ #define RC_LRET RC_EDX /* function return: second integer register */ #define RC_FRET RC_ST0 /* function return: float register */ #define RC_MASK (RC_INT|RC_INT2|RC_FLOAT) - /* pretty names for the registers */ enum { TREG_EAX = 0, @@ -104,8 +103,8 @@ ST_DATA const int reg_classes[NB_REGS] = { RC_INT|RC_INT2|RC_EBX, 0, /* st0 */ RC_FLOAT | RC_ST0, - RC_RSI|RC_INT2, - RC_RDI|RC_INT2, + RC_ESI|RC_INT2, + RC_EDI|RC_INT2, }; static unsigned long func_sub_sp_offset; @@ -241,7 +240,7 @@ ST_FUNC void load(int r, SValue *sv) if(fr & VT_TMP){ int size, align; if((ft & VT_BTYPE) == VT_FUNC) - size = 4; + size = PTR_SIZE; else size = type_size(&sv->type, &align); loc_stack(size, 0); @@ -254,6 +253,7 @@ ST_FUNC void load(int r, SValue *sv) if (!(reg_classes[fr] & RC_INT)) fr = get_reg(RC_INT); load(fr, &v1); + fc = 0; } if ((ft & VT_BTYPE) == VT_FLOAT) { o(0xd9); /* flds */ -- cgit v1.3.1