| ... | ... | @@ -1,5 +1,23 @@ |
| 1 | 1 | usingnamespace @import("../bits.zig"); |
| 2 | 2 | |
| 3 | pub fn syscall_pipe(fd: *[2]i32) usize { |
| 4 | return asm volatile ( |
| 5 | \\ mov %%o0, %%o2 |
| 6 | \\ t 0x6d |
| 7 | \\ bcc %%xcc, 1f |
| 8 | \\ nop |
| 9 | \\ ba 2f |
| 10 | \\ neg %%o0 |
| 11 | \\ 1: |
| 12 | \\ st %%o0, [%%o2] |
| 13 | \\ st %%o1, [%%o2 + 4] |
| 14 | \\ clr %%o0 |
| 15 | \\ 2: |
| 16 | : [ret] "={o0}" (-> usize) |
| 17 | : [number] "{$2}" (@enumToInt(SYS.pipe)) |
| 18 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 19 | ); |
| 20 | } |
| 3 | 21 | |
| 4 | 22 | pub fn syscall0(number: SYS) usize { |
| 5 | 23 | return asm volatile ( |
| ... | ... | @@ -10,7 +28,7 @@ pub fn syscall0(number: SYS) usize { |
| 10 | 28 | \\ 1: |
| 11 | 29 | : [ret] "={o0}" (-> usize) |
| 12 | 30 | : [number] "{g1}" (@enumToInt(number)) |
| 13 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 31 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 14 | 32 | ); |
| 15 | 33 | } |
| 16 | 34 | |
| ... | ... | @@ -24,7 +42,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { |
| 24 | 42 | : [ret] "={o0}" (-> usize) |
| 25 | 43 | : [number] "{g1}" (@enumToInt(number)), |
| 26 | 44 | [arg1] "{o0}" (arg1) |
| 27 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 45 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 28 | 46 | ); |
| 29 | 47 | } |
| 30 | 48 | |
| ... | ... | @@ -39,7 +57,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { |
| 39 | 57 | : [number] "{g1}" (@enumToInt(number)), |
| 40 | 58 | [arg1] "{o0}" (arg1), |
| 41 | 59 | [arg2] "{o1}" (arg2) |
| 42 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 60 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 43 | 61 | ); |
| 44 | 62 | } |
| 45 | 63 | |
| ... | ... | @@ -55,7 +73,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { |
| 55 | 73 | [arg1] "{o0}" (arg1), |
| 56 | 74 | [arg2] "{o1}" (arg2), |
| 57 | 75 | [arg3] "{o2}" (arg3) |
| 58 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 76 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 59 | 77 | ); |
| 60 | 78 | } |
| 61 | 79 | |
| ... | ... | @@ -72,7 +90,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) |
| 72 | 90 | [arg2] "{o1}" (arg2), |
| 73 | 91 | [arg3] "{o2}" (arg3), |
| 74 | 92 | [arg4] "{o3}" (arg4) |
| 75 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 93 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 76 | 94 | ); |
| 77 | 95 | } |
| 78 | 96 | |
| ... | ... | @@ -90,7 +108,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, |
| 90 | 108 | [arg3] "{o2}" (arg3), |
| 91 | 109 | [arg4] "{o3}" (arg4), |
| 92 | 110 | [arg5] "{o4}" (arg5), |
| 93 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 111 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 94 | 112 | ); |
| 95 | 113 | } |
| 96 | 114 | |
| ... | ... | @@ -117,7 +135,7 @@ pub fn syscall6( |
| 117 | 135 | [arg4] "{o3}" (arg4), |
| 118 | 136 | [arg5] "{o4}" (arg5), |
| 119 | 137 | [arg6] "{o5}" (arg6), |
| 120 | | : "memory", "o1", "o2", "o3", "o4", "o5", "o7" |
| 138 | : "memory", "xcc", "o1", "o2", "o3", "o4", "o5", "o7" |
| 121 | 139 | ); |
| 122 | 140 | } |
| 123 | 141 | |
| ... | ... | @@ -130,6 +148,6 @@ pub fn restore_rt() callconv(.Naked) void { |
| 130 | 148 | return asm volatile ("t 0x6d" |
| 131 | 149 | : |
| 132 | 150 | : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn)) |
| 133 | | : "memory", "o0", "o1", "o2", "o3", "o4", "o5", "o7" |
| 151 | : "memory", "xcc", "o0", "o1", "o2", "o3", "o4", "o5", "o7" |
| 134 | 152 | ); |
| 135 | 153 | } |