25 lines
		
	
	
		
			665 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			665 B
		
	
	
	
		
			C
		
	
	
	
| #include <isl_config.h>
 | |
| 
 | |
| #if !HAVE_DECL_FFS && !HAVE_DECL___BUILTIN_FFS && HAVE_DECL__BITSCANFORWARD
 | |
| #include <intrin.h>
 | |
| 
 | |
| /* Implementation of ffs in terms of _BitScanForward.
 | |
|  *
 | |
|  * ffs returns the position of the least significant bit set in i,
 | |
|  * with the least significant bit is position 1, or 0 if not bits are set.
 | |
|  *
 | |
|  * _BitScanForward returns 1 if mask is non-zero and sets index
 | |
|  * to the position of the least significant bit set in i,
 | |
|  * with the least significant bit is position 0.
 | |
|  */
 | |
| int isl_ffs(int i)
 | |
| {
 | |
| 	unsigned char non_zero;
 | |
| 	unsigned long index, mask = i;
 | |
| 
 | |
| 	non_zero = _BitScanForward(&index, mask);
 | |
| 
 | |
| 	return non_zero ? 1 + index : 0;
 | |
| }
 | |
| #endif
 |