host-utils: Simplify pow2ceil()
Cc: Radim Krčmář <rkrcmar@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1501148776-16890-4-git-send-email-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
		
							parent
							
								
									43c64a093d
								
							
						
					
					
						commit
						362aaf1457
					
				| @ -381,18 +381,23 @@ static inline uint64_t pow2floor(uint64_t value) | ||||
|     return 0x8000000000000000ull >> clz64(value); | ||||
| } | ||||
| 
 | ||||
| /* round up to the nearest power of 2 (0 if overflow) */ | ||||
| /*
 | ||||
|  * Return @value rounded up to the nearest power of two modulo 2^64. | ||||
|  * This is *zero* for @value > 2^63, so be careful. | ||||
|  */ | ||||
| static inline uint64_t pow2ceil(uint64_t value) | ||||
| { | ||||
|     uint8_t nlz = clz64(value); | ||||
|     int n = clz64(value - 1); | ||||
| 
 | ||||
|     if (is_power_of_2(value)) { | ||||
|         return value; | ||||
|     if (!n) { | ||||
|         /*
 | ||||
|          * @value - 1 has no leading zeroes, thus @value - 1 >= 2^63 | ||||
|          * Therefore, either @value == 0 or @value > 2^63. | ||||
|          * If it's 0, return 1, else return 0. | ||||
|          */ | ||||
|         return !value; | ||||
|     } | ||||
|     if (!nlz) { | ||||
|         return 0; | ||||
|     } | ||||
|     return 1ULL << (64 - nlz); | ||||
|     return 0x8000000000000000ull >> (n - 1); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Markus Armbruster
						Markus Armbruster