xref: /kvm-unit-tests/lib/s390x/asm/bitops.h (revision c9a344475cffd9b4de9e5299fb6b2fd6af00003e)
1*2989246eSJanosch Frank /* SPDX-License-Identifier: GPL-2.0 */
2*2989246eSJanosch Frank /*
3*2989246eSJanosch Frank  *    Bitops taken from the kernel as most developers are already used
4*2989246eSJanosch Frank  *    to them.
5*2989246eSJanosch Frank  *
6*2989246eSJanosch Frank  *    Copyright IBM Corp. 1999,2013
7*2989246eSJanosch Frank  *
8*2989246eSJanosch Frank  *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
9*2989246eSJanosch Frank  *
10*2989246eSJanosch Frank  */
1171a6a145SAndrew Jones #ifndef _ASMS390X_BITOPS_H_
1271a6a145SAndrew Jones #define _ASMS390X_BITOPS_H_
1371a6a145SAndrew Jones 
1471a6a145SAndrew Jones #ifndef _BITOPS_H_
1571a6a145SAndrew Jones #error only <bitops.h> can be included directly
1671a6a145SAndrew Jones #endif
1771a6a145SAndrew Jones 
1871a6a145SAndrew Jones #define BITS_PER_LONG	64
1971a6a145SAndrew Jones 
test_bit(unsigned long nr,const volatile unsigned long * ptr)20*2989246eSJanosch Frank static inline bool test_bit(unsigned long nr,
21*2989246eSJanosch Frank 			    const volatile unsigned long *ptr)
22*2989246eSJanosch Frank {
23*2989246eSJanosch Frank 	const volatile unsigned char *addr;
24*2989246eSJanosch Frank 
25*2989246eSJanosch Frank 	addr = ((const volatile unsigned char *)ptr);
26*2989246eSJanosch Frank 	addr += (nr ^ (BITS_PER_LONG - 8)) >> 3;
27*2989246eSJanosch Frank 	return (*addr >> (nr & 7)) & 1;
28*2989246eSJanosch Frank }
29*2989246eSJanosch Frank 
test_bit_inv(unsigned long nr,const volatile unsigned long * ptr)30*2989246eSJanosch Frank static inline bool test_bit_inv(unsigned long nr,
31*2989246eSJanosch Frank 				const volatile unsigned long *ptr)
32*2989246eSJanosch Frank {
33*2989246eSJanosch Frank 	return test_bit(nr ^ (BITS_PER_LONG - 1), ptr);
34*2989246eSJanosch Frank }
35*2989246eSJanosch Frank 
3671a6a145SAndrew Jones #endif
37