aboutsummaryrefslogtreecommitdiff
path: root/i386-gen.c
diff options
context:
space:
mode:
authorjiang <30155751@qq.com>2014-05-03 23:51:09 +0800
committerjiang <30155751@qq.com>2014-05-03 23:51:09 +0800
commit089dea355a28da44376ce4f5195baa4b4e0b217d (patch)
tree6b06240e0d4f7271d3e165cbf962750e689e566c /i386-gen.c
parenta0d45c1bcd87d2388817076ac9b62343d8ae04c3 (diff)
downloadtinycc-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.c10
1 files changed, 5 insertions, 5 deletions
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 */