Commit 79628d48a4

Jakub Konka <kubkon@jakubkonka.com>
2022-01-17 13:49:13
stage2: implement airCondBr for immediate MCValue in x86_64
Pass more behavior tests.
1 parent d46973e
Changed files (2)
src
arch
test
src/arch/x86_64/CodeGen.zig
@@ -2479,6 +2479,7 @@ fn airDbgStmt(self: *Self, inst: Air.Inst.Index) !void {
 fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
     const pl_op = self.air.instructions.items(.data)[inst].pl_op;
     const cond = try self.resolveInst(pl_op.operand);
+    const cond_ty = self.air.typeOf(pl_op.operand);
     const extra = self.air.extraData(Air.CondBr, pl_op.payload);
     const then_body = self.air.extra[extra.end..][0..extra.data.then_body_len];
     const else_body = self.air.extra[extra.end + then_body.len ..][0..extra.data.else_body_len];
@@ -2550,10 +2551,29 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
                 });
                 break :reloc reloc;
             },
-            else => return self.fail("TODO implement condbr {s} when condition is {s}", .{
-                self.target.cpu.arch,
-                @tagName(cond),
-            }),
+            .immediate => |imm| {
+                if (cond_ty.abiSize(self.target.*) <= 4) {
+                    const reg = try self.copyToTmpRegister(cond_ty, .{ .immediate = imm });
+                    _ = try self.addInst(.{
+                        .tag = .@"test",
+                        .ops = (Mir.Ops{
+                            .reg1 = reg,
+                            .flags = 0b00,
+                        }).encode(),
+                        .data = .{ .imm = 1 },
+                    });
+                    const reloc = try self.addInst(.{
+                        .tag = .cond_jmp_eq_ne,
+                        .ops = (Mir.Ops{
+                            .flags = 0b01,
+                        }).encode(),
+                        .data = .{ .inst = undefined },
+                    });
+                    break :reloc reloc;
+                }
+                return self.fail("TODO implement condbr when condition is immediate larger than 4 bytes", .{});
+            },
+            else => return self.fail("TODO implement condbr when condition is {s}", .{@tagName(cond)}),
         }
     };
 
