diff options
| author | jiang <30155751@qq.com> | 2014-05-03 23:51:09 +0800 |
|---|---|---|
| committer | jiang <30155751@qq.com> | 2014-05-03 23:51:09 +0800 |
| commit | 089dea355a28da44376ce4f5195baa4b4e0b217d (patch) | |
| tree | 6b06240e0d4f7271d3e165cbf962750e689e566c /i386-gen.c | |
| parent | a0d45c1bcd87d2388817076ac9b62343d8ae04c3 (diff) | |
| download | tinycc-089dea355a28da44376ce4f5195baa4b4e0b217d.tar.gz tinycc-089dea355a28da44376ce4f5195baa4b4e0b217d.tar.bz2 | |
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.
Diffstat (limited to 'i386-gen.c')
| -rw-r--r-- | i386-gen.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -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 */ |
