Revision | b589356e0552e7b09fb214ce080332ee80b2a279 (tree) |
---|---|
Zeit | 2015-02-14 21:53:25 |
Autor | Yoshinori Sato <ysato@sa76...> |
Commiter | Yoshinori Sato |
cleanup
@@ -8,72 +8,78 @@ | ||
8 | 8 | |
9 | 9 | #include <errno.h> |
10 | 10 | |
11 | -#define ASMFMT_0() | |
12 | -#define ASMFMT_1(arg1) \ | |
13 | - , "g" ((unsigned long)arg1) | |
14 | -#define ASMFMT_2(arg1, arg2) \ | |
15 | - , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2) | |
16 | -#define ASMFMT_3(arg1, arg2, arg3) \ | |
17 | - , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2), "g" ((unsigned long)arg3) | |
18 | -#define ASMFMT_4(arg1, arg2, arg3, arg4) \ | |
19 | - , "g" ((unsigned long)arg1), "g" ((unsigned long)arg2), "g" ((unsigned long)arg3), "g" ((unsigned long)arg4) | |
20 | -#define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \ | |
21 | - , "g" (arg1), "g" (arg2), "g" (arg3), "g" (arg4)/*, "g" (arg5)*/ | |
22 | -#define ASMFMT_6(arg1, arg2, arg3, arg4, arg5, arg6) \ | |
23 | - , "g" (arg1), "g" (arg2), "g" (arg3), "g" (arg4)/*, "g" (arg5), "g" (arg6)*/ | |
11 | +#define ASMFMT_0 | |
12 | +#define ASMFMT_1 , "g"(er1) | |
13 | +#define ASMFMT_2 , "g"(er1), "g"(er2) | |
14 | +#define ASMFMT_3 , "g"(er1), "g"(er2), "g"(er3) | |
15 | +#define ASMFMT_4 , "g"(er1), "g"(er2), "g"(er3), "g"(er4) | |
16 | +#define ASMFMT_5 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "g"(er5) | |
17 | +#define ASMFMT_6 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "m"(er5), "m"(er6) | |
24 | 18 | |
25 | -#define SUBSTITUTE_ARGS_0 \ | |
26 | - "mov.l %1, er0\n\t" | |
27 | -#define SUBSTITUTE_ARGS_1 \ | |
28 | - "mov.l %2, er1\n\t" \ | |
29 | - "mov.l %1, er0\n\t" | |
30 | -#define SUBSTITUTE_ARGS_2 \ | |
31 | - "mov.l %3, er2\n\t" \ | |
32 | - "mov.l %2, er1\n\t" \ | |
33 | - "mov.l %1, er0\n\t" | |
34 | -#define SUBSTITUTE_ARGS_3 \ | |
35 | - "mov.l %4, er3\n\t" \ | |
36 | - "mov.l %3, er2\n\t" \ | |
37 | - "mov.l %2, er1\n\t" \ | |
38 | - "mov.l %1, er0\n\t" | |
39 | -#define SUBSTITUTE_ARGS_4 \ | |
40 | - "mov.l %5, er4\n\t" \ | |
41 | - "mov.l %4, er3\n\t" \ | |
42 | - "mov.l %3, er2\n\t" \ | |
43 | - "mov.l %2, er1\n\t" \ | |
44 | - "mov.l %1, er0\n\t" | |
45 | -#define SUBSTITUTE_ARGS_5 \ | |
46 | - /*"mov.l %6, er5\n\t"*/ \ | |
47 | - "mov.l %5, er4\n\t" \ | |
48 | - "mov.l %4, er3\n\t" \ | |
49 | - "mov.l %3, er2\n\t" \ | |
50 | - "mov.l %2, er1\n\t" \ | |
51 | - "mov.l %1, er0\n\t" | |
52 | -#define SUBSTITUTE_ARGS_6 \ | |
53 | - /*"mov.l %7, er6\n\t"*/ \ | |
54 | - /*"mov.l %6, er5\n\t"*/ \ | |
55 | - "mov.l %5, er4\n\t" \ | |
56 | - "mov.l %4, er3\n\t" \ | |
57 | - "mov.l %3, er2\n\t" \ | |
58 | - "mov.l %2, er1\n\t" \ | |
59 | - "mov.l %1, er0\n\t" | |
19 | +#define SUBSTITUTE_ARGS_0() do {} while(0); | |
20 | +#define SUBSTITUTE_ARGS_1(arg1) \ | |
21 | + register long int er1 __asm__("er1") = (long int)arg1; | |
22 | +#define SUBSTITUTE_ARGS_2(arg1, arg2) \ | |
23 | + register long int er1 __asm__("er1") = (long int)arg1; \ | |
24 | + register long int er2 __asm__("er2") = (long int)arg2; | |
25 | +#define SUBSTITUTE_ARGS_3(arg1, arg2, arg3) \ | |
26 | + register long int er1 __asm__("er1") = (long int)arg1; \ | |
27 | + register long int er2 __asm__("er2") = (long int)arg2; \ | |
28 | + register long int er3 __asm__("er3") = (long int)arg3; | |
29 | +#define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4) \ | |
30 | + register long int er1 __asm__("er1") = (long int)arg1; \ | |
31 | + register long int er2 __asm__("er2") = (long int)arg2; \ | |
32 | + register long int er3 __asm__("er3") = (long int)arg3; \ | |
33 | + register long int er4 __asm__("er4") = (long int)arg4; | |
34 | +#define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5) \ | |
35 | + register long int er1 __asm__("er1") = (long int)arg1; \ | |
36 | + register long int er2 __asm__("er2") = (long int)arg2; \ | |
37 | + register long int er3 __asm__("er3") = (long int)arg3; \ | |
38 | + register long int er4 __asm__("er4") = (long int)arg4; \ | |
39 | + register long int er5 __asm__("er5") = (long int)arg5; | |
40 | +#define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ | |
41 | + register long int er1 __asm__("er1") = (long int)arg1; \ | |
42 | + register long int er2 __asm__("er2") = (long int)arg2; \ | |
43 | + register long int er3 __asm__("er3") = (long int)arg3; \ | |
44 | + register long int er4 __asm__("er4") = (long int)arg4; \ | |
45 | + long int er5 = (long int)arg5; \ | |
46 | + long int er6 = (long int)arg6; | |
47 | + | |
48 | +#define LOAD_ARGS_0 | |
49 | +#define LOAD_ARGS_1 | |
50 | +#define LOAD_ARGS_2 | |
51 | +#define LOAD_ARGS_3 | |
52 | +#define LOAD_ARGS_4 | |
53 | +#define LOAD_ARGS_5 | |
54 | +#define LOAD_ARGS_6 "mov.l er5,@-sp\n\tmov.l %6,er5\n\t" \ | |
55 | + "mov.l er6,@-sp\n\tmov.l %7,er6\n\t" | |
56 | + | |
57 | +#define RESTORE_ARGS_0 | |
58 | +#define RESTORE_ARGS_1 | |
59 | +#define RESTORE_ARGS_2 | |
60 | +#define RESTORE_ARGS_3 | |
61 | +#define RESTORE_ARGS_4 | |
62 | +#define RESTORE_ARGS_5 | |
63 | +#define RESTORE_ARGS_6 "mov.l @sp+,er6\n\tmov.l @sp+,er5" | |
60 | 64 | |
61 | 65 | /* The _NCS variant allows non-constant syscall numbers. */ |
62 | 66 | #define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ |
63 | 67 | (__extension__ \ |
64 | - ({ \ | |
65 | - register long int er0 __asm__ ("er0"); \ | |
66 | - __asm__ __volatile__ ( \ | |
67 | - SUBSTITUTE_ARGS_##nr \ | |
68 | - "trapa #0" \ | |
69 | - : "=r" (er0) \ | |
70 | - : "ir" (name) ASMFMT_##nr(args) \ | |
71 | - : "memory" \ | |
72 | - ); \ | |
73 | - (int) er0; \ | |
68 | + ({ \ | |
69 | + register long int er0 __asm__ ("er0"); \ | |
70 | + SUBSTITUTE_ARGS_##nr(args) \ | |
71 | + __asm__ __volatile__ ( \ | |
72 | + LOAD_ARGS_##nr \ | |
73 | + "mov.l %1,er0\n\t" \ | |
74 | + "trapa #0\n\t" \ | |
75 | + RESTORE_ARGS_##nr \ | |
76 | + : "=r" (er0) \ | |
77 | + : "ir" (name) ASMFMT_##nr \ | |
78 | + : "memory" \ | |
79 | + ); \ | |
80 | + (int) er0; \ | |
74 | 81 | }) \ |
75 | 82 | ) |
76 | 83 | |
77 | 84 | #endif /* __ASSEMBLER__ */ |
78 | 85 | #endif /* _BITS_SYSCALLS_H */ |
79 | - |