mirror of
				https://github.com/facebook/zstd.git
				synced 2025-10-31 16:47:48 +02:00 
			
		
		
		
	Use clz ^ 31 instead of 31 - clz; better codegen for GCC
This commit is contained in:
		| @@ -346,7 +346,7 @@ FORCE_INLINE unsigned FSE_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (GCC_VERSION >= 304)   /* GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -353,7 +353,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -356,7 +356,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -627,7 +627,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -756,7 +756,7 @@ MEM_STATIC unsigned BITv05_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -860,7 +860,7 @@ MEM_STATIC unsigned BITv06_highbit32 ( U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
| @@ -530,7 +530,7 @@ MEM_STATIC unsigned BITv07_highbit32 (U32 val) | ||||
|     _BitScanReverse ( &r, val ); | ||||
|     return (unsigned) r; | ||||
| #   elif defined(__GNUC__) && (__GNUC__ >= 3)   /* Use GCC Intrinsic */ | ||||
|     return 31 - __builtin_clz (val); | ||||
|     return __builtin_clz (val) ^ 31; | ||||
| #   else   /* Software version */ | ||||
|     static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; | ||||
|     U32 v = val; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user