diff options
| author | Michael Matz <matz@suse.de> | 2012-06-10 09:01:13 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2012-06-10 09:01:26 +0200 |
| commit | a42b029101a758127de570b113767977fbce7b2a (patch) | |
| tree | c42dba40767b40fcdb98e0361d46931f6c59c135 /x86_64-gen.c | |
| parent | 9a81dcab0ab1c992efa4a6d74eeb86812758de20 (diff) | |
| download | tinycc-a42b029101a758127de570b113767977fbce7b2a.tar.gz tinycc-a42b029101a758127de570b113767977fbce7b2a.tar.bz2 | |
x86-64: Fix call saved register restore
Loads of VT_LLOCAL values (which effectively represent saved
addresses of lvalues) were done in VT_INT type, loosing the upper
32 bits. Needs to be done in VT_PTR type.
Diffstat (limited to 'x86_64-gen.c')
| -rw-r--r-- | x86_64-gen.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/x86_64-gen.c b/x86_64-gen.c index 6dfe1e4..1fa8dd5 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -1460,7 +1460,7 @@ void gen_opf(int op) if ((r & VT_VALMASK) == VT_LLOCAL) { SValue v1; r = get_reg(RC_INT); - v1.type.t = VT_INT; + v1.type.t = VT_PTR; v1.r = VT_LOCAL | VT_LVAL; v1.c.ul = fc; load(r, &v1); @@ -1531,7 +1531,7 @@ void gen_opf(int op) if ((r & VT_VALMASK) == VT_LLOCAL) { SValue v1; r = get_reg(RC_INT); - v1.type.t = VT_INT; + v1.type.t = VT_PTR; v1.r = VT_LOCAL | VT_LVAL; v1.c.ul = fc; load(r, &v1); |
