OSDN Git Service

cleanup
authorYoshinori Sato <ysato@sa76r4.localdomain>
Sat, 14 Feb 2015 12:53:25 +0000 (21:53 +0900)
committerYoshinori Sato <ysato@sa76r4.localdomain>
Sat, 14 Feb 2015 12:53:25 +0000 (21:53 +0900)
libc/sysdeps/linux/h8300/bits/syscalls.h

index dce0036..a3ff74b 100644 (file)
@@ -8,72 +8,78 @@
 
 #include <errno.h>
 
-#define ASMFMT_0()
-#define ASMFMT_1(arg1)                         \
-       , "g" ((unsigned long)arg1)
-#define ASMFMT_2(arg1, arg2)                   \
-       , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2)
-#define ASMFMT_3(arg1, arg2, arg3)             \
-       , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2), "g" ((unsigned long)arg3)
-#define ASMFMT_4(arg1, arg2, arg3, arg4)                       \
-       , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2), "g" ((unsigned long)arg3), "g" ((unsigned long)arg4)
-#define ASMFMT_5(arg1, arg2, arg3, arg4, arg5)                 \
-       , "g" (arg1), "g" (arg2), "g" (arg3), "g" (arg4)/*, "g" (arg5)*/
-#define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6)                           \
-       , "g" (arg1), "g" (arg2), "g" (arg3), "g" (arg4)/*, "g" (arg5), "g" (arg6)*/
+#define ASMFMT_0
+#define ASMFMT_1 , "g"(er1)
+#define ASMFMT_2 , "g"(er1), "g"(er2)
+#define ASMFMT_3 , "g"(er1), "g"(er2), "g"(er3)
+#define ASMFMT_4 , "g"(er1), "g"(er2), "g"(er3), "g"(er4)
+#define ASMFMT_5 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "g"(er5)
+#define ASMFMT_6 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "m"(er5), "m"(er6)
 
-#define SUBSTITUTE_ARGS_0 \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_1 \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_2 \
-       "mov.l %3, er2\n\t" \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_3 \
-       "mov.l %4, er3\n\t" \
-       "mov.l %3, er2\n\t" \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_4 \
-       "mov.l %5, er4\n\t" \
-       "mov.l %4, er3\n\t" \
-       "mov.l %3, er2\n\t" \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_5 \
-       /*"mov.l %6, er5\n\t"*/                 \
-       "mov.l %5, er4\n\t" \
-       "mov.l %4, er3\n\t" \
-       "mov.l %3, er2\n\t" \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
-#define SUBSTITUTE_ARGS_6 \
-       /*"mov.l %7, er6\n\t"*/                 \
-       /*"mov.l %6, er5\n\t"*/                 \
-       "mov.l %5, er4\n\t" \
-       "mov.l %4, er3\n\t" \
-       "mov.l %3, er2\n\t" \
-       "mov.l %2, er1\n\t" \
-       "mov.l %1, er0\n\t"
+#define SUBSTITUTE_ARGS_0() do {} while(0);
+#define SUBSTITUTE_ARGS_1(arg1)                        \
+       register long int er1 __asm__("er1") = (long int)arg1;
+#define SUBSTITUTE_ARGS_2(arg1, arg2)          \
+       register long int er1 __asm__("er1") = (long int)arg1; \
+       register long int er2 __asm__("er2") = (long int)arg2;
+#define SUBSTITUTE_ARGS_3(arg1, arg2, arg3)    \
+       register long int er1 __asm__("er1") = (long int)arg1; \
+       register long int er2 __asm__("er2") = (long int)arg2; \
+       register long int er3 __asm__("er3") = (long int)arg3;
+#define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4)           \
+       register long int er1 __asm__("er1") = (long int)arg1; \
+       register long int er2 __asm__("er2") = (long int)arg2; \
+       register long int er3 __asm__("er3") = (long int)arg3; \
+       register long int er4 __asm__("er4") = (long int)arg4;
+#define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5)   \
+       register long int er1 __asm__("er1") = (long int)arg1; \
+       register long int er2 __asm__("er2") = (long int)arg2; \
+       register long int er3 __asm__("er3") = (long int)arg3; \
+       register long int er4 __asm__("er4") = (long int)arg4; \
+       register long int er5 __asm__("er5") = (long int)arg5;
+#define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6)  \
+       register long int er1 __asm__("er1") = (long int)arg1; \
+       register long int er2 __asm__("er2") = (long int)arg2; \
+       register long int er3 __asm__("er3") = (long int)arg3; \
+       register long int er4 __asm__("er4") = (long int)arg4; \
+       long int er5 = (long int)arg5; \
+       long int er6 = (long int)arg6;
+
+#define LOAD_ARGS_0
+#define LOAD_ARGS_1
+#define LOAD_ARGS_2
+#define LOAD_ARGS_3
+#define LOAD_ARGS_4
+#define LOAD_ARGS_5
+#define LOAD_ARGS_6    "mov.l er5,@-sp\n\tmov.l %6,er5\n\t" \
+                       "mov.l er6,@-sp\n\tmov.l %7,er6\n\t"
+
+#define RESTORE_ARGS_0
+#define RESTORE_ARGS_1
+#define RESTORE_ARGS_2
+#define RESTORE_ARGS_3
+#define RESTORE_ARGS_4
+#define RESTORE_ARGS_5
+#define RESTORE_ARGS_6 "mov.l @sp+,er6\n\tmov.l @sp+,er5"
 
 /* The _NCS variant allows non-constant syscall numbers.  */
 #define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
 (__extension__ \
-  ({                                                                           \
-    register long int er0 __asm__ ("er0");                             \
-    __asm__ __volatile__ ( \
-               SUBSTITUTE_ARGS_##nr                            \
-               "trapa #0"                                              \
-                 : "=r" (er0)                                          \
-               : "ir" (name) ASMFMT_##nr(args)                         \
-                 : "memory"                                                    \
-    );                                                                         \
-    (int) er0;                                                         \
+  ({                                                   \
+    register long int er0 __asm__ ("er0");             \
+    SUBSTITUTE_ARGS_##nr(args)                         \
+    __asm__ __volatile__ (                             \
+               LOAD_ARGS_##nr                          \
+               "mov.l %1,er0\n\t"                      \
+               "trapa #0\n\t"                          \
+               RESTORE_ARGS_##nr                       \
+               : "=r" (er0)                            \
+               : "ir" (name) ASMFMT_##nr               \
+               : "memory"                              \
+    );                                                 \
+    (int) er0;                                         \
    }) \
 )
 
 #endif /* __ASSEMBLER__ */
 #endif /* _BITS_SYSCALLS_H */
-