From: NIIBE Y. <gn...@m1...> - 2002-03-22 02:56:48
|
NIIBE Yutaka wrote: > Index: include/asm-sh/system.h > =================================================================== > RCS file: /cvsroot/linuxsh/linux/include/asm-sh/system.h,v > retrieving revision 1.1.1.1 > diff -u -3 -p -r1.1.1.1 system.h > --- include/asm-sh/system.h 15 Oct 2001 20:45:11 -0000 1.1.1.1 > +++ include/asm-sh/system.h 22 Mar 2002 01:57:26 -0000 > @@ -20,8 +20,7 @@ typedef struct { > #error no SMP SuperH > #else > #define prepare_to_switch() do { } while(0) > -#define switch_to(prev,next,last) do { \ > - register struct task_struct *__last; \ > +#define switch_to(prev, next) do { \ > register unsigned long *__ts1 __asm__ ("r1") = &prev->thread.sp; \ > register unsigned long *__ts2 __asm__ ("r2") = &prev->thread.pc; \ > register unsigned long *__ts4 __asm__ ("r4") = (unsigned long *)prev; \ > @@ -40,7 +39,6 @@ typedef struct { > "mov.l r14, @-r15\n\t" \ > "mov.l r15, @r1 ! save SP\n\t" \ > "mov.l @r6, r15 ! change to new stack\n\t" \ > - "mov.l %0, @-r15 ! push R0 onto new stack\n\t" \ > "mova 1f, %0\n\t" \ > "mov.l %0, @r2 ! save PC\n\t" \ > "mov.l 2f, %0\n\t" \ > @@ -50,7 +48,6 @@ typedef struct { > "2:\n\t" \ > ".long " "__switch_to\n" \ > "1:\n\t" \ > - "mov.l @r15+, %0 ! pop R0 from new stack\n\t" \ > "mov.l @r15+, r14\n\t" \ > "mov.l @r15+, r13\n\t" \ > "mov.l @r15+, r12\n\t" \ > @@ -60,12 +57,11 @@ typedef struct { > "mov.l @r15+, r8\n\t" \ > "lds.l @r15+, pr\n\t" \ > "ldc.l @r15+, gbr\n\t" \ > - :"=&z" (__last) \ > - :"0" (prev), \ > - "r" (__ts1), "r" (__ts2), \ > - "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ > - :"r3", "t"); \ > - last = __last; \ > + : /* No output */ \ > + : "r" (prev), \ z This should be "z" so that we can use "mova" instruction (only r0 is allowed). > + "r" (__ts1), "r" (__ts2), \ > + "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ > + : "r3", "t"); \ > } while (0) > #endif -- |