xref: /kvm-unit-tests/lib/x86/asm/bitops.h (revision dcec966ff7423a29dad0e5ffdcf58e8a4095356f)
16ed97c50SPeter Feiner #ifndef _ASMX86_BITOPS_H_
26ed97c50SPeter Feiner #define _ASMX86_BITOPS_H_
36ed97c50SPeter Feiner 
46ed97c50SPeter Feiner #ifndef _BITOPS_H_
56ed97c50SPeter Feiner #error only <bitops.h> can be included directly
66ed97c50SPeter Feiner #endif
76ed97c50SPeter Feiner 
86ed97c50SPeter Feiner #ifdef __x86_64__
96ed97c50SPeter Feiner #define BITS_PER_LONG	64
106ed97c50SPeter Feiner #else
116ed97c50SPeter Feiner #define BITS_PER_LONG	32
126ed97c50SPeter Feiner #endif
136ed97c50SPeter Feiner 
1471a6a145SAndrew Jones #define HAVE_BUILTIN_FLS 1
1571a6a145SAndrew Jones 
test_and_set_bit(long nr,unsigned long * addr)16*386ed5c2SOliver Upton static inline void test_and_set_bit(long nr, unsigned long *addr)
17*386ed5c2SOliver Upton {
18*386ed5c2SOliver Upton 	asm volatile("lock; bts %1,%0"
19*386ed5c2SOliver Upton 		     : "+m" (*addr)
20*386ed5c2SOliver Upton 		     : "Ir" (nr)
21*386ed5c2SOliver Upton 		     : "memory");
22*386ed5c2SOliver Upton }
23*386ed5c2SOliver Upton 
246ed97c50SPeter Feiner #endif
25