]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
xtensa: fix __simc implementation
authorMax Filippov <jcmvbkbc@gmail.com>
Sun, 8 Jul 2012 23:12:54 +0000 (03:12 +0400)
committerChris Zankel <chris@zankel.net>
Sat, 11 Aug 2012 02:22:47 +0000 (19:22 -0700)
Do not rely on compiler implicitly placing function arguments into
specifc registers, place them explicitly.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
arch/xtensa/platforms/iss/console.c

index f9726f6afdf1f00432ca627820f61ab56f6c109c..5b43aa8767a2eaf7f6601034257fad256844918b 100644 (file)
@@ -43,14 +43,22 @@ static DEFINE_SPINLOCK(timer_lock);
 
 int errno;
 
-static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__));
 static int __simc (int a, int b, int c, int d, int e, int f)
 {
        int ret;
-       __asm__ __volatile__ ("simcall\n"
+       register int a1 asm("a2") = a;
+       register int b1 asm("a3") = b;
+       register int c1 asm("a4") = c;
+       register int d1 asm("a5") = d;
+       register int e1 asm("a6") = e;
+       register int f1 asm("a7") = f;
+       __asm__ __volatile__ (
+                       "simcall\n"
                        "mov %0, a2\n"
-                       "mov %1, a3\n" : "=a" (ret), "=a" (errno)
-                       : : "a2", "a3");
+                       "mov %1, a3\n"
+                       : "=a" (ret), "=a" (errno), "+r"(a1), "+r"(b1)
+                       : "r"(c1), "r"(d1), "r"(e1), "r"(f1)
+                       : );
        return ret;
 }