[Xenomai-git] Mike Frysinger : blackfin: clean up syscall assembly
Module: xenomai-head Branch: master Commit: b29dadf3e1ea53b4f4d50e2ecb2123ce759eb187 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=b29dadf3e1ea53b4f4d50e2ecb2123ce759eb187 Author: Mike Frysinger vap...@gentoo.org Date: Mon Sep 27 18:09:03 2010 -0400 blackfin: clean up syscall assembly The Blackfin assembly for making syscalls is inefficient, so rewrite it to use the asm constraints that gcc provides to load values into specific registers. The generated assembly now looks much nicer, and the header no longer duplicates the same syscall assembly multiple times. Signed-off-by: Mike Frysinger vap...@gentoo.org --- include/asm-blackfin/syscall.h | 129 +--- 1 files changed, 16 insertions(+), 113 deletions(-) diff --git a/include/asm-blackfin/syscall.h b/include/asm-blackfin/syscall.h index 9420dc8..8f8a7a2 100644 --- a/include/asm-blackfin/syscall.h +++ b/include/asm-blackfin/syscall.h @@ -90,125 +90,28 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) * services in kernel space. */ -#define __emit_syscall0(muxcode, sigp) \ +#define __emit_syscall0(muxcode, sigp, ...)\ ({ \ long __res; \ __asm__ __volatile__ ( \ - r5=%2;\n\t\ - p0=%1;\n\t\ excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(sigp))\ - : CC,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall1(muxcode, sigp, a1) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(sigp))\ - : CC,R0,R5,P0,memory);\ - __res; \ -}) - -#define __emit_syscall2(muxcode, sigp, a1, a2) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(a2)), \ - a ((long)(sigp))\ - : CC,R0,R1,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall3(muxcode, sigp, a1, a2, a3) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%5;\n\t\ - r2=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t\
[Xenomai-git] Mike Frysinger : blackfin: clean up syscall assembly
Module: xenomai-rpm Branch: for-upstream Commit: b29dadf3e1ea53b4f4d50e2ecb2123ce759eb187 URL: http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=b29dadf3e1ea53b4f4d50e2ecb2123ce759eb187 Author: Mike Frysinger vap...@gentoo.org Date: Mon Sep 27 18:09:03 2010 -0400 blackfin: clean up syscall assembly The Blackfin assembly for making syscalls is inefficient, so rewrite it to use the asm constraints that gcc provides to load values into specific registers. The generated assembly now looks much nicer, and the header no longer duplicates the same syscall assembly multiple times. Signed-off-by: Mike Frysinger vap...@gentoo.org --- include/asm-blackfin/syscall.h | 129 +--- 1 files changed, 16 insertions(+), 113 deletions(-) diff --git a/include/asm-blackfin/syscall.h b/include/asm-blackfin/syscall.h index 9420dc8..8f8a7a2 100644 --- a/include/asm-blackfin/syscall.h +++ b/include/asm-blackfin/syscall.h @@ -90,125 +90,28 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) * services in kernel space. */ -#define __emit_syscall0(muxcode, sigp) \ +#define __emit_syscall0(muxcode, sigp, ...)\ ({ \ long __res; \ __asm__ __volatile__ ( \ - r5=%2;\n\t\ - p0=%1;\n\t\ excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(sigp))\ - : CC,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall1(muxcode, sigp, a1) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(sigp))\ - : CC,R0,R5,P0,memory);\ - __res; \ -}) - -#define __emit_syscall2(muxcode, sigp, a1, a2) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(a2)), \ - a ((long)(sigp))\ - : CC,R0,R1,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall3(muxcode, sigp, a1, a2, a3) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%5;\n\t\ - r2=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t
[Xenomai-git] Mike Frysinger : blackfin: clean up syscall assembly
Module: xenomai-rpm Branch: for-upstream Commit: 31959f8727f0635c8c4bd87c271bee96da803e1c URL: http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=31959f8727f0635c8c4bd87c271bee96da803e1c Author: Mike Frysinger vap...@gentoo.org Date: Mon Sep 27 18:09:03 2010 -0400 blackfin: clean up syscall assembly The Blackfin assembly for making syscalls is inefficient, so rewrite it to use the asm constraints that gcc provides to load values into specific registers. The generated assembly now looks much nicer, and the header no longer duplicates the same syscall assembly multiple times. Signed-off-by: Mike Frysinger vap...@gentoo.org --- include/asm-blackfin/syscall.h | 129 +--- 1 files changed, 16 insertions(+), 113 deletions(-) diff --git a/include/asm-blackfin/syscall.h b/include/asm-blackfin/syscall.h index 9420dc8..8f8a7a2 100644 --- a/include/asm-blackfin/syscall.h +++ b/include/asm-blackfin/syscall.h @@ -90,125 +90,28 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) * services in kernel space. */ -#define __emit_syscall0(muxcode, sigp) \ +#define __emit_syscall0(muxcode, sigp, ...)\ ({ \ long __res; \ __asm__ __volatile__ ( \ - r5=%2;\n\t\ - p0=%1;\n\t\ excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(sigp))\ - : CC,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall1(muxcode, sigp, a1) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(sigp))\ - : CC,R0,R5,P0,memory);\ - __res; \ -}) - -#define __emit_syscall2(muxcode, sigp, a1, a2) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t\ - p0=%1;\n\t\ - excpt 0;\n\t \ - %0=r0;\n\t\ - : =da (__res) \ - : d (muxcode),\ - a ((long)(a1)), \ - a ((long)(a2)), \ - a ((long)(sigp))\ - : CC,R0,R1,R5,P0,memory); \ - __res; \ -}) - -#define __emit_syscall3(muxcode, sigp, a1, a2, a3) \ -({ \ - long __res; \ - __asm__ __volatile__ ( \ - r5=%5;\n\t\ - r2=%4;\n\t\ - r1=%3;\n\t\ - r0=%2;\n\t