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_LCMPLI stringify_in_c(cmpldi) 27#define PPC_LCMP stringify_in_c(cmpd) 28#define PPC_LONG stringify_in_c(.llong) 29#define PPC_LONG_ALIGN stringify_in_c(.balign 8) 30#define PPC_TLNEI stringify_in_c(tdnei) 31#define PPC_LLARX(t, a, b, eh) PPC_LDARX(t, a, b, eh) 32#define PPC_STLCX stringify_in_c(stdcx.) 33#define PPC_CNTLZL stringify_in_c(cntlzd) 34#define PPC_MTOCRF(FXM, RS) MTOCRF((FXM), RS) 35#define PPC_LR_STKOFF 16 36#define PPC_MIN_STKFRM 112 37 38#ifdef __BIG_ENDIAN__ 39#define LWZX_BE stringify_in_c(lwzx) 40#define LDX_BE stringify_in_c(ldx) 41#define STWX_BE stringify_in_c(stwx) 42#define STDX_BE stringify_in_c(stdx) 43#else 44#define LWZX_BE stringify_in_c(lwbrx) 45#define LDX_BE stringify_in_c(ldbrx) 46#define STWX_BE stringify_in_c(stwbrx) 47#define STDX_BE stringify_in_c(stdbrx) 48#endif 49 50#else /* 32-bit */ 51 52/* operations for longs and pointers */ 53#define PPC_LL stringify_in_c(lwz) 54#define PPC_STL stringify_in_c(stw) 55#define PPC_STLU stringify_in_c(stwu) 56#define PPC_LCMPI stringify_in_c(cmpwi) 57#define PPC_LCMPLI stringify_in_c(cmplwi) 58#define PPC_LCMP stringify_in_c(cmpw) 59#define PPC_LONG stringify_in_c(.long) 60#define PPC_LONG_ALIGN stringify_in_c(.balign 4) 61#define PPC_TLNEI stringify_in_c(twnei) 62#define PPC_LLARX(t, a, b, eh) PPC_LWARX(t, a, b, eh) 63#define PPC_STLCX stringify_in_c(stwcx.) 64#define PPC_CNTLZL stringify_in_c(cntlzw) 65#define PPC_MTOCRF stringify_in_c(mtcrf) 66#define PPC_LR_STKOFF 4 67#define PPC_MIN_STKFRM 16 68 69#endif 70 71#ifdef __KERNEL__ 72#ifdef CONFIG_IBM405_ERR77 73/* Erratum #77 on the 405 means we need a sync or dcbt before every 74 * stwcx. The old ATOMIC_SYNC_FIX covered some but not all of this. 75 */ 76#define PPC405_ERR77(ra,rb) stringify_in_c(dcbt ra, rb;) 77#define PPC405_ERR77_SYNC stringify_in_c(sync;) 78#else 79#define PPC405_ERR77(ra,rb) 80#define PPC405_ERR77_SYNC 81#endif 82#endif 83 84#endif /* _ASM_POWERPC_ASM_COMPAT_H */ 85