mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-08 11:36:21 -04:00
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:
parent
2eb1573f01
commit
96805a529c
@ -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
|
||||||
|
@ -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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user