| author | |
| committer | |
| log | 8259d8d63145260bff4faf1d4d48b28d4061dc5a |
| tree | b226afd0bc20b5145a841d86c85d0a122d7216c2 |
| parent | e95132476dfd26b28b55f7656f03dd1ec338b509 |
2 files changed, 157 insertions(+), 1 deletions(-)
lib/std/Io/Uring.zig+34| ... | ... | @@ -872,6 +872,11 @@ pub fn init(ev: *Evented, backing_allocator: Allocator, options: InitOptions) !v |
| 872 | 872 | .fp = @intFromPtr(ev), |
| 873 | 873 | .pc = @intFromPtr(&mainIdleEntry), |
| 874 | 874 | }, |
| 875 | .riscv64 => .{ | |
| 876 | .sp = @intFromPtr(allocated_slice[idle_stack_end_offset..].ptr), | |
| 877 | .fp = @intFromPtr(ev), | |
| 878 | .pc = @intFromPtr(&mainIdleEntry), | |
| 879 | }, | |
| 875 | 880 | .x86_64 => .{ |
| 876 | 881 | .rsp = @intFromPtr(allocated_slice[idle_stack_end_offset..].ptr), |
| 877 | 882 | .rbp = @intFromPtr(ev), |
| ... | ... | @@ -1109,6 +1114,13 @@ fn mainIdleEntry() callconv(.naked) void { |
| 1109 | 1114 | : |
| 1110 | 1115 | : [mainIdle] "X" (&mainIdle), |
| 1111 | 1116 | ), |
| 1117 | .riscv64 => asm volatile ( | |
| 1118 | \\ mv a0, fp | |
| 1119 | \\ mv fp, zero | |
| 1120 | \\ tail %[mainIdle]@plt | |
| 1121 | : | |
| 1122 | : [mainIdle] "X" (&mainIdle), | |
| 1123 | ), | |
| 1112 | 1124 | .x86_64 => asm volatile ( |
| 1113 | 1125 | \\ movq %%rbp, %%rdi |
| 1114 | 1126 | \\ xor %%ebp, %%ebp |
| ... | ... | @@ -1383,6 +1395,12 @@ const AsyncClosure = struct { |
| 1383 | 1395 | : |
| 1384 | 1396 | : [call] "X" (&call), |
| 1385 | 1397 | ), |
| 1398 | .riscv64 => asm volatile ( | |
| 1399 | \\ mv a0, sp | |
| 1400 | \\ tail %[call]@plt | |
| 1401 | : | |
| 1402 | : [call] "X" (&call), | |
| 1403 | ), | |
| 1386 | 1404 | .x86_64 => asm volatile ( |
| 1387 | 1405 | \\ leaq 8(%%rsp), %%rdi |
| 1388 | 1406 | \\ jmp %[call:P] |
| ... | ... | @@ -1448,6 +1466,11 @@ fn concurrent( |
| 1448 | 1466 | .fp = 0, |
| 1449 | 1467 | .pc = @intFromPtr(&AsyncClosure.entry), |
| 1450 | 1468 | }, |
| 1469 | .riscv64 => .{ | |
| 1470 | .sp = @intFromPtr(closure), | |
| 1471 | .fp = 0, | |
| 1472 | .pc = @intFromPtr(&AsyncClosure.entry), | |
| 1473 | }, | |
| 1451 | 1474 | .x86_64 => .{ |
| 1452 | 1475 | .rsp = @intFromPtr(closure) - 8, |
| 1453 | 1476 | .rbp = 0, |
| ... | ... | @@ -1737,6 +1760,12 @@ const Group = struct { |
| 1737 | 1760 | : |
| 1738 | 1761 | : [call] "X" (&call), |
| 1739 | 1762 | ), |
| 1763 | .riscv64 => asm volatile ( | |
| 1764 | \\ mv a0, sp | |
| 1765 | \\ tail %[call]@plt | |
| 1766 | : | |
| 1767 | : [call] "X" (&call), | |
| 1768 | ), | |
| 1740 | 1769 | .x86_64 => asm volatile ( |
| 1741 | 1770 | \\ leaq 8(%%rsp), %%rdi |
| 1742 | 1771 | \\ jmp %[call:P] |
| ... | ... | @@ -1821,6 +1850,11 @@ fn groupConcurrent( |
| 1821 | 1850 | .fp = 0, |
| 1822 | 1851 | .pc = @intFromPtr(&Group.AsyncClosure.entry), |
| 1823 | 1852 | }, |
| 1853 | .riscv64 => .{ | |
| 1854 | .sp = @intFromPtr(closure), | |
| 1855 | .fp = 0, | |
| 1856 | .pc = @intFromPtr(&Group.AsyncClosure.entry), | |
| 1857 | }, | |
| 1824 | 1858 | .x86_64 => .{ |
| 1825 | 1859 | .rsp = @intFromPtr(closure) - 8, |
| 1826 | 1860 | .rbp = 0, |
lib/std/Io/fiber.zig+123-1| ... | ... | @@ -1,5 +1,5 @@ |
| 1 | 1 | pub const supported = switch (builtin.cpu.arch) { |
| 2 | .aarch64, .x86_64 => true, | |
| 2 | .aarch64, .riscv64, .x86_64 => true, | |
| 3 | 3 | else => false, |
| 4 | 4 | }; |
| 5 | 5 | |
| ... | ... | @@ -10,6 +10,11 @@ pub const Context = switch (builtin.cpu.arch) { |
| 10 | 10 | fp: u64, |
| 11 | 11 | pc: u64, |
| 12 | 12 | }, |
| 13 | .riscv64 => extern struct { | |
| 14 | sp: u64, | |
| 15 | fp: u64, | |
| 16 | pc: u64, | |
| 17 | }, | |
| 13 | 18 | .x86_64 => extern struct { |
| 14 | 19 | rsp: u64, |
| 15 | 20 | rbp: u64, |
| ... | ... | @@ -119,6 +124,123 @@ pub inline fn contextSwitch(s: *const Switch) *const Switch { |
| 119 | 124 | .ffr = true, |
| 120 | 125 | .memory = true, |
| 121 | 126 | }), |
| 127 | .riscv64 => asm volatile ( | |
| 128 | \\ ld a0, 0(a1) | |
| 129 | \\ ld a2, 8(a1) | |
| 130 | \\ lla a3, 0f | |
| 131 | \\ sd sp, 0(a0) | |
| 132 | \\ sd fp, 8(a0) | |
| 133 | \\ sd a3, 16(a0) | |
| 134 | \\ ld sp, 0(a2) | |
| 135 | \\ ld fp, 8(a2) | |
| 136 | \\ ld a3, 16(a2) | |
| 137 | \\ jr a3 | |
| 138 | \\0: | |
| 139 | : [received_message] "={a1}" (-> *const Switch), | |
| 140 | : [message_to_send] "{a1}" (s), | |
| 141 | : .{ | |
| 142 | .x1 = true, | |
| 143 | .x3 = true, | |
| 144 | .x4 = true, | |
| 145 | .x5 = true, | |
| 146 | .x6 = true, | |
| 147 | .x7 = true, | |
| 148 | .x9 = true, | |
| 149 | .x10 = true, | |
| 150 | .x11 = true, | |
| 151 | .x12 = true, | |
| 152 | .x13 = true, | |
| 153 | .x14 = true, | |
| 154 | .x15 = true, | |
| 155 | .x16 = true, | |
| 156 | .x17 = true, | |
| 157 | .x18 = true, | |
| 158 | .x19 = true, | |
| 159 | .x20 = true, | |
| 160 | .x21 = true, | |
| 161 | .x22 = true, | |
| 162 | .x23 = true, | |
| 163 | .x24 = true, | |
| 164 | .x25 = true, | |
| 165 | .x26 = true, | |
| 166 | .x27 = true, | |
| 167 | .x28 = true, | |
| 168 | .x29 = true, | |
| 169 | .x30 = true, | |
| 170 | .x31 = true, | |
| 171 | .f0 = true, | |
| 172 | .f1 = true, | |
| 173 | .f2 = true, | |
| 174 | .f3 = true, | |
| 175 | .f4 = true, | |
| 176 | .f5 = true, | |
| 177 | .f6 = true, | |
| 178 | .f7 = true, | |
| 179 | .f8 = true, | |
| 180 | .f9 = true, | |
| 181 | .f10 = true, | |
| 182 | .f11 = true, | |
| 183 | .f12 = true, | |
| 184 | .f13 = true, | |
| 185 | .f14 = true, | |
| 186 | .f15 = true, | |
| 187 | .f16 = true, | |
| 188 | .f17 = true, | |
| 189 | .f18 = true, | |
| 190 | .f19 = true, | |
| 191 | .f20 = true, | |
| 192 | .f21 = true, | |
| 193 | .f22 = true, | |
| 194 | .f23 = true, | |
| 195 | .f24 = true, | |
| 196 | .f25 = true, | |
| 197 | .f26 = true, | |
| 198 | .f27 = true, | |
| 199 | .f28 = true, | |
| 200 | .f29 = true, | |
| 201 | .f30 = true, | |
| 202 | .f31 = true, | |
| 203 | .v0 = true, | |
| 204 | .v1 = true, | |
| 205 | .v2 = true, | |
| 206 | .v3 = true, | |
| 207 | .v4 = true, | |
| 208 | .v5 = true, | |
| 209 | .v6 = true, | |
| 210 | .v7 = true, | |
| 211 | .v8 = true, | |
| 212 | .v9 = true, | |
| 213 | .v10 = true, | |
| 214 | .v11 = true, | |
| 215 | .v12 = true, | |
| 216 | .v13 = true, | |
| 217 | .v14 = true, | |
| 218 | .v15 = true, | |
| 219 | .v16 = true, | |
| 220 | .v17 = true, | |
| 221 | .v18 = true, | |
| 222 | .v19 = true, | |
| 223 | .v20 = true, | |
| 224 | .v21 = true, | |
| 225 | .v22 = true, | |
| 226 | .v23 = true, | |
| 227 | .v24 = true, | |
| 228 | .v25 = true, | |
| 229 | .v26 = true, | |
| 230 | .v27 = true, | |
| 231 | .v28 = true, | |
| 232 | .v29 = true, | |
| 233 | .v30 = true, | |
| 234 | .v31 = true, | |
| 235 | .vtype = true, | |
| 236 | .vl = true, | |
| 237 | .vxsat = true, | |
| 238 | .vxrm = true, | |
| 239 | .vcsr = true, | |
| 240 | .fflags = true, | |
| 241 | .frm = true, | |
| 242 | .memory = true, | |
| 243 | }), | |
| 122 | 244 | .x86_64 => asm volatile ( |
| 123 | 245 | \\ movq 0(%%rsi), %%rax |
| 124 | 246 | \\ movq 8(%%rsi), %%rcx |