@@ -2916,7 +2936,16 @@ fn br(self: *Self, block: Air.Inst.Index, operand: Air.Inst.Ref) !void {
         const operand_mcv = try self.resolveInst(operand);
         const block_mcv = block_data.mcv;
         if (block_mcv == .none) {
-            block_data.mcv = operand_mcv;
+            block_data.mcv = switch (operand_mcv) {
+                .none, .dead, .unreach => unreachable,
+                .register, .stack_offset, .memory => operand_mcv,
+                .immediate => blk: {
+                    const new_mcv = try self.allocRegOrMem(block, true);
+                    try self.setRegOrMem(self.air.typeOfIndex(block), new_mcv, operand_mcv);
+                    break :blk new_mcv;
+                },
+                else => return self.fail("TODO implement block_data.mcv = operand_mcv for {}", .{operand_mcv}),
+            };
         } else {
             try self.setRegOrMem(self.air.typeOfIndex(block), block_mcv, operand_mcv);
         }
@@ -3081,12 +3110,15 @@ fn iterateBigTomb(self: *Self, inst: Air.Inst.Index, operand_count: usize) !BigT
 fn setRegOrMem(self: *Self, ty: Type, loc: MCValue, val: MCValue) !void {
     switch (loc) {
         .none => return,
+        .immediate => unreachable,
         .register => |reg| return self.genSetReg(ty, reg, val),
         .stack_offset => |off| return self.genSetStack(ty, off, val),
         .memory => {
             return self.fail("TODO implement setRegOrMem for memory", .{});
         },
-        else => unreachable,
+        else => {
+            return self.fail("TODO implement setRegOrMem for {}", .{loc});
+        },
     }
 }
 
@@ -3416,8 +3448,8 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void
                 _ = try self.addInst(.{
                     .tag = .xor,
                     .ops = (Mir.Ops{
-                        .reg1 = reg,
-                        .reg2 = reg,
+                        .reg1 = reg.to64(),
+                        .reg2 = reg.to64(),
                     }).encode(),
                     .data = undefined,
                 });
test/behavior.zig
@@ -14,202 +14,198 @@ test {
     _ = @import("behavior/pub_enum.zig");
     _ = @import("behavior/type_info.zig");
     _ = @import("behavior/type.zig");
+    _ = @import("behavior/bugs/655.zig");
+    _ = @import("behavior/bool.zig");
 
-    if (builtin.zig_backend != .stage2_x86_64) {
-        // Tests that pass for stage1, llvm backend, C backend, wasm backend, and arm backend.
-        _ = @import("behavior/bool.zig");
-        _ = @import("behavior/bugs/655.zig");
+    if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
+        // Tests that pass for stage1, llvm backend, C backend, wasm backend.
+        _ = @import("behavior/align.zig");
+        _ = @import("behavior/array.zig");
+        _ = @import("behavior/basic.zig");
+        _ = @import("behavior/bitcast.zig");
+        _ = @import("behavior/bugs/624.zig");
+        _ = @import("behavior/bugs/704.zig");
+        _ = @import("behavior/bugs/1486.zig");
+        _ = @import("behavior/bugs/2692.zig");
+        _ = @import("behavior/bugs/2889.zig");
+        _ = @import("behavior/bugs/3046.zig");
+        _ = @import("behavior/bugs/3586.zig");
+        _ = @import("behavior/bugs/4560.zig");
+        _ = @import("behavior/bugs/4769_a.zig");
+        _ = @import("behavior/bugs/4769_b.zig");
+        _ = @import("behavior/bugs/4954.zig");
+        _ = @import("behavior/byval_arg_var.zig");
+        _ = @import("behavior/call.zig");
+        _ = @import("behavior/cast.zig");
+        _ = @import("behavior/defer.zig");
+        _ = @import("behavior/enum.zig");
+        _ = @import("behavior/error.zig");
+        _ = @import("behavior/for.zig");
+        _ = @import("behavior/generics.zig");
+        _ = @import("behavior/if.zig");
+        _ = @import("behavior/import.zig");
+        _ = @import("behavior/incomplete_struct_param_tld.zig");
+        _ = @import("behavior/inttoptr.zig");
+        _ = @import("behavior/member_func.zig");
+        _ = @import("behavior/null.zig");
+        _ = @import("behavior/optional.zig");
+        _ = @import("behavior/pointers.zig");
+        _ = @import("behavior/ptrcast.zig");
+        _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
+        _ = @import("behavior/src.zig");
+        _ = @import("behavior/struct.zig");
+        _ = @import("behavior/this.zig");
+        _ = @import("behavior/truncate.zig");
+        _ = @import("behavior/try.zig");
+        _ = @import("behavior/undefined.zig");
+        _ = @import("behavior/underscore.zig");
+        _ = @import("behavior/usingnamespace.zig");
+        _ = @import("behavior/void.zig");
+        _ = @import("behavior/while.zig");
 
-        if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64) {
-            // Tests that pass for stage1, llvm backend, C backend, wasm backend.
-            _ = @import("behavior/align.zig");
-            _ = @import("behavior/array.zig");
-            _ = @import("behavior/basic.zig");
-            _ = @import("behavior/bitcast.zig");
-            _ = @import("behavior/bugs/624.zig");
-            _ = @import("behavior/bugs/704.zig");
-            _ = @import("behavior/bugs/1486.zig");
-            _ = @import("behavior/bugs/2692.zig");
-            _ = @import("behavior/bugs/2889.zig");
-            _ = @import("behavior/bugs/3046.zig");
-            _ = @import("behavior/bugs/3586.zig");
-            _ = @import("behavior/bugs/4560.zig");
-            _ = @import("behavior/bugs/4769_a.zig");
-            _ = @import("behavior/bugs/4769_b.zig");
-            _ = @import("behavior/bugs/4954.zig");
-            _ = @import("behavior/byval_arg_var.zig");
-            _ = @import("behavior/call.zig");
-            _ = @import("behavior/cast.zig");
-            _ = @import("behavior/defer.zig");
-            _ = @import("behavior/enum.zig");
-            _ = @import("behavior/error.zig");
-            _ = @import("behavior/for.zig");
-            _ = @import("behavior/generics.zig");
-            _ = @import("behavior/if.zig");
-            _ = @import("behavior/import.zig");
-            _ = @import("behavior/incomplete_struct_param_tld.zig");
-            _ = @import("behavior/inttoptr.zig");
-            _ = @import("behavior/member_func.zig");
-            _ = @import("behavior/null.zig");
-            _ = @import("behavior/optional.zig");
-            _ = @import("behavior/pointers.zig");
-            _ = @import("behavior/ptrcast.zig");
-            _ = @import("behavior/ref_var_in_if_after_if_2nd_switch_prong.zig");
-            _ = @import("behavior/src.zig");
-            _ = @import("behavior/struct.zig");
-            _ = @import("behavior/this.zig");
-            _ = @import("behavior/truncate.zig");
-            _ = @import("behavior/try.zig");
-            _ = @import("behavior/undefined.zig");
-            _ = @import("behavior/underscore.zig");
-            _ = @import("behavior/usingnamespace.zig");
-            _ = @import("behavior/void.zig");
-            _ = @import("behavior/while.zig");
+        if (builtin.zig_backend != .stage2_wasm) {
+            // Tests that pass for stage1, llvm backend, C backend
+            _ = @import("behavior/cast_int.zig");
+            _ = @import("behavior/int128.zig");
+            _ = @import("behavior/translate_c_macros.zig");
 
-            if (builtin.zig_backend != .stage2_wasm) {
-                // Tests that pass for stage1, llvm backend, C backend
-                _ = @import("behavior/cast_int.zig");
-                _ = @import("behavior/int128.zig");
-                _ = @import("behavior/translate_c_macros.zig");
+            if (builtin.zig_backend != .stage2_c) {
+                // Tests that pass for stage1 and the llvm backend.
+                _ = @import("behavior/align_llvm.zig");
+                _ = @import("behavior/alignof.zig");
+                _ = @import("behavior/array_llvm.zig");
+                _ = @import("behavior/atomics.zig");
+                _ = @import("behavior/basic_llvm.zig");
+                _ = @import("behavior/bit_shifting.zig");
+                _ = @import("behavior/bugs/394.zig");
+                _ = @import("behavior/bugs/656.zig");
+                _ = @import("behavior/bugs/1277.zig");
+                _ = @import("behavior/bugs/1310.zig");
+                _ = @import("behavior/bugs/1381.zig");
+                _ = @import("behavior/bugs/1500.zig");
+                _ = @import("behavior/bugs/1735.zig");
+                _ = @import("behavior/bugs/1741.zig");
+                _ = @import("behavior/bugs/2006.zig");
+                _ = @import("behavior/bugs/2578.zig");
+                _ = @import("behavior/bugs/3007.zig");
+                _ = @import("behavior/bugs/3112.zig");
+                _ = @import("behavior/bugs/3367.zig");
+                _ = @import("behavior/bugs/7250.zig");
+                _ = @import("behavior/bugs/9584.zig");
+                _ = @import("behavior/cast_llvm.zig");
+                _ = @import("behavior/enum_llvm.zig");
+                _ = @import("behavior/error_llvm.zig");
+                _ = @import("behavior/eval.zig");
+                _ = @import("behavior/floatop.zig");
+                _ = @import("behavior/fn.zig");
+                _ = @import("behavior/generics_llvm.zig");
+                _ = @import("behavior/math.zig");
+                _ = @import("behavior/maximum_minimum.zig");
+                _ = @import("behavior/merge_error_sets.zig");
+                _ = @import("behavior/namespace_depends_on_compile_var.zig");
+                _ = @import("behavior/null_llvm.zig");
+                _ = @import("behavior/optional_llvm.zig");
+                _ = @import("behavior/popcount.zig");
+                _ = @import("behavior/saturating_arithmetic.zig");
+                _ = @import("behavior/sizeof_and_typeof.zig");
+                _ = @import("behavior/slice.zig");
+                _ = @import("behavior/struct_llvm.zig");
+                _ = @import("behavior/switch.zig");
+                _ = @import("behavior/union.zig");
+                _ = @import("behavior/widening.zig");
 
-                if (builtin.zig_backend != .stage2_c) {
-                    // Tests that pass for stage1 and the llvm backend.
-                    _ = @import("behavior/align_llvm.zig");
-                    _ = @import("behavior/alignof.zig");
-                    _ = @import("behavior/array_llvm.zig");
-                    _ = @import("behavior/atomics.zig");
-                    _ = @import("behavior/basic_llvm.zig");
-                    _ = @import("behavior/bit_shifting.zig");
-                    _ = @import("behavior/bugs/394.zig");
-                    _ = @import("behavior/bugs/656.zig");
-                    _ = @import("behavior/bugs/1277.zig");
-                    _ = @import("behavior/bugs/1310.zig");
-                    _ = @import("behavior/bugs/1381.zig");
-                    _ = @import("behavior/bugs/1500.zig");
-                    _ = @import("behavior/bugs/1735.zig");
-                    _ = @import("behavior/bugs/1741.zig");
-                    _ = @import("behavior/bugs/2006.zig");
-                    _ = @import("behavior/bugs/2578.zig");
-                    _ = @import("behavior/bugs/3007.zig");
-                    _ = @import("behavior/bugs/3112.zig");
-                    _ = @import("behavior/bugs/3367.zig");
-                    _ = @import("behavior/bugs/7250.zig");
-                    _ = @import("behavior/bugs/9584.zig");
-                    _ = @import("behavior/cast_llvm.zig");
-                    _ = @import("behavior/enum_llvm.zig");
-                    _ = @import("behavior/error_llvm.zig");
-                    _ = @import("behavior/eval.zig");
-                    _ = @import("behavior/floatop.zig");
-                    _ = @import("behavior/fn.zig");
-                    _ = @import("behavior/generics_llvm.zig");
-                    _ = @import("behavior/math.zig");
-                    _ = @import("behavior/maximum_minimum.zig");
-                    _ = @import("behavior/merge_error_sets.zig");
-                    _ = @import("behavior/namespace_depends_on_compile_var.zig");
-                    _ = @import("behavior/null_llvm.zig");
-                    _ = @import("behavior/optional_llvm.zig");
-                    _ = @import("behavior/popcount.zig");
-                    _ = @import("behavior/saturating_arithmetic.zig");
-                    _ = @import("behavior/sizeof_and_typeof.zig");
-                    _ = @import("behavior/slice.zig");
-                    _ = @import("behavior/struct_llvm.zig");
-                    _ = @import("behavior/switch.zig");
-                    _ = @import("behavior/union.zig");
-                    _ = @import("behavior/widening.zig");
-
-                    if (builtin.zig_backend != .stage1) {
-                        // When all comptime_memory.zig tests pass, #9646 can be closed.
-                        // _ = @import("behavior/comptime_memory.zig");
-                        _ = @import("behavior/slice_stage2.zig");
-                    } else {
-                        // Tests that only pass for the stage1 backend.
-                        _ = @import("behavior/align_stage1.zig");
-                        if (builtin.os.tag != .wasi) {
-                            _ = @import("behavior/asm.zig");
-                            _ = @import("behavior/async_fn.zig");
-                        }
-                        _ = @import("behavior/await_struct.zig");
-                        _ = @import("behavior/bitcast_stage1.zig");
-                        _ = @import("behavior/bitreverse.zig");
-                        _ = @import("behavior/bugs/421.zig");
-                        _ = @import("behavior/bugs/529.zig");
-                        _ = @import("behavior/bugs/718.zig");
-                        _ = @import("behavior/bugs/726.zig");
-                        _ = @import("behavior/bugs/828.zig");
-                        _ = @import("behavior/bugs/920.zig");
-                        _ = @import("behavior/bugs/1025.zig");
-                        _ = @import("behavior/bugs/1076.zig");
-                        _ = @import("behavior/bugs/1120.zig");
-                        _ = @import("behavior/bugs/1421.zig");
-                        _ = @import("behavior/bugs/1442.zig");
-                        _ = @import("behavior/bugs/1607.zig");
-                        _ = @import("behavior/bugs/1851.zig");
-                        _ = @import("behavior/bugs/1914.zig");
-                        _ = @import("behavior/bugs/2114.zig");
-                        _ = @import("behavior/bugs/3384.zig");
-                        _ = @import("behavior/bugs/3742.zig");
-                        _ = @import("behavior/bugs/3779.zig");
-                        _ = @import("behavior/bugs/4328.zig");
-                        _ = @import("behavior/bugs/5398.zig");
-                        _ = @import("behavior/bugs/5413.zig");
-                        _ = @import("behavior/bugs/5474.zig");
-                        _ = @import("behavior/bugs/5487.zig");
-                        _ = @import("behavior/bugs/6456.zig");
-                        _ = @import("behavior/bugs/6781.zig");
-                        _ = @import("behavior/bugs/7003.zig");
-                        _ = @import("behavior/bugs/7027.zig");
-                        _ = @import("behavior/bugs/7047.zig");
-                        _ = @import("behavior/bugs/10147.zig");
-                        _ = @import("behavior/byteswap.zig");
-                        _ = @import("behavior/call_stage1.zig");
-                        _ = @import("behavior/cast_stage1.zig");
-                        _ = @import("behavior/const_slice_child.zig");
-                        _ = @import("behavior/defer_stage1.zig");
-                        _ = @import("behavior/enum_stage1.zig");
-                        _ = @import("behavior/error_stage1.zig");
-                        _ = @import("behavior/eval_stage1.zig");
-                        _ = @import("behavior/field_parent_ptr.zig");
-                        _ = @import("behavior/floatop_stage1.zig");
-                        _ = @import("behavior/fn_stage1.zig");
-                        _ = @import("behavior/fn_delegation.zig");
-                        _ = @import("behavior/for_stage1.zig");
-                        _ = @import("behavior/if_stage1.zig");
-                        _ = @import("behavior/ir_block_deps.zig");
-                        _ = @import("behavior/math_stage1.zig");
-                        _ = @import("behavior/misc.zig");
-                        _ = @import("behavior/muladd.zig");
-                        _ = @import("behavior/null_stage1.zig");
-                        _ = @import("behavior/optional_stage1.zig");
-                        _ = @import("behavior/pointers_stage1.zig");
-                        _ = @import("behavior/popcount_stage1.zig");
-                        _ = @import("behavior/ptrcast_stage1.zig");
-                        _ = @import("behavior/reflection.zig");
-                        _ = @import("behavior/saturating_arithmetic_stage1.zig");
-                        _ = @import("behavior/select.zig");
-                        _ = @import("behavior/shuffle.zig");
-                        _ = @import("behavior/sizeof_and_typeof_stage1.zig");
-                        _ = @import("behavior/slice_stage1.zig");
-                        _ = @import("behavior/struct_contains_null_ptr_itself.zig");
-                        _ = @import("behavior/struct_contains_slice_of_itself.zig");
-                        _ = @import("behavior/struct_stage1.zig");
-                        _ = @import("behavior/switch_prong_err_enum.zig");
-                        _ = @import("behavior/switch_prong_implicit_cast.zig");
-                        _ = @import("behavior/switch_stage1.zig");
-                        _ = @import("behavior/truncate_stage1.zig");
-                        _ = @import("behavior/tuple.zig");
-                        _ = @import("behavior/type_stage1.zig");
-                        _ = @import("behavior/type_info_stage1.zig");
-                        _ = @import("behavior/typename.zig");
-                        _ = @import("behavior/union_stage1.zig");
-                        _ = @import("behavior/union_with_members.zig");
-                        _ = @import("behavior/var_args.zig");
-                        _ = @import("behavior/vector.zig");
-                        if (builtin.target.cpu.arch == .wasm32) {
-                            _ = @import("behavior/wasm.zig");
-                        }
-                        _ = @import("behavior/while_stage1.zig");
-                        _ = @import("behavior/translate_c_macros_stage1.zig");
+                if (builtin.zig_backend != .stage1) {
+                    // When all comptime_memory.zig tests pass, #9646 can be closed.
+                    // _ = @import("behavior/comptime_memory.zig");
+                    _ = @import("behavior/slice_stage2.zig");
+                } else {
+                    // Tests that only pass for the stage1 backend.
+                    _ = @import("behavior/align_stage1.zig");
+                    if (builtin.os.tag != .wasi) {
+                        _ = @import("behavior/asm.zig");
+                        _ = @import("behavior/async_fn.zig");
+                    }
+                    _ = @import("behavior/await_struct.zig");
+                    _ = @import("behavior/bitcast_stage1.zig");
+                    _ = @import("behavior/bitreverse.zig");
+                    _ = @import("behavior/bugs/421.zig");
+                    _ = @import("behavior/bugs/529.zig");
+                    _ = @import("behavior/bugs/718.zig");
+                    _ = @import("behavior/bugs/726.zig");
+                    _ = @import("behavior/bugs/828.zig");
+                    _ = @import("behavior/bugs/920.zig");
+                    _ = @import("behavior/bugs/1025.zig");
+                    _ = @import("behavior/bugs/1076.zig");
+                    _ = @import("behavior/bugs/1120.zig");
+                    _ = @import("behavior/bugs/1421.zig");
+                    _ = @import("behavior/bugs/1442.zig");
+                    _ = @import("behavior/bugs/1607.zig");
+                    _ = @import("behavior/bugs/1851.zig");
+                    _ = @import("behavior/bugs/1914.zig");
+                    _ = @import("behavior/bugs/2114.zig");
+                    _ = @import("behavior/bugs/3384.zig");
+                    _ = @import("behavior/bugs/3742.zig");
+                    _ = @import("behavior/bugs/3779.zig");
+                    _ = @import("behavior/bugs/4328.zig");
+                    _ = @import("behavior/bugs/5398.zig");
+                    _ = @import("behavior/bugs/5413.zig");
+                    _ = @import("behavior/bugs/5474.zig");
+                    _ = @import("behavior/bugs/5487.zig");
+                    _ = @import("behavior/bugs/6456.zig");
+                    _ = @import("behavior/bugs/6781.zig");
+                    _ = @import("behavior/bugs/7003.zig");
+                    _ = @import("behavior/bugs/7027.zig");
+                    _ = @import("behavior/bugs/7047.zig");
+                    _ = @import("behavior/bugs/10147.zig");
+                    _ = @import("behavior/byteswap.zig");
+                    _ = @import("behavior/call_stage1.zig");
+                    _ = @import("behavior/cast_stage1.zig");
+                    _ = @import("behavior/const_slice_child.zig");
+                    _ = @import("behavior/defer_stage1.zig");
+                    _ = @import("behavior/enum_stage1.zig");
+                    _ = @import("behavior/error_stage1.zig");
+                    _ = @import("behavior/eval_stage1.zig");
+                    _ = @import("behavior/field_parent_ptr.zig");
+                    _ = @import("behavior/floatop_stage1.zig");
+                    _ = @import("behavior/fn_stage1.zig");
+                    _ = @import("behavior/fn_delegation.zig");
+                    _ = @import("behavior/for_stage1.zig");
+                    _ = @import("behavior/if_stage1.zig");
+                    _ = @import("behavior/ir_block_deps.zig");
+                    _ = @import("behavior/math_stage1.zig");
+                    _ = @import("behavior/misc.zig");
+                    _ = @import("behavior/muladd.zig");
+                    _ = @import("behavior/null_stage1.zig");
+                    _ = @import("behavior/optional_stage1.zig");
+                    _ = @import("behavior/pointers_stage1.zig");
+                    _ = @import("behavior/popcount_stage1.zig");
+                    _ = @import("behavior/ptrcast_stage1.zig");
+                    _ = @import("behavior/reflection.zig");
+                    _ = @import("behavior/saturating_arithmetic_stage1.zig");
+                    _ = @import("behavior/select.zig");
+                    _ = @import("behavior/shuffle.zig");
+                    _ = @import("behavior/sizeof_and_typeof_stage1.zig");
+                    _ = @import("behavior/slice_stage1.zig");
+                    _ = @import("behavior/struct_contains_null_ptr_itself.zig");
+                    _ = @import("behavior/struct_contains_slice_of_itself.zig");
+                    _ = @import("behavior/struct_stage1.zig");
+                    _ = @import("behavior/switch_prong_err_enum.zig");
+                    _ = @import("behavior/switch_prong_implicit_cast.zig");
+                    _ = @import("behavior/switch_stage1.zig");
+                    _ = @import("behavior/truncate_stage1.zig");
+                    _ = @import("behavior/tuple.zig");
+                    _ = @import("behavior/type_stage1.zig");
+                    _ = @import("behavior/type_info_stage1.zig");
+                    _ = @import("behavior/typename.zig");
+                    _ = @import("behavior/union_stage1.zig");
+                    _ = @import("behavior/union_with_members.zig");
+                    _ = @import("behavior/var_args.zig");
+                    _ = @import("behavior/vector.zig");
+                    if (builtin.target.cpu.arch == .wasm32) {
+                        _ = @import("behavior/wasm.zig");
                     }
+                    _ = @import("behavior/while_stage1.zig");
+                    _ = @import("behavior/translate_c_macros_stage1.zig");
                 }
             }
         }