summaryrefslogtreecommitdiffstats
path: root/nsprpub/pr/include/prbit.h
diff options
context:
space:
mode:
Diffstat (limited to 'nsprpub/pr/include/prbit.h')
-rw-r--r--nsprpub/pr/include/prbit.h52
1 files changed, 27 insertions, 25 deletions
diff --git a/nsprpub/pr/include/prbit.h b/nsprpub/pr/include/prbit.h
index 0434fc683..50c65923a 100644
--- a/nsprpub/pr/include/prbit.h
+++ b/nsprpub/pr/include/prbit.h
@@ -14,26 +14,28 @@ PR_BEGIN_EXTERN_C
** functions.
*/
#if defined(_WIN32) && (_MSC_VER >= 1300) && \
- (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM))
+ (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM) || \
+ defined(_M_ARM64))
# include <intrin.h>
# pragma intrinsic(_BitScanForward,_BitScanReverse)
- __forceinline static int __prBitScanForward32(unsigned int val)
- {
+__forceinline static int __prBitScanForward32(unsigned int val)
+{
unsigned long idx;
_BitScanForward(&idx, (unsigned long)val);
return( (int)idx );
- }
- __forceinline static int __prBitScanReverse32(unsigned int val)
- {
+}
+__forceinline static int __prBitScanReverse32(unsigned int val)
+{
unsigned long idx;
_BitScanReverse(&idx, (unsigned long)val);
return( (int)(31-idx) );
- }
+}
# define pr_bitscan_ctz32(val) __prBitScanForward32(val)
# define pr_bitscan_clz32(val) __prBitScanReverse32(val)
# define PR_HAVE_BUILTIN_BITSCAN32
#elif ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && \
- (defined(__i386__) || defined(__x86_64__) || defined(__arm__))
+ (defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
+ defined(__aarch64__))
# define pr_bitscan_ctz32(val) __builtin_ctz(val)
# define pr_bitscan_clz32(val) __builtin_clz(val)
# define PR_HAVE_BUILTIN_BITSCAN32
@@ -54,18 +56,18 @@ typedef unsigned long prbitmap_t;
/*
** Compute the log of the least power of 2 greater than or equal to n
*/
-NSPR_API(PRIntn) PR_CeilingLog2(PRUint32 i);
+NSPR_API(PRIntn) PR_CeilingLog2(PRUint32 i);
/*
** Compute the log of the greatest power of 2 less than or equal to n
*/
-NSPR_API(PRIntn) PR_FloorLog2(PRUint32 i);
+NSPR_API(PRIntn) PR_FloorLog2(PRUint32 i);
/*
** Macro version of PR_CeilingLog2: Compute the log of the least power of
** 2 greater than or equal to _n. The result is returned in _log2.
*/
-#ifdef PR_HAVE_BUILTIN_BITSCAN32
+#ifdef PR_HAVE_BUILTIN_BITSCAN32
#define PR_CEILING_LOG2(_log2,_n) \
PR_BEGIN_MACRO \
PRUint32 j_ = (PRUint32)(_n); \
@@ -74,20 +76,20 @@ NSPR_API(PRIntn) PR_FloorLog2(PRUint32 i);
#else
#define PR_CEILING_LOG2(_log2,_n) \
PR_BEGIN_MACRO \
- PRUint32 j_ = (PRUint32)(_n); \
+ PRUint32 j_ = (PRUint32)(_n); \
(_log2) = 0; \
if ((j_) & ((j_)-1)) \
- (_log2) += 1; \
+ (_log2) += 1; \
if ((j_) >> 16) \
- (_log2) += 16, (j_) >>= 16; \
+ (_log2) += 16, (j_) >>= 16; \
if ((j_) >> 8) \
- (_log2) += 8, (j_) >>= 8; \
+ (_log2) += 8, (j_) >>= 8; \
if ((j_) >> 4) \
- (_log2) += 4, (j_) >>= 4; \
+ (_log2) += 4, (j_) >>= 4; \
if ((j_) >> 2) \
- (_log2) += 2, (j_) >>= 2; \
+ (_log2) += 2, (j_) >>= 2; \
if ((j_) >> 1) \
- (_log2) += 1; \
+ (_log2) += 1; \
PR_END_MACRO
#endif /* PR_HAVE_BUILTIN_BITSCAN32 */
@@ -106,18 +108,18 @@ NSPR_API(PRIntn) PR_FloorLog2(PRUint32 i);
#else
#define PR_FLOOR_LOG2(_log2,_n) \
PR_BEGIN_MACRO \
- PRUint32 j_ = (PRUint32)(_n); \
+ PRUint32 j_ = (PRUint32)(_n); \
(_log2) = 0; \
if ((j_) >> 16) \
- (_log2) += 16, (j_) >>= 16; \
+ (_log2) += 16, (j_) >>= 16; \
if ((j_) >> 8) \
- (_log2) += 8, (j_) >>= 8; \
+ (_log2) += 8, (j_) >>= 8; \
if ((j_) >> 4) \
- (_log2) += 4, (j_) >>= 4; \
+ (_log2) += 4, (j_) >>= 4; \
if ((j_) >> 2) \
- (_log2) += 2, (j_) >>= 2; \
+ (_log2) += 2, (j_) >>= 2; \
if ((j_) >> 1) \
- (_log2) += 1; \
+ (_log2) += 1; \
PR_END_MACRO
#endif /* PR_HAVE_BUILTIN_BITSCAN32 */
@@ -136,7 +138,7 @@ NSPR_API(PRIntn) PR_FloorLog2(PRUint32 i);
*/
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || \
- defined(_M_X64) || defined(_M_ARM))
+ defined(_M_X64) || defined(_M_ARM) || defined(_M_ARM64))
#include <stdlib.h>
#pragma intrinsic(_rotl, _rotr)
#define PR_ROTATE_LEFT32(a, bits) _rotl(a, bits)