Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/powerpc/include/asm/asm-compat.h
15117 views
1
#ifndef _ASM_POWERPC_ASM_COMPAT_H
2
#define _ASM_POWERPC_ASM_COMPAT_H
3
4
#include <asm/types.h>
5
#include <asm/ppc-opcode.h>
6
7
#ifdef __ASSEMBLY__
8
# define stringify_in_c(...) __VA_ARGS__
9
# define ASM_CONST(x) x
10
#else
11
/* This version of stringify will deal with commas... */
12
# define __stringify_in_c(...) #__VA_ARGS__
13
# define stringify_in_c(...) __stringify_in_c(__VA_ARGS__) " "
14
# define __ASM_CONST(x) x##UL
15
# define ASM_CONST(x) __ASM_CONST(x)
16
#endif
17
18
19
#ifdef __powerpc64__
20
21
/* operations for longs and pointers */
22
#define PPC_LL stringify_in_c(ld)
23
#define PPC_STL stringify_in_c(std)
24
#define PPC_STLU stringify_in_c(stdu)
25
#define PPC_LCMPI stringify_in_c(cmpdi)
26
#define PPC_LONG stringify_in_c(.llong)
27
#define PPC_LONG_ALIGN stringify_in_c(.balign 8)
28
#define PPC_TLNEI stringify_in_c(tdnei)
29
#define PPC_LLARX(t, a, b, eh) PPC_LDARX(t, a, b, eh)
30
#define PPC_STLCX stringify_in_c(stdcx.)
31
#define PPC_CNTLZL stringify_in_c(cntlzd)
32
#define PPC_LR_STKOFF 16
33
#define PPC_MIN_STKFRM 112
34
35
/* Move to CR, single-entry optimized version. Only available
36
* on POWER4 and later.
37
*/
38
#ifdef CONFIG_POWER4_ONLY
39
#define PPC_MTOCRF stringify_in_c(mtocrf)
40
#else
41
#define PPC_MTOCRF stringify_in_c(mtcrf)
42
#endif
43
44
#else /* 32-bit */
45
46
/* operations for longs and pointers */
47
#define PPC_LL stringify_in_c(lwz)
48
#define PPC_STL stringify_in_c(stw)
49
#define PPC_STLU stringify_in_c(stwu)
50
#define PPC_LCMPI stringify_in_c(cmpwi)
51
#define PPC_LONG stringify_in_c(.long)
52
#define PPC_LONG_ALIGN stringify_in_c(.balign 4)
53
#define PPC_TLNEI stringify_in_c(twnei)
54
#define PPC_LLARX(t, a, b, eh) PPC_LWARX(t, a, b, eh)
55
#define PPC_STLCX stringify_in_c(stwcx.)
56
#define PPC_CNTLZL stringify_in_c(cntlzw)
57
#define PPC_MTOCRF stringify_in_c(mtcrf)
58
#define PPC_LR_STKOFF 4
59
#define PPC_MIN_STKFRM 16
60
61
#endif
62
63
#ifdef __KERNEL__
64
#ifdef CONFIG_IBM405_ERR77
65
/* Erratum #77 on the 405 means we need a sync or dcbt before every
66
* stwcx. The old ATOMIC_SYNC_FIX covered some but not all of this.
67
*/
68
#define PPC405_ERR77(ra,rb) stringify_in_c(dcbt ra, rb;)
69
#define PPC405_ERR77_SYNC stringify_in_c(sync;)
70
#else
71
#define PPC405_ERR77(ra,rb)
72
#define PPC405_ERR77_SYNC
73
#endif
74
#endif
75
76
#endif /* _ASM_POWERPC_ASM_COMPAT_H */
77
78