diff options
Diffstat (limited to 'radeonreg.c')
-rw-r--r-- | radeonreg.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/radeonreg.c b/radeonreg.c index 7ebce54..1aa706c 100644 --- a/radeonreg.c +++ b/radeonreg.c @@ -34,6 +34,14 @@ #include "radeon.h" #include "radeon_reg.h" +#ifdef __powerpc__ +#ifdef _LITTLE_ENDIAN +#define ppc64le +#else +#define ppcBE +#endif +#endif + int skip; /* *ctrl_mem is mapped to the actual device's memory mapped control area. */ @@ -57,6 +65,17 @@ static void die_error(int err, const char *why) exit(-1); } +#ifdef ppc64le +#define LOADX "lwzx" +#define STOREX "stwx" +#elif defined(ppcBE) +#define LOADX "lwbrx" +#define STOREX "stwbrx" +#else +#define LOADX +#define STOREX +#endif + static void radeon_set(unsigned long offset, const char *name, unsigned int value) { @@ -64,7 +83,7 @@ static void radeon_set(unsigned long offset, const char *name, unsigned int valu die("internal error"); #ifdef __powerpc__ - __asm__ __volatile__ ("stwbrx %1,%2,%3\n\t" + __asm__ __volatile__ (STOREX " %1,%2,%3\n\t" "eieio" : "=m" (*((volatile unsigned int *)ctrl_mem+offset)) : "r"(value), "b"(ctrl_mem), "r"(offset)); @@ -89,7 +108,7 @@ static unsigned int radeon_get(unsigned long offset, const char *name) die("internal error"); #ifdef __powerpc__ - __asm__ __volatile__ ("lwbrx %0,%1,%2\n\t" + __asm__ __volatile__ (LOADX " %0,%1,%2\n\t" "eieio" : "=r" (value) : "b" (ctrl_mem), "r"(offset), |