mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-11-04 02:11:25 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * bitops.h: Bit string operations on the m68k
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _M68K_BITOPS_H
 | 
						|
#define _M68K_BITOPS_H
 | 
						|
 | 
						|
#include <linux/config.h>
 | 
						|
#include <asm/byteorder.h>
 | 
						|
 | 
						|
extern void set_bit(int nr, volatile void *addr);
 | 
						|
extern void clear_bit(int nr, volatile void *addr);
 | 
						|
extern void change_bit(int nr, volatile void *addr);
 | 
						|
extern int test_and_set_bit(int nr, volatile void *addr);
 | 
						|
extern int test_and_clear_bit(int nr, volatile void *addr);
 | 
						|
extern int test_and_change_bit(int nr, volatile void *addr);
 | 
						|
 | 
						|
#ifdef __KERNEL__
 | 
						|
 | 
						|
/*
 | 
						|
 * ffs: find first bit set. This is defined the same way as
 | 
						|
 * the libc and compiler builtin ffs routines, therefore
 | 
						|
 * differs in spirit from the above ffz (man ffs).
 | 
						|
 */
 | 
						|
extern __inline__ int ffs(int x)
 | 
						|
{
 | 
						|
	int r = 1;
 | 
						|
 | 
						|
	if (!x)
 | 
						|
		return 0;
 | 
						|
	if (!(x & 0xffff)) {
 | 
						|
		x >>= 16;
 | 
						|
		r += 16;
 | 
						|
	}
 | 
						|
	if (!(x & 0xff)) {
 | 
						|
		x >>= 8;
 | 
						|
		r += 8;
 | 
						|
	}
 | 
						|
	if (!(x & 0xf)) {
 | 
						|
		x >>= 4;
 | 
						|
		r += 4;
 | 
						|
	}
 | 
						|
	if (!(x & 3)) {
 | 
						|
		x >>= 2;
 | 
						|
		r += 2;
 | 
						|
	}
 | 
						|
	if (!(x & 1)) {
 | 
						|
		x >>= 1;
 | 
						|
		r += 1;
 | 
						|
	}
 | 
						|
	return r;
 | 
						|
}
 | 
						|
#define __ffs(x) (ffs(x) - 1)
 | 
						|
 | 
						|
#endif /* __KERNEL__ */
 | 
						|
 | 
						|
#endif /* _M68K_BITOPS_H */
 |