From cf88c43dd687f2db3c32e4497257798851c286d6 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 20 Feb 2011 00:18:46 +0100 Subject: [PATCH] FFI: Fix 64 bit to 32 bit truncations on x64. --- src/lj_crecord.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/lj_crecord.c b/src/lj_crecord.c index a24c541e..63890001 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c @@ -179,18 +179,12 @@ static TRef crec_ct_ct(jit_State *J, CType *d, CType *s, TRef dp, TRef sp, case CCX(I, I): conv_I_I: if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; -#if LJ_64 - /* Sign-extend 32 to 64 bit integer. */ - if (dsize == 8 && ssize < 8 && !(sinfo & CTF_UNSIGNED)) - sp = emitconv(sp, dt, IRT_INT, IRCONV_SEXT); - /* All other conversions are no-ops on x64. */ -#else - if (dsize == 8 && ssize < 8) /* Extend to 64 bit integer. */ + /* Extend 32 to 64 bit integer. */ + if (dsize == 8 && ssize < 8 && !(LJ_64 && (sinfo & CTF_UNSIGNED))) sp = emitconv(sp, dt, ssize < 4 ? IRT_INT : st, (sinfo & CTF_UNSIGNED) ? 0 : IRCONV_SEXT); else if (dsize < 8 && ssize == 8) /* Truncate from 64 bit integer. */ sp = emitconv(sp, dsize < 4 ? IRT_INT : dt, st, 0); -#endif xstore: if (dt == IRT_I64 || dt == IRT_U64) lj_needsplit(J); if (dp == 0) return sp;