aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2018-05-20 12:28:10 +0200
committerMike Pall <mike>2018-05-20 12:28:10 +0200
commit362f034c1b91d52ea2cf971314ed4e0c24348bff (patch)
tree10145c2aed6b7ebdc89b32c2fae6015ab61b7f35
parent260b9b4834c891c408e558d7017839d4a247346f (diff)
parentf5d424afe8b9395f0df05aba905e0e1f6a2262b8 (diff)
downloadluajit-362f034c1b91d52ea2cf971314ed4e0c24348bff.tar.gz
luajit-362f034c1b91d52ea2cf971314ed4e0c24348bff.tar.bz2
luajit-362f034c1b91d52ea2cf971314ed4e0c24348bff.zip
Merge branch 'master' into v2.1
-rw-r--r--src/lj_obj.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/lj_obj.h b/src/lj_obj.h
index c7e47422..72b7ace8 100644
--- a/src/lj_obj.h
+++ b/src/lj_obj.h
@@ -942,14 +942,22 @@ static LJ_AINLINE int32_t lj_num2bit(lua_Number n)
942 942
943#define lj_num2int(n) ((int32_t)(n)) 943#define lj_num2int(n) ((int32_t)(n))
944 944
945/*
946** This must match the JIT backend behavior. In particular for archs
947** that don't have a common hardware instruction for this conversion.
948** Note that signed FP to unsigned int conversions have an undefined
949** result and should never be relied upon in portable FFI code.
950** See also: C99 or C11 standard, 6.3.1.4, footnote of (1).
951*/
945static LJ_AINLINE uint64_t lj_num2u64(lua_Number n) 952static LJ_AINLINE uint64_t lj_num2u64(lua_Number n)
946{ 953{
947#ifdef _MSC_VER 954#if LJ_TARGET_X86ORX64 || LJ_TARGET_MIPS
948 if (n >= 9223372036854775808.0) /* They think it's a feature. */ 955 int64_t i = (int64_t)n;
949 return (uint64_t)(int64_t)(n - 18446744073709551616.0); 956 if (i < 0) i = (int64_t)(n - 18446744073709551616.0);
950 else 957 return (uint64_t)i;
958#else
959 return (uint64_t)n;
951#endif 960#endif
952 return (uint64_t)n;
953} 961}
954 962
955static LJ_AINLINE int32_t numberVint(cTValue *o) 963static LJ_AINLINE int32_t numberVint(cTValue *o)