aboutsummaryrefslogtreecommitdiff
path: root/x86_64-gen.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2012-06-10 09:01:13 +0200
committerMichael Matz <matz@suse.de>2012-06-10 09:01:26 +0200
commita42b029101a758127de570b113767977fbce7b2a (patch)
treec42dba40767b40fcdb98e0361d46931f6c59c135 /x86_64-gen.c
parent9a81dcab0ab1c992efa4a6d74eeb86812758de20 (diff)
downloadtinycc-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.c4
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);