| ... | @@ -1,5 +1,3 @@ | ... | @@ -1,5 +1,3 @@ |
| 1 | // TODO: A lot of this file is very likely wrong. | | |
| 2 | | | |
| 3 | const builtin = @import("builtin"); | 1 | const builtin = @import("builtin"); |
| 4 | const std = @import("../../std.zig"); | 2 | const std = @import("../../std.zig"); |
| 5 | const SYS = std.os.linux.SYS; | 3 | const SYS = std.os.linux.SYS; |
| ... | @@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 { | ... | @@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 { |
| 9 | \\ syscall | 7 | \\ syscall |
| 10 | \\ beq $a3, $zero, 1f | 8 | \\ beq $a3, $zero, 1f |
| 11 | \\ blez $v0, 1f | 9 | \\ blez $v0, 1f |
| 12 | \\ dsubu $v0, $zero, $v0 | 10 | \\ subu $v0, $zero, $v0 |
| 13 | \\1: | 11 | \\1: |
| 14 | : [ret] "={$2}" (-> u32), | 12 | : [ret] "={$2}" (-> u32), |
| 15 | : [number] "{$2}" (@intFromEnum(number)), | 13 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 { | ... | @@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 { |
| 21 | \\ syscall | 19 | \\ syscall |
| 22 | \\ beq $a3, $zero, 1f | 20 | \\ beq $a3, $zero, 1f |
| 23 | \\ blez $v0, 2f | 21 | \\ blez $v0, 2f |
| 24 | \\ dsubu $v0, $zero, $v0 | 22 | \\ subu $v0, $zero, $v0 |
| 25 | \\ b 2f | 23 | \\ b 2f |
| 26 | \\1: | 24 | \\1: |
| 27 | \\ sw $v0, 0($a0) | 25 | \\ sw $v0, 0($a0) |
| ... | @@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 { | ... | @@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 { |
| 38 | \\ syscall | 36 | \\ syscall |
| 39 | \\ beq $a3, $zero, 1f | 37 | \\ beq $a3, $zero, 1f |
| 40 | \\ blez $v0, 1f | 38 | \\ blez $v0, 1f |
| 41 | \\ dsubu $v0, $zero, $v0 | 39 | \\ subu $v0, $zero, $v0 |
| 42 | \\1: | 40 | \\1: |
| 43 | : [ret] "={$2}" (-> u32), | 41 | : [ret] "={$2}" (-> u32), |
| 44 | : [number] "{$2}" (@intFromEnum(number)), | 42 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 { | ... | @@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 { |
| 51 | \\ syscall | 49 | \\ syscall |
| 52 | \\ beq $a3, $zero, 1f | 50 | \\ beq $a3, $zero, 1f |
| 53 | \\ blez $v0, 1f | 51 | \\ blez $v0, 1f |
| 54 | \\ dsubu $v0, $zero, $v0 | 52 | \\ subu $v0, $zero, $v0 |
| 55 | \\1: | 53 | \\1: |
| 56 | : [ret] "={$2}" (-> u32), | 54 | : [ret] "={$2}" (-> u32), |
| 57 | : [number] "{$2}" (@intFromEnum(number)), | 55 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 { | ... | @@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 { |
| 65 | \\ syscall | 63 | \\ syscall |
| 66 | \\ beq $a3, $zero, 1f | 64 | \\ beq $a3, $zero, 1f |
| 67 | \\ blez $v0, 1f | 65 | \\ blez $v0, 1f |
| 68 | \\ dsubu $v0, $zero, $v0 | 66 | \\ subu $v0, $zero, $v0 |
| 69 | \\1: | 67 | \\1: |
| 70 | : [ret] "={$2}" (-> u32), | 68 | : [ret] "={$2}" (-> u32), |
| 71 | : [number] "{$2}" (@intFromEnum(number)), | 69 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 { | ... | @@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 { |
| 80 | \\ syscall | 78 | \\ syscall |
| 81 | \\ beq $a3, $zero, 1f | 79 | \\ beq $a3, $zero, 1f |
| 82 | \\ blez $v0, 1f | 80 | \\ blez $v0, 1f |
| 83 | \\ dsubu $v0, $zero, $v0 | 81 | \\ subu $v0, $zero, $v0 |
| 84 | \\1: | 82 | \\1: |
| 85 | : [ret] "={$2}" (-> u32), | 83 | : [ret] "={$2}" (-> u32), |
| 86 | : [number] "{$2}" (@intFromEnum(number)), | 84 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u | ... | @@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u |
| 96 | \\ syscall | 94 | \\ syscall |
| 97 | \\ beq $a3, $zero, 1f | 95 | \\ beq $a3, $zero, 1f |
| 98 | \\ blez $v0, 1f | 96 | \\ blez $v0, 1f |
| 99 | \\ dsubu $v0, $zero, $v0 | 97 | \\ subu $v0, $zero, $v0 |
| 100 | \\1: | 98 | \\1: |
| 101 | : [ret] "={$2}" (-> u32), | 99 | : [ret] "={$2}" (-> u32), |
| 102 | : [number] "{$2}" (@intFromEnum(number)), | 100 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -121,7 +119,7 @@ pub fn syscall6( | ... | @@ -121,7 +119,7 @@ pub fn syscall6( |
| 121 | \\ syscall | 119 | \\ syscall |
| 122 | \\ beq $a3, $zero, 1f | 120 | \\ beq $a3, $zero, 1f |
| 123 | \\ blez $v0, 1f | 121 | \\ blez $v0, 1f |
| 124 | \\ dsubu $v0, $zero, $v0 | 122 | \\ subu $v0, $zero, $v0 |
| 125 | \\1: | 123 | \\1: |
| 126 | : [ret] "={$2}" (-> u32), | 124 | : [ret] "={$2}" (-> u32), |
| 127 | : [number] "{$2}" (@intFromEnum(number)), | 125 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -148,7 +146,7 @@ pub fn syscall7( | ... | @@ -148,7 +146,7 @@ pub fn syscall7( |
| 148 | \\ syscall | 146 | \\ syscall |
| 149 | \\ beq $a3, $zero, 1f | 147 | \\ beq $a3, $zero, 1f |
| 150 | \\ blez $v0, 1f | 148 | \\ blez $v0, 1f |
| 151 | \\ dsubu $v0, $zero, $v0 | 149 | \\ subu $v0, $zero, $v0 |
| 152 | \\1: | 150 | \\1: |
| 153 | : [ret] "={$2}" (-> u32), | 151 | : [ret] "={$2}" (-> u32), |
| 154 | : [number] "{$2}" (@intFromEnum(number)), | 152 | : [number] "{$2}" (@intFromEnum(number)), |
| ... | @@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 { | ... | @@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 { |
| 171 | asm volatile ( | 169 | asm volatile ( |
| 172 | \\ # Save function pointer and argument pointer on new thread stack | 170 | \\ # Save function pointer and argument pointer on new thread stack |
| 173 | \\ and $a1, $a1, -16 | 171 | \\ and $a1, $a1, -16 |
| 174 | \\ dsubu $a1, $a1, 16 | 172 | \\ subu $a1, $a1, 16 |
| 175 | \\ sd $a0, 0($a1) | 173 | \\ sw $a0, 0($a1) |
| 176 | \\ sd $a3, 8($a1) | 174 | \\ sw $a3, 4($a1) |
| 177 | \\ | 175 | \\ |
| 178 | \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid) | 176 | \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid) |
| 179 | \\ move $a0, $a2 | 177 | \\ move $a0, $a2 |
| 180 | \\ move $a2, $a4 | 178 | \\ move $a2, $a4 |
| 181 | \\ move $a3, $a5 | 179 | \\ move $a3, $a5 |
| 182 | \\ move $a4, $a6 | 180 | \\ move $a4, $a6 |
| 183 | \\ li $v0, 5055 # SYS_clone | 181 | \\ li $v0, 6055 # SYS_clone |
| 184 | \\ syscall | 182 | \\ syscall |
| 185 | \\ beq $a3, $zero, 1f | 183 | \\ beq $a3, $zero, 1f |
| 186 | \\ blez $v0, 2f | 184 | \\ blez $v0, 2f |
| 187 | \\ dsubu $v0, $zero, $v0 | 185 | \\ subu $v0, $zero, $v0 |
| 188 | \\ b 2f | 186 | \\ b 2f |
| 189 | \\1: | 187 | \\1: |
| 190 | \\ beq $v0, $zero, 3f | 188 | \\ beq $v0, $zero, 3f |
| ... | @@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 { | ... | @@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 { |
| 200 | \\ move $ra, $zero | 198 | \\ move $ra, $zero |
| 201 | \\ | 199 | \\ |
| 202 | \\ ld $t9, 0($sp) | 200 | \\ ld $t9, 0($sp) |
| 203 | \\ ld $a0, 8($sp) | 201 | \\ ld $a0, 4($sp) |
| 204 | \\ jalr $t9 | 202 | \\ jalr $t9 |
| 205 | \\ | 203 | \\ |
| 206 | \\ move $a0, $v0 | 204 | \\ move $a0, $v0 |
| 207 | \\ li $v0, 5058 # SYS_exit | 205 | \\ li $v0, 6058 # SYS_exit |
| 208 | \\ syscall | 206 | \\ syscall |
| 209 | ); | 207 | ); |
| 210 | } | 208 | } |