Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sparc/include/asm/bitops_64.h
17356 views
1
/*
2
* bitops.h: Bit string operations on the V9.
3
*
4
* Copyright 1996, 1997 David S. Miller ([email protected])
5
*/
6
7
#ifndef _SPARC64_BITOPS_H
8
#define _SPARC64_BITOPS_H
9
10
#ifndef _LINUX_BITOPS_H
11
#error only <linux/bitops.h> can be included directly
12
#endif
13
14
#include <linux/compiler.h>
15
#include <asm/byteorder.h>
16
17
extern int test_and_set_bit(unsigned long nr, volatile unsigned long *addr);
18
extern int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr);
19
extern int test_and_change_bit(unsigned long nr, volatile unsigned long *addr);
20
extern void set_bit(unsigned long nr, volatile unsigned long *addr);
21
extern void clear_bit(unsigned long nr, volatile unsigned long *addr);
22
extern void change_bit(unsigned long nr, volatile unsigned long *addr);
23
24
#include <asm-generic/bitops/non-atomic.h>
25
26
#define smp_mb__before_clear_bit() barrier()
27
#define smp_mb__after_clear_bit() barrier()
28
29
#include <asm-generic/bitops/ffz.h>
30
#include <asm-generic/bitops/__ffs.h>
31
#include <asm-generic/bitops/fls.h>
32
#include <asm-generic/bitops/__fls.h>
33
#include <asm-generic/bitops/fls64.h>
34
35
#ifdef __KERNEL__
36
37
#include <asm-generic/bitops/sched.h>
38
#include <asm-generic/bitops/ffs.h>
39
40
/*
41
* hweightN: returns the hamming weight (i.e. the number
42
* of bits set) of a N-bit word
43
*/
44
45
#ifdef ULTRA_HAS_POPULATION_COUNT
46
47
static inline unsigned int __arch_hweight64(unsigned long w)
48
{
49
unsigned int res;
50
51
__asm__ ("popc %1,%0" : "=r" (res) : "r" (w));
52
return res;
53
}
54
55
static inline unsigned int __arch_hweight32(unsigned int w)
56
{
57
unsigned int res;
58
59
__asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffffffff));
60
return res;
61
}
62
63
static inline unsigned int __arch_hweight16(unsigned int w)
64
{
65
unsigned int res;
66
67
__asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffff));
68
return res;
69
}
70
71
static inline unsigned int __arch_hweight8(unsigned int w)
72
{
73
unsigned int res;
74
75
__asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xff));
76
return res;
77
}
78
79
#else
80
81
#include <asm-generic/bitops/arch_hweight.h>
82
83
#endif
84
#include <asm-generic/bitops/const_hweight.h>
85
#include <asm-generic/bitops/lock.h>
86
#endif /* __KERNEL__ */
87
88
#include <asm-generic/bitops/find.h>
89
90
#ifdef __KERNEL__
91
92
#include <asm-generic/bitops/le.h>
93
94
#define ext2_set_bit_atomic(lock,nr,addr) \
95
test_and_set_bit((nr) ^ 0x38,(unsigned long *)(addr))
96
#define ext2_clear_bit_atomic(lock,nr,addr) \
97
test_and_clear_bit((nr) ^ 0x38,(unsigned long *)(addr))
98
99
#endif /* __KERNEL__ */
100
101
#endif /* defined(_SPARC64_BITOPS_H) */
102
103