aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2023-11-05 11:27:35 +0100
committerMike Pall <mike>2023-11-05 11:27:35 +0100
commitf2e955dae8411ccdce693806f15b1f221a49015c (patch)
treeb42d86af9e5e8226bde2a44da354a2cb2d6ab32b /src
parente826d0c101d750fac8334d71e221c50d8dbe236c (diff)
downloadluajit-f2e955dae8411ccdce693806f15b1f221a49015c.tar.gz
luajit-f2e955dae8411ccdce693806f15b1f221a49015c.tar.bz2
luajit-f2e955dae8411ccdce693806f15b1f221a49015c.zip
Windows/x86: _BitScan*64 are only available on 64 bit archs.
Reported by memcorrupt. #1109
Diffstat (limited to 'src')
-rw-r--r--src/lj_def.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/lj_def.h b/src/lj_def.h
index 0d6c346b..2a1d7b56 100644
--- a/src/lj_def.h
+++ b/src/lj_def.h
@@ -259,12 +259,8 @@ static LJ_AINLINE uint32_t lj_fls(uint32_t x)
259#else 259#else
260unsigned char _BitScanForward(unsigned long *, unsigned long); 260unsigned char _BitScanForward(unsigned long *, unsigned long);
261unsigned char _BitScanReverse(unsigned long *, unsigned long); 261unsigned char _BitScanReverse(unsigned long *, unsigned long);
262unsigned char _BitScanForward64(unsigned long *, uint64_t);
263unsigned char _BitScanReverse64(unsigned long *, uint64_t);
264#pragma intrinsic(_BitScanForward) 262#pragma intrinsic(_BitScanForward)
265#pragma intrinsic(_BitScanReverse) 263#pragma intrinsic(_BitScanReverse)
266#pragma intrinsic(_BitScanForward64)
267#pragma intrinsic(_BitScanReverse64)
268 264
269static LJ_AINLINE uint32_t lj_ffs(uint32_t x) 265static LJ_AINLINE uint32_t lj_ffs(uint32_t x)
270{ 266{
@@ -276,6 +272,12 @@ static LJ_AINLINE uint32_t lj_fls(uint32_t x)
276 unsigned long r; _BitScanReverse(&r, x); return (uint32_t)r; 272 unsigned long r; _BitScanReverse(&r, x); return (uint32_t)r;
277} 273}
278 274
275#if defined(_M_X64) || defined(_M_ARM64)
276unsigned char _BitScanForward64(unsigned long *, uint64_t);
277unsigned char _BitScanReverse64(unsigned long *, uint64_t);
278#pragma intrinsic(_BitScanForward64)
279#pragma intrinsic(_BitScanReverse64)
280
279static LJ_AINLINE uint32_t lj_ffs64(uint64_t x) 281static LJ_AINLINE uint32_t lj_ffs64(uint64_t x)
280{ 282{
281 unsigned long r; _BitScanForward64(&r, x); return (uint32_t)r; 283 unsigned long r; _BitScanForward64(&r, x); return (uint32_t)r;
@@ -286,6 +288,7 @@ static LJ_AINLINE uint32_t lj_fls64(uint64_t x)
286 unsigned long r; _BitScanReverse64(&r, x); return (uint32_t)r; 288 unsigned long r; _BitScanReverse64(&r, x); return (uint32_t)r;
287} 289}
288#endif 290#endif
291#endif
289 292
290unsigned long _byteswap_ulong(unsigned long); 293unsigned long _byteswap_ulong(unsigned long);
291uint64_t _byteswap_uint64(uint64_t); 294uint64_t _byteswap_uint64(uint64_t);