authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-04-16 16:39:31-07:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-05-11 02:17:24-07:00
loga30af172e8dc360cb0a71a5c4dfd904120555715
treee43bb564776492b6fa18187b4a379a82be5cdbb1
parenta615fbc1f8330e455d02fdda5c6de257b0cde7f4

riscv: math progress


32 files changed, 71 insertions(+), 189 deletions(-)

src/arch/riscv64/CodeGen.zig+64-63
......@@ -11,6 +11,7 @@ const Type = @import("../../type.zig").Type;
1111const Value = @import("../../Value.zig");
1212const link = @import("../../link.zig");
1313const Module = @import("../../Module.zig");
14const Package = @import("../../Package.zig");
1415const InternPool = @import("../../InternPool.zig");
1516const Compilation = @import("../../Compilation.zig");
1617const ErrorMsg = Module.ErrorMsg;
......@@ -54,6 +55,7 @@ const RegisterView = enum(u1) {
5455
5556gpa: Allocator,
5657air: Air,
58mod: *Package.Module,
5759liveness: Liveness,
5860bin_file: *link.File,
5961target: *const std.Target,
......@@ -724,6 +726,7 @@ pub fn generate(
724726 var function = Self{
725727 .gpa = gpa,
726728 .air = air,
729 .mod = mod,
727730 .liveness = liveness,
728731 .target = target,
729732 .bin_file = bin_file,
......@@ -2138,82 +2141,78 @@ fn airAddWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
21382141 const lhs_ty = self.typeOf(extra.lhs);
21392142 const rhs_ty = self.typeOf(extra.rhs);
21402143
2141 const add_result_mcv = try self.binOp(.add, lhs, lhs_ty, rhs, rhs_ty);
2142 const add_result_lock = self.register_manager.lockRegAssumeUnused(add_result_mcv.register);
2143 defer self.register_manager.unlockReg(add_result_lock);
2144
2145 const tuple_ty = self.typeOfIndex(inst);
21462144 const int_info = lhs_ty.intInfo(zcu);
21472145
2148 // TODO: optimization, set this to true. needs the other struct access stuff to support
2149 // accessing registers.
2146 const tuple_ty = self.typeOfIndex(inst);
21502147 const result_mcv = try self.allocRegOrMem(inst, false);
21512148 const offset = result_mcv.load_frame;
21522149
2153 try self.genSetStack(
2154 lhs_ty,
2155 .{
2156 .index = offset.index,
2157 .off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(0, zcu))),
2158 },
2159 add_result_mcv,
2160 );
2161
21622150 if (int_info.bits >= 8 and math.isPowerOfTwo(int_info.bits)) {
2163 if (int_info.signedness == .unsigned) {
2164 switch (int_info.bits) {
2165 1...8 => {
2166 const max_val = std.math.pow(u16, 2, int_info.bits) - 1;
2151 const add_result = try self.binOp(.add, lhs, lhs_ty, rhs, rhs_ty);
2152 const add_result_reg = try self.copyToTmpRegister(lhs_ty, add_result);
2153 const add_result_reg_lock = self.register_manager.lockRegAssumeUnused(add_result_reg);
2154 defer self.register_manager.unlockReg(add_result_reg_lock);
21672155
2168 const overflow_reg, const overflow_lock = try self.allocReg();
2169 defer self.register_manager.unlockReg(overflow_lock);
2156 const shift_amount: u6 = @intCast(Type.usize.bitSize(zcu) - int_info.bits);
21702157
2171 const add_reg, const add_lock = blk: {
2172 if (add_result_mcv == .register) break :blk .{ add_result_mcv.register, null };
2158 const shift_reg, const shift_lock = try self.allocReg();
2159 defer self.register_manager.unlockReg(shift_lock);
21732160
2174 const add_reg, const add_lock = try self.allocReg();
2175 try self.genSetReg(lhs_ty, add_reg, add_result_mcv);
2176 break :blk .{ add_reg, add_lock };
2177 };
2178 defer if (add_lock) |lock| self.register_manager.unlockReg(lock);
2179
2180 _ = try self.addInst(.{
2181 .tag = .andi,
2182 .ops = .rri,
2183 .data = .{ .i_type = .{
2184 .rd = overflow_reg,
2185 .rs1 = add_reg,
2186 .imm12 = Immediate.s(max_val),
2187 } },
2188 });
2189
2190 const overflow_mcv = try self.binOp(
2191 .cmp_neq,
2192 .{ .register = overflow_reg },
2193 lhs_ty,
2194 .{ .register = add_reg },
2195 lhs_ty,
2196 );
2197
2198 try self.genSetStack(
2199 Type.u1,
2200 .{
2201 .index = offset.index,
2202 .off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(1, zcu))),
2203 },
2204 overflow_mcv,
2205 );
2161 _ = try self.addInst(.{
2162 .tag = .slli,
2163 .ops = .rri,
2164 .data = .{
2165 .i_type = .{
2166 .rd = shift_reg,
2167 .rs1 = add_result_reg,
2168 .imm12 = Immediate.s(shift_amount),
2169 },
2170 },
2171 });
22062172
2207 break :result result_mcv;
2173 _ = try self.addInst(.{
2174 .tag = if (int_info.signedness == .unsigned) .srli else .srai,
2175 .ops = .rri,
2176 .data = .{
2177 .i_type = .{
2178 .rd = shift_reg,
2179 .rs1 = shift_reg,
2180 .imm12 = Immediate.s(shift_amount),
22082181 },
2182 },
2183 });
22092184
2210 else => return self.fail("TODO: addWithOverflow check for size {d}", .{int_info.bits}),
2211 }
2212 } else {
2213 return self.fail("TODO: airAddWithOverFlow calculate carry for signed addition", .{});
2214 }
2185 const add_result_frame: FrameAddr = .{
2186 .index = offset.index,
2187 .off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(0, zcu))),
2188 };
2189 try self.genSetStack(
2190 lhs_ty,
2191 add_result_frame,
2192 add_result,
2193 );
2194
2195 const overflow_mcv = try self.binOp(
2196 .cmp_neq,
2197 .{ .register = shift_reg },
2198 lhs_ty,
2199 .{ .register = add_result_reg },
2200 lhs_ty,
2201 );
2202
2203 const overflow_frame: FrameAddr = .{
2204 .index = offset.index,
2205 .off = offset.off + @as(i32, @intCast(tuple_ty.structFieldOffset(1, zcu))),
2206 };
2207 try self.genSetStack(
2208 Type.u1,
2209 overflow_frame,
2210 overflow_mcv,
2211 );
2212
2213 break :result result_mcv;
22152214 } else {
2216 return self.fail("TODO: airAddWithOverflow with < 8 bits or non-pow of 2", .{});
2215 return self.fail("TODO: less than 8 bit or non-pow 2 addition", .{});
22172216 }
22182217 };
22192218
......@@ -3500,9 +3499,11 @@ fn genCall(
35003499 if (self.bin_file.cast(link.File.Elf)) |elf_file| {
35013500 const sym_index = try elf_file.zigObjectPtr().?.getOrCreateMetadataForDecl(elf_file, func.owner_decl);
35023501 const sym = elf_file.symbol(sym_index);
3502
35033503 _ = try sym.getOrCreateZigGotEntry(sym_index, elf_file);
35043504 const got_addr = sym.zigGotAddress(elf_file);
35053505 try self.genSetReg(Type.usize, .ra, .{ .memory = got_addr });
3506
35063507 _ = try self.addInst(.{
35073508 .tag = .jalr,
35083509 .ops = .rri,
src/arch/riscv64/Encoding.zig+5-1
......@@ -16,6 +16,7 @@ pub const Mnemonic = enum {
1616 andi,
1717 slli,
1818 srli,
19 srai,
1920
2021 addi,
2122 jalr,
......@@ -69,6 +70,7 @@ pub const Mnemonic = enum {
6970 .jalr => .{ .opcode = 0b1100111, .funct3 = 0b000, .funct7 = null },
7071 .slli => .{ .opcode = 0b0010011, .funct3 = 0b001, .funct7 = null },
7172 .srli => .{ .opcode = 0b0010011, .funct3 = 0b101, .funct7 = null },
73 .srai => .{ .opcode = 0b0010011, .funct3 = 0b101, .funct7 = null, .offset = 1 << 10 },
7274
7375 .lui => .{ .opcode = 0b0110111, .funct3 = null, .funct7 = null },
7476
......@@ -123,6 +125,7 @@ pub const InstEnc = enum {
123125 .andi,
124126 .slli,
125127 .srli,
128 .srai,
126129 => .I,
127130
128131 .lui,
......@@ -299,7 +302,7 @@ pub const Data = union(InstEnc) {
299302 .I = .{
300303 .rd = ops[0].reg.id(),
301304 .rs1 = ops[1].reg.id(),
302 .imm0_11 = ops[2].imm.asBits(u12),
305 .imm0_11 = ops[2].imm.asBits(u12) + enc.offset,
303306
304307 .opcode = enc.opcode,
305308 .funct3 = enc.funct3.?,
......@@ -374,6 +377,7 @@ const Enc = struct {
374377 opcode: u7,
375378 funct3: ?u3,
376379 funct7: ?u7,
380 offset: u12 = 0,
377381};
378382
379383fn verifyOps(mnem: Mnemonic, ops: []const Operand) bool {
src/arch/riscv64/Mir.zig+2
......@@ -53,6 +53,8 @@ pub const Inst = struct {
5353 srli,
5454 /// Immediate Logical Left Shift, uses i_type payload
5555 slli,
56 /// Immediate Arithmetic Right Shift, uses i_type payload.
57 srai,
5658 /// Register Logical Left Shift, uses r_type payload
5759 sllw,
5860 /// Register Logical Right Shit, uses r_type payload
test/behavior/align.zig-2
......@@ -44,7 +44,6 @@ test "default alignment allows unspecified in type syntax" {
4444}
4545
4646test "implicitly decreasing pointer alignment" {
47 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
4847 const a: u32 align(4) = 3;
4948 const b: u32 align(8) = 4;
5049 try expect(addUnaligned(&a, &b) == 7);
......@@ -227,7 +226,6 @@ fn fnWithAlignedStack() i32 {
227226}
228227
229228test "implicitly decreasing slice alignment" {
230 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
231229 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
232230 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
233231
test/behavior/array.zig-4
......@@ -203,7 +203,6 @@ test "nested arrays of strings" {
203203 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
204204 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
205205 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
206 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
207206
208207 const array_of_strings = [_][]const u8{ "hello", "this", "is", "my", "thing" };
209208 for (array_of_strings, 0..) |s, i| {
......@@ -329,7 +328,6 @@ test "read/write through global variable array of struct fields initialized via
329328 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
330329 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
331330 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
332 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
333331
334332 const S = struct {
335333 fn doTheTest() !void {
......@@ -738,8 +736,6 @@ test "pointer to array has ptr field" {
738736}
739737
740738test "discarded array init preserves result location" {
741 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
742
743739 const S = struct {
744740 fn f(p: *u32) u16 {
745741 p.* += 1;
test/behavior/basic.zig-19
......@@ -85,8 +85,6 @@ test "type equality" {
8585}
8686
8787test "pointer dereferencing" {
88 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
89
9088 var x = @as(i32, 3);
9189 const y = &x;
9290
......@@ -138,21 +136,18 @@ fn first4KeysOfHomeRow() []const u8 {
138136
139137test "return string from function" {
140138 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
141 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
142139
143140 try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
144141}
145142
146143test "hex escape" {
147144 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
148 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
149145
150146 try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
151147}
152148
153149test "multiline string" {
154150 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
155 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
156151
157152 const s1 =
158153 \\one
......@@ -165,7 +160,6 @@ test "multiline string" {
165160
166161test "multiline string comments at start" {
167162 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
168 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
169163
170164 const s1 =
171165 //\\one
......@@ -178,7 +172,6 @@ test "multiline string comments at start" {
178172
179173test "multiline string comments at end" {
180174 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
181 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
182175
183176 const s1 =
184177 \\one
......@@ -191,7 +184,6 @@ test "multiline string comments at end" {
191184
192185test "multiline string comments in middle" {
193186 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
194 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
195187
196188 const s1 =
197189 \\one
......@@ -204,7 +196,6 @@ test "multiline string comments in middle" {
204196
205197test "multiline string comments at multiple places" {
206198 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
207 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
208199
209200 const s1 =
210201 \\one
......@@ -218,14 +209,11 @@ test "multiline string comments at multiple places" {
218209}
219210
220211test "string concatenation simple" {
221 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
222
223212 try expect(mem.eql(u8, "OK" ++ " IT " ++ "WORKED", "OK IT WORKED"));
224213}
225214
226215test "array mult operator" {
227216 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
228 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
229217
230218 try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
231219}
......@@ -308,8 +296,6 @@ test "function closes over local const" {
308296}
309297
310298test "volatile load and store" {
311 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
312
313299 var number: i32 = 1234;
314300 const ptr = @as(*volatile i32, &number);
315301 ptr.* += 1;
......@@ -326,7 +312,6 @@ fn fB() []const u8 {
326312test "call function pointer in struct" {
327313 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
328314 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
329 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
330315
331316 try expect(mem.eql(u8, f3(true), "a"));
332317 try expect(mem.eql(u8, f3(false), "b"));
......@@ -350,7 +335,6 @@ const FnPtrWrapper = struct {
350335
351336test "const ptr from var variable" {
352337 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
353 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
354338
355339 var x: u64 = undefined;
356340 var y: u64 = undefined;
......@@ -370,7 +354,6 @@ test "call result of if else expression" {
370354 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
371355 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
372356 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
373 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
374357
375358 try expect(mem.eql(u8, f2(true), "a"));
376359 try expect(mem.eql(u8, f2(false), "b"));
......@@ -479,7 +462,6 @@ fn nine() u8 {
479462test "struct inside function" {
480463 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
481464 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
482 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
483465
484466 try testStructInFn();
485467 try comptime testStructInFn();
......@@ -1219,7 +1201,6 @@ test "integer compare" {
12191201
12201202test "reference to inferred local variable works as expected" {
12211203 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1222 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
12231204
12241205 const Crasher = struct {
12251206 lets_crash: u64 = 0,
test/behavior/bitcast.zig-1
......@@ -520,7 +520,6 @@ test "@bitCast of packed struct of bools all false" {
520520 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
521521 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
522522 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
523 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
524523
525524 const P = packed struct {
526525 b0: bool,
test/behavior/call.zig-2
......@@ -572,8 +572,6 @@ test "call function pointer in comptime field" {
572572}
573573
574574test "generic function pointer can be called" {
575 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
576
577575 const S = struct {
578576 var ok = false;
579577 fn foo(x: anytype) void {
test/behavior/cast.zig-7
......@@ -400,7 +400,6 @@ test "cast from ?[*]T to ??[*]T" {
400400test "peer type unsigned int to signed" {
401401 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
402402 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
403 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
404403
405404 var w: u31 = 5;
406405 var x: u8 = 7;
......@@ -443,7 +442,6 @@ test "peer resolve array and const slice" {
443442 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
444443 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
445444 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
446 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
447445
448446 try testPeerResolveArrayConstSlice(true);
449447 try comptime testPeerResolveArrayConstSlice(true);
......@@ -535,7 +533,6 @@ fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 {
535533test "implicit cast from *const [N]T to []const T" {
536534 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
537535 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
539536
540537 try testCastConstArrayRefToConstSlice();
541538 try comptime testCastConstArrayRefToConstSlice();
......@@ -718,7 +715,6 @@ test "peer type resolution: error set supersets" {
718715 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
719716 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
720717 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
721 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
722718
723719 const a: error{ One, Two } = undefined;
724720 const b: error{One} = undefined;
......@@ -748,7 +744,6 @@ test "peer type resolution: disjoint error sets" {
748744 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
749745 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
750746 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
751 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
752747
753748 const a: error{ One, Two } = undefined;
754749 const b: error{Three} = undefined;
......@@ -813,7 +808,6 @@ test "peer type resolution: error union after non-error" {
813808 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
814809 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
815810 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
816 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
817811
818812 const a: u32 = undefined;
819813 const b: error{ One, Two }!u32 = undefined;
......@@ -1393,7 +1387,6 @@ test "cast between *[N]void and []void" {
13931387test "peer resolve arrays of different size to const slice" {
13941388 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
13951389 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1396 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
13971390
13981391 try expect(mem.eql(u8, boolToStr(true), "true"));
13991392 try expect(mem.eql(u8, boolToStr(false), "false"));
test/behavior/decltest.zig-2
......@@ -5,7 +5,5 @@ pub fn the_add_function(a: u32, b: u32) u32 {
55}
66
77test the_add_function {
8 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
9
108 if (the_add_function(1, 2) != 3) unreachable;
119}
test/behavior/defer.zig-5
......@@ -5,8 +5,6 @@ const expectEqual = std.testing.expectEqual;
55const expectError = std.testing.expectError;
66
77test "break and continue inside loop inside defer expression" {
8 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
9
108 testBreakContInDefer(10);
119 comptime testBreakContInDefer(10);
1210}
......@@ -23,8 +21,6 @@ fn testBreakContInDefer(x: usize) void {
2321}
2422
2523test "defer and labeled break" {
26 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
27
2824 var i = @as(usize, 0);
2925
3026 blk: {
......@@ -38,7 +34,6 @@ test "defer and labeled break" {
3834test "errdefer does not apply to fn inside fn" {
3935 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
4036 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
41 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
4237
4338 if (testNestedFnErrDefer()) |_| @panic("expected error") else |e| try expect(e == error.Bad);
4439}
test/behavior/enum.zig-1
......@@ -1055,7 +1055,6 @@ test "tag name with assigned enum values" {
10551055test "@tagName on enum literals" {
10561056 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
10571057 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1058 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
10591058
10601059 try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
10611060 comptime assert(mem.eql(u8, @tagName(.FooBar), "FooBar"));
test/behavior/eval.zig-12
......@@ -306,8 +306,6 @@ fn performFn(comptime prefix_char: u8, start_value: i32) i32 {
306306}
307307
308308test "comptime iterate over fn ptr list" {
309 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
310
311309 try expect(performFn('t', 1) == 6);
312310 try expect(performFn('o', 0) == 1);
313311 try expect(performFn('w', 99) == 99);
......@@ -413,8 +411,6 @@ var st_init_str_foo = StInitStrFoo{
413411};
414412
415413test "inline for with same type but different values" {
416 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
417
418414 var res: usize = 0;
419415 inline for ([_]type{ [2]u8, [1]u8, [2]u8 }) |T| {
420416 var a: T = undefined;
......@@ -544,7 +540,6 @@ test "runtime 128 bit integer division" {
544540test "@tagName of @typeInfo" {
545541 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
546542 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
547 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
548543
549544 const str = @tagName(@typeInfo(u8));
550545 try expect(std.mem.eql(u8, str, "Int"));
......@@ -1007,7 +1002,6 @@ test "closure capture type of runtime-known var" {
10071002
10081003test "comptime break passing through runtime condition converted to runtime break" {
10091004 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1010 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
10111005
10121006 const S = struct {
10131007 fn doTheTest() !void {
......@@ -1042,7 +1036,6 @@ test "comptime break to outer loop passing through runtime condition converted t
10421036 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
10431037 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10441038 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1045 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
10461039
10471040 const S = struct {
10481041 fn doTheTest() !void {
......@@ -1266,7 +1259,6 @@ test "pass pointer to field of comptime-only type as a runtime parameter" {
12661259 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
12671260 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
12681261 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1269 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
12701262
12711263 const S = struct {
12721264 const Mixed = struct {
......@@ -1508,7 +1500,6 @@ test "continue nested inline for loop in named block expr" {
15081500
15091501test "x and false is comptime-known false" {
15101502 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1511 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
15121503
15131504 const T = struct {
15141505 var x: u32 = 0;
......@@ -1536,7 +1527,6 @@ test "x and false is comptime-known false" {
15361527
15371528test "x or true is comptime-known true" {
15381529 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1539 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
15401530
15411531 const T = struct {
15421532 var x: u32 = 0;
......@@ -1598,8 +1588,6 @@ test "comptime function turns function value to function pointer" {
15981588}
15991589
16001590test "container level const and var have unique addresses" {
1601 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1602
16031591 const S = struct {
16041592 x: i32,
16051593 y: i32,
test/behavior/export_keyword.zig-1
......@@ -26,7 +26,6 @@ const PackedUnion = packed union {
2626test "packed struct, enum, union parameters in extern function" {
2727 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
2828 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
29 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
3029
3130 testPackedStuff(&(PackedStruct{
3231 .a = 1,
test/behavior/fn.zig-9
......@@ -6,8 +6,6 @@ const expect = testing.expect;
66const expectEqual = testing.expectEqual;
77
88test "params" {
9 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
10
119 try expect(testParamsAdd(22, 11) == 33);
1210}
1311fn testParamsAdd(a: i32, b: i32) i32 {
......@@ -15,8 +13,6 @@ fn testParamsAdd(a: i32, b: i32) i32 {
1513}
1614
1715test "local variables" {
18 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
19
2016 testLocVars(2);
2117}
2218fn testLocVars(b: i32) void {
......@@ -25,8 +21,6 @@ fn testLocVars(b: i32) void {
2521}
2622
2723test "mutable local variables" {
28 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
29
3024 var zero: i32 = 0;
3125 _ = &zero;
3226 try expect(zero == 0);
......@@ -325,7 +319,6 @@ test "function pointers" {
325319 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
326320 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
327321 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
328 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
329322
330323 const fns = [_]*const @TypeOf(fn1){
331324 &fn1,
......@@ -403,8 +396,6 @@ test "function call with anon list literal - 2D" {
403396}
404397
405398test "ability to give comptime types and non comptime types to same parameter" {
406 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
407
408399 const S = struct {
409400 fn doTheTest() !void {
410401 var x: i32 = 1;
test/behavior/for.zig-7
......@@ -7,7 +7,6 @@ const mem = std.mem;
77test "continue in for loop" {
88 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
99 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
10 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1110
1211 const array = [_]i32{ 1, 2, 3, 4, 5 };
1312 var sum: i32 = 0;
......@@ -22,8 +21,6 @@ test "continue in for loop" {
2221}
2322
2423test "break from outer for loop" {
25 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
26
2724 try testBreakOuter();
2825 try comptime testBreakOuter();
2926}
......@@ -41,8 +38,6 @@ fn testBreakOuter() !void {
4138}
4239
4340test "continue outer for loop" {
44 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
45
4641 try testContinueOuter();
4742 try comptime testContinueOuter();
4843}
......@@ -263,7 +258,6 @@ test "for loop with else branch" {
263258test "count over fixed range" {
264259 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
265260 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
266 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
267261
268262 var sum: usize = 0;
269263 for (0..6) |i| {
......@@ -276,7 +270,6 @@ test "count over fixed range" {
276270test "two counters" {
277271 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
278272 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
279 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
280273
281274 var sum: usize = 0;
282275 for (0..10, 10..20) |i, j| {
test/behavior/generics.zig-5
......@@ -5,8 +5,6 @@ const expect = testing.expect;
55const expectEqual = testing.expectEqual;
66
77test "one param, explicit comptime" {
8 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
9
108 var x: usize = 0;
119 x += checkSize(i32);
1210 x += checkSize(bool);
......@@ -151,8 +149,6 @@ fn GenericDataThing(comptime count: isize) type {
151149}
152150
153151test "use generic param in generic param" {
154 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
155
156152 try expect(aGenericFn(i32, 3, 4) == 7);
157153}
158154fn aGenericFn(comptime T: type, comptime a: T, b: T) T {
......@@ -258,7 +254,6 @@ test "generic function instantiation turns into comptime call" {
258254 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
259255 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
260256 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
261 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
262257
263258 const S = struct {
264259 fn doTheTest() !void {
test/behavior/globals.zig-1
......@@ -50,7 +50,6 @@ test "global loads can affect liveness" {
5050 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
5151 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
5252 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
53 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
5453
5554 const S = struct {
5655 const ByRef = struct {
test/behavior/packed-struct.zig-1
......@@ -889,7 +889,6 @@ test "runtime init of unnamed packed struct type" {
889889 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
890890 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
891891 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
892 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
893892
894893 var z: u8 = 123;
895894 _ = &z;
test/behavior/pointers.zig-3
......@@ -6,8 +6,6 @@ const expect = testing.expect;
66const expectError = testing.expectError;
77
88test "dereference pointer" {
9 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
10
119 try comptime testDerefPtr();
1210 try testDerefPtr();
1311}
......@@ -55,7 +53,6 @@ fn PtrOf(comptime T: type) type {
5553
5654test "implicit cast single item pointer to C pointer and back" {
5755 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
58 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
5956
6057 var y: u8 = 11;
6158 const x: [*c]u8 = &y;
test/behavior/ptrcast.zig-1
......@@ -176,7 +176,6 @@ test "reinterpret struct field at comptime" {
176176 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
177177 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
178178 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
179 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
180179
181180 const numNative = comptime Bytes.init(0x12345678);
182181 if (native_endian != .little) {
test/behavior/sizeof_and_typeof.zig-4
......@@ -144,8 +144,6 @@ test "@sizeOf(T) == 0 doesn't force resolving struct size" {
144144}
145145
146146test "@TypeOf() has no runtime side effects" {
147 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
148
149147 const S = struct {
150148 fn foo(comptime T: type, ptr: *T) T {
151149 ptr.* += 1;
......@@ -438,8 +436,6 @@ test "Extern function calls, dereferences and field access in @TypeOf" {
438436}
439437
440438test "@sizeOf struct is resolved when used as operand of slicing" {
441 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
442
443439 const dummy = struct {};
444440 const S = struct {
445441 var buf: [1]u8 = undefined;
test/behavior/slice.zig-2
......@@ -176,7 +176,6 @@ test "comptime pointer cast array and then slice" {
176176test "slicing zero length array" {
177177 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
178178 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
179 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
180179
181180 const s1 = ""[0..];
182181 const s2 = ([_]u32{})[0..];
......@@ -738,7 +737,6 @@ test "array mult of slice gives ptr to array" {
738737
739738test "slice bounds in comptime concatenation" {
740739 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
741 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
742740
743741 const bs = comptime blk: {
744742 const b = "........1........";
test/behavior/string_literals.zig-2
......@@ -8,7 +8,6 @@ const ptr_tag_name: [*:0]const u8 = tag_name;
88test "@tagName() returns a string literal" {
99 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1010 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
11 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1211
1312 try std.testing.expect(*const [13:0]u8 == @TypeOf(tag_name));
1413 try std.testing.expect(std.mem.eql(u8, "TestEnumValue", tag_name));
......@@ -22,7 +21,6 @@ const ptr_error_name: [*:0]const u8 = error_name;
2221test "@errorName() returns a string literal" {
2322 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
2423 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
25 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
2624
2725 try std.testing.expect(*const [13:0]u8 == @TypeOf(error_name));
2826 try std.testing.expect(std.mem.eql(u8, "TestErrorCode", error_name));
test/behavior/struct.zig-5
......@@ -12,7 +12,6 @@ top_level_field: i32,
1212test "top level fields" {
1313 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1414 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
15 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1615
1716 var instance = @This(){
1817 .top_level_field = 1234,
......@@ -125,8 +124,6 @@ test "struct byval assign" {
125124}
126125
127126test "call struct static method" {
128 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
129
130127 const result = StructWithNoFields.add(3, 4);
131128 try expect(result == 7);
132129}
......@@ -759,7 +756,6 @@ test "packed struct with u0 field access" {
759756test "access to global struct fields" {
760757 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
761758 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
762 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
763759
764760 g_foo.bar.value = 42;
765761 try expect(g_foo.bar.value == 42);
......@@ -2134,7 +2130,6 @@ test "struct field default value is a call" {
21342130
21352131test "aggregate initializers should allow initializing comptime fields, verifying equality" {
21362132 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
2137 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
21382133
21392134 var x: u32 = 15;
21402135 _ = &x;
test/behavior/this.zig-2
......@@ -21,8 +21,6 @@ fn add(x: i32, y: i32) i32 {
2121}
2222
2323test "this refer to module call private fn" {
24 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
25
2624 try expect(module.add(1, 2) == 3);
2725}
2826
test/behavior/tuple.zig-2
......@@ -258,7 +258,6 @@ test "offsetOf anon struct" {
258258test "initializing tuple with mixed comptime-runtime fields" {
259259 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
260260 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
261 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
262261
263262 var x: u32 = 15;
264263 _ = &x;
......@@ -271,7 +270,6 @@ test "initializing tuple with mixed comptime-runtime fields" {
271270test "initializing anon struct with mixed comptime-runtime fields" {
272271 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
273272 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
274 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
275273
276274 var x: u32 = 15;
277275 _ = &x;
test/behavior/type_info.zig-7
......@@ -161,7 +161,6 @@ test "type info: error set, error union info, anyerror" {
161161 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
162162 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
163163 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
164 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
165164
166165 try testErrorSet();
167166 try comptime testErrorSet();
......@@ -193,7 +192,6 @@ test "type info: error set single value" {
193192 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
194193 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
195194 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
196 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
197195
198196 const TestSet = error.One;
199197
......@@ -207,7 +205,6 @@ test "type info: error set merged" {
207205 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
208206 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
209207 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
210 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
211208
212209 const TestSet = error{ One, Two } || error{Three};
213210
......@@ -223,7 +220,6 @@ test "type info: enum info" {
223220 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
224221 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
225222 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
226 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
227223
228224 try testEnum();
229225 try comptime testEnum();
......@@ -286,7 +282,6 @@ fn testUnion() !void {
286282
287283test "type info: struct info" {
288284 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
289 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
290285
291286 try testStruct();
292287 try comptime testStruct();
......@@ -535,7 +530,6 @@ test "type info for async frames" {
535530
536531test "Declarations are returned in declaration order" {
537532 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
539533
540534 const S = struct {
541535 pub const a = 1;
......@@ -558,7 +552,6 @@ test "Struct.is_tuple for anon list literal" {
558552
559553test "Struct.is_tuple for anon struct literal" {
560554 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
561 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
562555
563556 const info = @typeInfo(@TypeOf(.{ .a = 0 }));
564557 try expect(!info.Struct.is_tuple);
test/behavior/undefined.zig-3
......@@ -48,7 +48,6 @@ test "assign undefined to struct" {
4848 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
4949 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
5050 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
51 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
5251
5352 comptime {
5453 var foo: Foo = undefined;
......@@ -66,7 +65,6 @@ test "assign undefined to struct with method" {
6665 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
6766 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
6867 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
69 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
7068
7169 comptime {
7270 var foo: Foo = undefined;
......@@ -82,7 +80,6 @@ test "assign undefined to struct with method" {
8280
8381test "type name of undefined" {
8482 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
85 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
8683
8784 const x = undefined;
8885 try expect(mem.eql(u8, @typeName(@TypeOf(x)), "@TypeOf(undefined)"));
test/behavior/union.zig-4
......@@ -486,7 +486,6 @@ test "global union with single field is correctly initialized" {
486486 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
487487 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
488488 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
489 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
490489
491490 glbl = Foo1{
492491 .f = @typeInfo(Foo1).Union.fields[0].type{ .x = 123 },
......@@ -546,7 +545,6 @@ test "union initializer generates padding only if needed" {
546545test "runtime tag name with single field" {
547546 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
548547 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
549 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
550548
551549 const U = union(enum) {
552550 A: i32,
......@@ -1467,7 +1465,6 @@ test "packed union in packed struct" {
14671465 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
14681466 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
14691467 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1470 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
14711468
14721469 const S = packed struct {
14731470 nested: packed union {
......@@ -1556,7 +1553,6 @@ test "packed union with zero-bit field" {
15561553 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
15571554 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
15581555 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1559 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
15601556
15611557 const S = packed struct {
15621558 nested: packed union {
test/behavior/vector.zig-1
......@@ -433,7 +433,6 @@ test "load vector elements via runtime index" {
433433 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
434434 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
435435 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
436 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
437436
438437 const S = struct {
439438 fn doTheTest() !void {
test/behavior/while.zig-10
......@@ -5,7 +5,6 @@ const assert = std.debug.assert;
55
66test "while loop" {
77 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
98
109 var i: i32 = 0;
1110 while (i < 4) {
......@@ -39,8 +38,6 @@ fn staticWhileLoop2() i32 {
3938}
4039
4140test "while with continue expression" {
42 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
43
4441 var sum: i32 = 0;
4542 {
4643 var i: i32 = 0;
......@@ -53,8 +50,6 @@ test "while with continue expression" {
5350}
5451
5552test "while with else" {
56 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
57
5853 var sum: i32 = 0;
5954 var i: i32 = 0;
6055 var got_else: i32 = 0;
......@@ -82,8 +77,6 @@ fn getNumberOrNull() ?i32 {
8277}
8378
8479test "continue outer while loop" {
85 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
86
8780 testContinueOuter();
8881 comptime testContinueOuter();
8982}
......@@ -131,7 +124,6 @@ test "while copies its payload" {
131124
132125test "continue and break" {
133126 if (builtin.zig_backend == .stage2_aarch64 and builtin.os.tag == .macos) return error.SkipZigTest;
134 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
135127
136128 try runContinueAndBreakTest();
137129 try expect(continue_and_break_counter == 8);
......@@ -349,8 +341,6 @@ test "continue inline while loop" {
349341}
350342
351343test "else continue outer while" {
352 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
353
354344 var i: usize = 0;
355345 while (true) {
356346 i += 1;