diff options
author | Mike Pall <mike> | 2023-11-05 11:27:35 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2023-11-05 11:27:35 +0100 |
commit | f2e955dae8411ccdce693806f15b1f221a49015c (patch) | |
tree | b42d86af9e5e8226bde2a44da354a2cb2d6ab32b /src | |
parent | e826d0c101d750fac8334d71e221c50d8dbe236c (diff) | |
download | luajit-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.h | 11 |
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 |
260 | unsigned char _BitScanForward(unsigned long *, unsigned long); | 260 | unsigned char _BitScanForward(unsigned long *, unsigned long); |
261 | unsigned char _BitScanReverse(unsigned long *, unsigned long); | 261 | unsigned char _BitScanReverse(unsigned long *, unsigned long); |
262 | unsigned char _BitScanForward64(unsigned long *, uint64_t); | ||
263 | unsigned 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 | ||
269 | static LJ_AINLINE uint32_t lj_ffs(uint32_t x) | 265 | static 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) | ||
276 | unsigned char _BitScanForward64(unsigned long *, uint64_t); | ||
277 | unsigned char _BitScanReverse64(unsigned long *, uint64_t); | ||
278 | #pragma intrinsic(_BitScanForward64) | ||
279 | #pragma intrinsic(_BitScanReverse64) | ||
280 | |||
279 | static LJ_AINLINE uint32_t lj_ffs64(uint64_t x) | 281 | static 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 | ||
290 | unsigned long _byteswap_ulong(unsigned long); | 293 | unsigned long _byteswap_ulong(unsigned long); |
291 | uint64_t _byteswap_uint64(uint64_t); | 294 | uint64_t _byteswap_uint64(uint64_t); |