diff options
author | stas <stas@FreeBSD.org> | 2009-06-03 17:30:10 +0000 |
---|---|---|
committer | stas <stas@FreeBSD.org> | 2009-06-03 17:30:10 +0000 |
commit | 673e1d1fc9eb778be5e4ca28de814387aca23ab8 (patch) | |
tree | 90e470d04211eeb445b851579d5566e81f771a0b /sys/gnu | |
parent | 674365d9a76ee054bba442785ce4f2bb8641df67 (diff) | |
download | FreeBSD-src-673e1d1fc9eb778be5e4ca28de814387aca23ab8.zip FreeBSD-src-673e1d1fc9eb778be5e4ca28de814387aca23ab8.tar.gz |
- Remove unused sparc64-bitops.h file. Our ext2fs code doesn't use
sparc64-specific bitops implemetations and relies on generic ones.
Furthermore, bitops implementations present in sparc64-bitops.h
are written in C similarly to generic bitops.
Diffstat (limited to 'sys/gnu')
-rw-r--r-- | sys/gnu/fs/ext2fs/sparc64-bitops.h | 264 |
1 files changed, 0 insertions, 264 deletions
diff --git a/sys/gnu/fs/ext2fs/sparc64-bitops.h b/sys/gnu/fs/ext2fs/sparc64-bitops.h deleted file mode 100644 index 26cb578..0000000 --- a/sys/gnu/fs/ext2fs/sparc64-bitops.h +++ /dev/null @@ -1,264 +0,0 @@ -/*- - * $Id: bitops.h,v 1.31 2000/09/23 02:09:21 davem Exp $ - * bitops.h: Bit string operations on the V9. - * - * Copyright 1996, 1997 David S. Miller (davem@caip.rutgers.edu) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* $FreeBSD$ */ -#ifndef _SPARC64_BITOPS_H -#define _SPARC64_BITOPS_H - -#include <asm/byteorder.h> - -extern long __test_and_set_bit(unsigned long nr, volatile void *addr); -extern long __test_and_clear_bit(unsigned long nr, volatile void *addr); -extern long __test_and_change_bit(unsigned long nr, volatile void *addr); - -#define test_and_set_bit(nr,addr) (__test_and_set_bit(nr,addr)!=0) -#define test_and_clear_bit(nr,addr) (__test_and_clear_bit(nr,addr)!=0) -#define test_and_change_bit(nr,addr) (__test_and_change_bit(nr,addr)!=0) -#define set_bit(nr,addr) ((void)__test_and_set_bit(nr,addr)) -#define clear_bit(nr,addr) ((void)__test_and_clear_bit(nr,addr)) -#define change_bit(nr,addr) ((void)__test_and_change_bit(nr,addr)) - -#define smp_mb__before_clear_bit() do { } while(0) -#define smp_mb__after_clear_bit() do { } while(0) - -extern __inline__ int test_bit(int nr, __const__ void *addr) -{ - return (1UL & (((__const__ long *) addr)[nr >> 6] >> (nr & 63))) != 0UL; -} - -/* The easy/cheese version for now. */ -extern __inline__ unsigned long ffz(unsigned long word) -{ - unsigned long result; - -#ifdef ULTRA_HAS_POPULATION_COUNT /* Thanks for nothing Sun... */ - __asm__ __volatile__(" - brz,pn %0, 1f - neg %0, %%g1 - xnor %0, %%g1, %%g2 - popc %%g2, %0 -1: " : "=&r" (result) - : "0" (word) - : "g1", "g2"); -#else -#if 1 /* def EASY_CHEESE_VERSION */ - result = 0; - while(word & 1) { - result++; - word >>= 1; - } -#else - unsigned long tmp; - - result = 0; - tmp = ~word & -~word; - if (!(unsigned)tmp) { - tmp >>= 32; - result = 32; - } - if (!(unsigned short)tmp) { - tmp >>= 16; - result += 16; - } - if (!(unsigned char)tmp) { - tmp >>= 8; - result += 8; - } - if (tmp & 0xf0) result += 4; - if (tmp & 0xcc) result += 2; - if (tmp & 0xaa) result ++; -#endif -#endif - return result; -} - -#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). - */ - -#define ffs(x) generic_ffs(x) - -/* - * hweightN: returns the hamming weight (i.e. the number - * of bits set) of a N-bit word - */ - -#ifdef ULTRA_HAS_POPULATION_COUNT - -extern __inline__ unsigned int hweight32(unsigned int w) -{ - unsigned int res; - - __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffffffff)); - return res; -} - -extern __inline__ unsigned int hweight16(unsigned int w) -{ - unsigned int res; - - __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffff)); - return res; -} - -extern __inline__ unsigned int hweight8(unsigned int w) -{ - unsigned int res; - - __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xff)); - return res; -} - -#else - -#define hweight32(x) generic_hweight32(x) -#define hweight16(x) generic_hweight16(x) -#define hweight8(x) generic_hweight8(x) - -#endif -#endif /* __KERNEL__ */ - -/* find_next_zero_bit() finds the first zero bit in a bit string of length - * 'size' bits, starting the search at bit 'offset'. This is largely based - * on Linus's ALPHA routines, which are pretty portable BTW. - */ - -extern __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset) -{ - unsigned long *p = ((unsigned long *) addr) + (offset >> 6); - unsigned long result = offset & ~63UL; - unsigned long tmp; - - if (offset >= size) - return size; - size -= result; - offset &= 63UL; - if (offset) { - tmp = *(p++); - tmp |= ~0UL >> (64-offset); - if (size < 64) - goto found_first; - if (~tmp) - goto found_middle; - size -= 64; - result += 64; - } - while (size & ~63UL) { - if (~(tmp = *(p++))) - goto found_middle; - result += 64; - size -= 64; - } - if (!size) - return result; - tmp = *p; - -found_first: - tmp |= ~0UL << size; - if (tmp == ~0UL) /* Are any bits zero? */ - return result + size; /* Nope. */ -found_middle: - return result + ffz(tmp); -} - -#define find_first_zero_bit(addr, size) \ - find_next_zero_bit((addr), (size), 0) - -extern long __test_and_set_le_bit(int nr, volatile void *addr); -extern long __test_and_clear_le_bit(int nr, volatile void *addr); - -#define test_and_set_le_bit(nr,addr) (__test_and_set_le_bit(nr,addr)!=0) -#define test_and_clear_le_bit(nr,addr) (__test_and_clear_le_bit(nr,addr)!=0) -#define set_le_bit(nr,addr) ((void)__test_and_set_le_bit(nr,addr)) -#define clear_le_bit(nr,addr) ((void)__test_and_clear_le_bit(nr,addr)) - -extern __inline__ int test_le_bit(int nr, __const__ void * addr) -{ - int mask; - __const__ unsigned char *ADDR = (__const__ unsigned char *) addr; - - ADDR += nr >> 3; - mask = 1 << (nr & 0x07); - return ((mask & *ADDR) != 0); -} - -#define find_first_zero_le_bit(addr, size) \ - find_next_zero_le_bit((addr), (size), 0) - -extern __inline__ unsigned long find_next_zero_le_bit(void *addr, unsigned long size, unsigned long offset) -{ - unsigned long *p = ((unsigned long *) addr) + (offset >> 6); - unsigned long result = offset & ~63UL; - unsigned long tmp; - - if (offset >= size) - return size; - size -= result; - offset &= 63UL; - if(offset) { - tmp = __swab64p(p++); - tmp |= (~0UL >> (64-offset)); - if(size < 64) - goto found_first; - if(~tmp) - goto found_middle; - size -= 64; - result += 64; - } - while(size & ~63) { - if(~(tmp = __swab64p(p++))) - goto found_middle; - result += 64; - size -= 64; - } - if(!size) - return result; - tmp = __swab64p(p); -found_first: - tmp |= (~0UL << size); - if (tmp == ~0UL) /* Are any bits zero? */ - return result + size; /* Nope. */ -found_middle: - return result + ffz(tmp); -} - -#ifdef __KERNEL__ - -#define ext2_set_bit test_and_set_le_bit -#define ext2_clear_bit test_and_clear_le_bit -#define ext2_test_bit test_le_bit -#define ext2_find_first_zero_bit find_first_zero_le_bit -#define ext2_find_next_zero_bit find_next_zero_le_bit - -/* Bitmap functions for the minix filesystem. */ -#define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr) -#define minix_set_bit(nr,addr) set_bit(nr,addr) -#define minix_test_and_clear_bit(nr,addr) test_and_clear_bit(nr,addr) -#define minix_test_bit(nr,addr) test_bit(nr,addr) -#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size) - -#endif /* __KERNEL__ */ - -#endif /* defined(_SPARC64_BITOPS_H) */ |