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