| ... | ... | @@ -10,9 +10,9 @@ pub fn syscall0( |
| 10 | 10 | return asm volatile ( |
| 11 | 11 | \\ t 0x6d |
| 12 | 12 | \\ bcc,pt %%xcc, 1f |
| 13 | | \\ nop |
| 13 | \\ nop |
| 14 | 14 | \\ neg %%o0 |
| 15 | | \\ 1: |
| 15 | \\1: |
| 16 | 16 | : [ret] "={o0}" (-> u64), |
| 17 | 17 | : [number] "{g1}" (@intFromEnum(number)), |
| 18 | 18 | : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true }); |
| ... | ... | @@ -25,9 +25,9 @@ pub fn syscall1( |
| 25 | 25 | return asm volatile ( |
| 26 | 26 | \\ t 0x6d |
| 27 | 27 | \\ bcc,pt %%xcc, 1f |
| 28 | | \\ nop |
| 28 | \\ nop |
| 29 | 29 | \\ neg %%o0 |
| 30 | | \\ 1: |
| 30 | \\1: |
| 31 | 31 | : [ret] "={o0}" (-> u64), |
| 32 | 32 | : [number] "{g1}" (@intFromEnum(number)), |
| 33 | 33 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -42,9 +42,9 @@ pub fn syscall2( |
| 42 | 42 | return asm volatile ( |
| 43 | 43 | \\ t 0x6d |
| 44 | 44 | \\ bcc,pt %%xcc, 1f |
| 45 | | \\ nop |
| 45 | \\ nop |
| 46 | 46 | \\ neg %%o0 |
| 47 | | \\ 1: |
| 47 | \\1: |
| 48 | 48 | : [ret] "={o0}" (-> u64), |
| 49 | 49 | : [number] "{g1}" (@intFromEnum(number)), |
| 50 | 50 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -61,9 +61,9 @@ pub fn syscall3( |
| 61 | 61 | return asm volatile ( |
| 62 | 62 | \\ t 0x6d |
| 63 | 63 | \\ bcc,pt %%xcc, 1f |
| 64 | | \\ nop |
| 64 | \\ nop |
| 65 | 65 | \\ neg %%o0 |
| 66 | | \\ 1: |
| 66 | \\1: |
| 67 | 67 | : [ret] "={o0}" (-> u64), |
| 68 | 68 | : [number] "{g1}" (@intFromEnum(number)), |
| 69 | 69 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -82,9 +82,9 @@ pub fn syscall4( |
| 82 | 82 | return asm volatile ( |
| 83 | 83 | \\ t 0x6d |
| 84 | 84 | \\ bcc,pt %%xcc, 1f |
| 85 | | \\ nop |
| 85 | \\ nop |
| 86 | 86 | \\ neg %%o0 |
| 87 | | \\ 1: |
| 87 | \\1: |
| 88 | 88 | : [ret] "={o0}" (-> u64), |
| 89 | 89 | : [number] "{g1}" (@intFromEnum(number)), |
| 90 | 90 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -105,9 +105,9 @@ pub fn syscall5( |
| 105 | 105 | return asm volatile ( |
| 106 | 106 | \\ t 0x6d |
| 107 | 107 | \\ bcc,pt %%xcc, 1f |
| 108 | | \\ nop |
| 108 | \\ nop |
| 109 | 109 | \\ neg %%o0 |
| 110 | | \\ 1: |
| 110 | \\1: |
| 111 | 111 | : [ret] "={o0}" (-> u64), |
| 112 | 112 | : [number] "{g1}" (@intFromEnum(number)), |
| 113 | 113 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -130,9 +130,9 @@ pub fn syscall6( |
| 130 | 130 | return asm volatile ( |
| 131 | 131 | \\ t 0x6d |
| 132 | 132 | \\ bcc,pt %%xcc, 1f |
| 133 | | \\ nop |
| 133 | \\ nop |
| 134 | 134 | \\ neg %%o0 |
| 135 | | \\ 1: |
| 135 | \\1: |
| 136 | 136 | : [ret] "={o0}" (-> u64), |
| 137 | 137 | : [number] "{g1}" (@intFromEnum(number)), |
| 138 | 138 | [arg1] "{o0}" (arg1), |
| ... | ... | @@ -151,10 +151,10 @@ pub fn syscall_pipe( |
| 151 | 151 | \\ mov %[arg], %%g3 |
| 152 | 152 | \\ t 0x6d |
| 153 | 153 | \\ bcc,pt %%xcc, 1f |
| 154 | | \\ nop |
| 154 | \\ nop |
| 155 | 155 | \\ # Return the error code |
| 156 | 156 | \\ ba 2f |
| 157 | | \\ neg %%o0 |
| 157 | \\ neg %%o0 |
| 158 | 158 | \\1: |
| 159 | 159 | \\ st %%o0, [%%g3+0] |
| 160 | 160 | \\ st %%o1, [%%g3+4] |
| ... | ... | @@ -175,14 +175,14 @@ pub fn syscall_fork() u64 { |
| 175 | 175 | return asm volatile ( |
| 176 | 176 | \\ t 0x6d |
| 177 | 177 | \\ bcc,pt %%xcc, 1f |
| 178 | | \\ nop |
| 178 | \\ nop |
| 179 | 179 | \\ ba 2f |
| 180 | | \\ neg %%o0 |
| 181 | | \\ 1: |
| 180 | \\ neg %%o0 |
| 181 | \\1: |
| 182 | 182 | \\ # Clear the child's %%o0 |
| 183 | 183 | \\ dec %%o1 |
| 184 | 184 | \\ and %%o1, %%o0, %%o0 |
| 185 | | \\ 2: |
| 185 | \\2: |
| 186 | 186 | : [ret] "={o0}" (-> u64), |
| 187 | 187 | : [number] "{g1}" (@intFromEnum(SYS.fork)), |
| 188 | 188 | : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true }); |
| ... | ... | @@ -209,20 +209,20 @@ pub fn clone() callconv(.naked) u64 { |
| 209 | 209 | \\ ldx [%%fp + 0x8af], %%o4 |
| 210 | 210 | \\ t 0x6d |
| 211 | 211 | \\ bcs,pn %%xcc, 1f |
| 212 | | \\ nop |
| 212 | \\ nop |
| 213 | 213 | \\ # The child pid is returned in o0 while o1 tells if this |
| 214 | | \\ # process is # the child (=1) or the parent (=0). |
| 214 | \\ # process is the child (=1) or the parent (=0). |
| 215 | 215 | \\ brnz %%o1, 2f |
| 216 | | \\ nop |
| 216 | \\ nop |
| 217 | 217 | \\ # Parent process, return the child pid |
| 218 | 218 | \\ mov %%o0, %%i0 |
| 219 | 219 | \\ ret |
| 220 | | \\ restore |
| 220 | \\ restore |
| 221 | 221 | \\1: |
| 222 | 222 | \\ # The syscall failed |
| 223 | 223 | \\ sub %%g0, %%o0, %%i0 |
| 224 | 224 | \\ ret |
| 225 | | \\ restore |
| 225 | \\ restore |
| 226 | 226 | \\2: |
| 227 | 227 | \\ # Child process |
| 228 | 228 | ); |
| ... | ... | @@ -234,9 +234,8 @@ pub fn clone() callconv(.naked) u64 { |
| 234 | 234 | \\ mov %%g0, %%i7 |
| 235 | 235 | \\ |
| 236 | 236 | \\ # call func(arg) |
| 237 | | \\ mov %%g0, %%fp |
| 238 | 237 | \\ call %%g2 |
| 239 | | \\ mov %%g3, %%o0 |
| 238 | \\ mov %%g3, %%o0 |
| 240 | 239 | \\ # Exit |
| 241 | 240 | \\ mov 1, %%g1 // SYS_exit |
| 242 | 241 | \\ t 0x6d |