powerpc: fix register usage in some inline assembly code

In some usages of inline assembly, hard-coded registers were
specified when a scratch register should have been used instead.

Signed-off-by: Timur Tabi <timur@freescale.com>
This commit is contained in:
Timur Tabi 2010-12-14 17:18:51 -06:00 committed by Wolfgang Denk
parent 2eb1573f01
commit 96805a529c
2 changed files with 19 additions and 11 deletions

View File

@ -12,11 +12,13 @@ void breakinst(void);
int int
kgdb_setjmp(long *buf) kgdb_setjmp(long *buf)
{ {
asm ("mflr 0; stw 0,0(%0);" unsigned long temp;
"stw 1,4(%0); stw 2,8(%0);"
"mfcr 0; stw 0,12(%0);" asm volatile("mflr %0; stw %0,0(%1);"
"stmw 13,16(%0)" "stw %%r1,4(%1); stw %%r2,8(%1);"
: : "r" (buf)); "mfcr %0; stw %0,12(%1);"
"stmw %%r13,16(%1)"
: "=&r"(temp) : "r" (buf));
/* XXX should save fp regs as well */ /* XXX should save fp regs as well */
return 0; return 0;
} }
@ -24,13 +26,16 @@ kgdb_setjmp(long *buf)
void void
kgdb_longjmp(long *buf, int val) kgdb_longjmp(long *buf, int val)
{ {
unsigned long temp;
if (val == 0) if (val == 0)
val = 1; val = 1;
asm ("lmw 13,16(%0);"
"lwz 0,12(%0); mtcrf 0x38,0;" asm volatile("lmw %%r13,16(%1);"
"lwz 0,0(%0); lwz 1,4(%0); lwz 2,8(%0);" "lwz %0,12(%1); mtcrf 0x38,%0;"
"mtlr 0; mr 3,%1" "lwz %0,0(%1); lwz %%r1,4(%1); lwz %%r2,8(%1);"
: : "r" (buf), "r" (val)); "mtlr %0; mr %%r3,%2"
: "=&r"(temp) : "r" (buf), "r" (val));
} }
static inline unsigned long static inline unsigned long

View File

@ -78,6 +78,8 @@ unsigned long ticks2usec(unsigned long ticks)
int init_timebase (void) int init_timebase (void)
{ {
unsigned long temp;
#if defined(CONFIG_5xx) || defined(CONFIG_8xx) #if defined(CONFIG_5xx) || defined(CONFIG_8xx)
volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
@ -86,7 +88,8 @@ int init_timebase (void)
#endif #endif
/* reset */ /* reset */
asm ("li 3,0 ; mttbu 3 ; mttbl 3 ;"); asm volatile("li %0,0 ; mttbu %0 ; mttbl %0;"
: "=&r"(temp) );
#if defined(CONFIG_5xx) || defined(CONFIG_8xx) #if defined(CONFIG_5xx) || defined(CONFIG_8xx)
/* enable */ /* enable */