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); |
