diff --git a/bootstrap/compiler.zig b/bootstrap/compiler.zig index a83a284..627b304 100644 --- a/bootstrap/compiler.zig +++ b/bootstrap/compiler.zig @@ -1047,9 +1047,54 @@ const Bitcode = struct { previous_code_size: u32, previous_abbreviations: PinnedArray(*Abbreviation) = .{}, }; - const BlockId = enum(u8){ - identification = 13, + + const BlockInfo = struct{ + id: u32, + abbreviations: PinnedArray(*Abbreviation) = .{}, }; + + const BlockId = enum(u8){ + block_info = 0, + module = 8, + parameter_attribute = 9, + parameter_attribute_group = 10, + constant = 11, + function = 12, + identification = 13, + value_symtab = 14, + }; + + const ValueSymtabAbbreviationId = enum(u8){ + const base = @intFromEnum(FixedAbbreviationId.first_application_abbrev); + entry8 = base + 0, + entry7 = base + 1, + entry6 = base + 2, + bb_entry6 = base + 3, + }; + + const ConstantAbbreviationId = enum(u8) { + const base = @intFromEnum(FixedAbbreviationId.first_application_abbrev); + set_type = base + 0, + integer = base + 1, + cast = base + 2, + null = base + 3, + }; + + const FunctionAbbreviationId = enum(u8) { + const base = @intFromEnum(FixedAbbreviationId.first_application_abbrev); + load = base + 0, + unary_op = base + 1, + unary_op_flags = base + 2, + binary_op = base + 3, + binary_op_flags = base + 4, + cast = base + 5, + cast_flags = base + 6, + ret_void = base + 7, + ret_val = base + 8, + @"unreachable" = base + 9, + gep = base + 10, + }; + const Abbreviation = struct{ operands: PinnedArray(Op) = .{}, @@ -1120,14 +1165,145 @@ const Bitcode = struct { epoch = 2, }; + const ModuleCode = enum(u8) { + version = 1, + triple = 2, + data_layout = 3, + @"asm" = 4, + section_name = 5, + dep_lib = 6, + global_var = 7, + function = 8, + alias_old = 9, + gc_name = 11, + comdat = 12, + vst_offset = 13, + alias = 14, + metadata_values_unused = 15, + source_filename = 16, + hash = 17, + ifunc = 18, + }; + + const ValueSymtabCode = enum(u8) { + entry = 1, + bb_entry = 2, + fn_entry = 3, + combined_entry = 5, + }; + + const ConstantCode = enum(u8) { + set_type = 1, + null = 2, + undef = 3, + integer = 4, + wide_integer = 5, + float = 6, + aggregate = 7, + string = 8, + cstring = 9, + binary_op = 10, + cast = 11, + gep = 12, + select = 13, + extract_element = 14, + insert_element = 15, + shuffle_vector = 16, + cmp = 17, + inline_assembly_old = 18, + shuffle_vector_ex = 19, + inbounds_gep = 20, + block_address = 21, + data = 22, + inline_asm_old2 = 23, + gep_with_inrange_index = 24, + unary_op = 25, + poison = 26, + dso_local_equivalent = 27, + inline_asm_old3 = 28, + no_cfi_value = 29, + inline_asm = 30, + }; + + const FunctionCode = enum(u8) { + declare_blocks = 1, + binary_op = 2, + cast = 3, + gep_old = 4, + select = 5, + extract_element = 6, + insert_element = 7, + shuffle_vector = 8, + cmp = 9, + ret = 10, + br = 11, + @"switch" = 12, + invoke = 13, + @"unreachable" = 15, + phi = 16, + alloca = 19, + load = 20, + vaarg = 23, + store_old = 24, + extract_value = 26, + insert_value = 27, + cmp2 = 28, + vselect = 29, + inbounds_gep_old = 30, + indirect_br = 31, + debug_loc_again = 33, + call = 34, + debug_loc = 35, + fence = 36, + cmpxchg_old = 37, + atomic_rmw_old = 38, + @"resume" = 39, + landing_pad_old = 40, + load_atomic = 41, + store_atomic_old = 42, + gep = 43, + store = 44, + store_atomic = 45, + cmpxchg = 46, + landing_pad = 47, + cleanup_ret = 48, + catch_ret = 49, + catch_pad = 50, + cleanup_pad = 51, + catch_switch = 52, + operand_bundle = 55, + unary_op = 56, + call_br = 57, + freeze = 58, + atomic_rmw = 59, + block_addr_users = 60, + }; + + const BlockInfoCode = enum(u8) { + set_bid = 1, + block_name = 2, + set_record_name = 3, + }; + + fn print_hex_slice(bytes: []const u8) void { + for (bytes, 0..) |b, i| { + if (i % 4 == 0) { + std.debug.print("\n ", .{}); + } + std.debug.print("0x{x:0>2}, ", .{b}); + } + } + const Writer = struct { buffer: PinnedArray(u32) = .{}, block_scope: PinnedArray(Block) = .{}, current_abbreviations: PinnedArray(*Abbreviation) = .{}, abbreviation_buffer: PinnedArray(Abbreviation) = .{}, + block_info_records: PinnedArray(BlockInfo) = .{}, current_bit: u32 = 0, current_value: u32 = 0, current_codesize: u32 = 2, + block_info_current_block_id: u32 = 0, fn get_byte_slice(writer: *Writer) []const u8 { const final_slice_len = writer.buffer.length * @sizeOf(u32); @@ -1141,6 +1317,851 @@ const Bitcode = struct { writer.append_bytes(&magic); writer.write_identification_block(); + const identification_block = .{ + 0x35, 0x14, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, + 0x62, 0x0c, 0x30, 0x24, + 0x4a, 0x59, 0xbe, 0x66, + 0xbd, 0xfb, 0xb4, 0xaf, + 0x0b, 0x51, 0x80, 0x4c, + 0x01, 0x00, 0x00, 0x00, + }; + std.testing.expectEqualSlices(u8, &identification_block, writer.get_byte_slice()[4..]) catch unreachable; + const module_version_start = writer.buffer.length; + _ = module_version_start; // autofix + writer.enter_subblock(.identification, 3); + + writer.write_module_version(); + + writer.write_block_info(); + + + const rest_module_block align(4) = [_]u8{ + 0x21, 0x0c, 0x00, 0x00, + 0xe6, 0x01, 0x00, 0x00, + 0x0b, 0x02, 0x21, 0x00, + 0x02, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, + 0x41, 0xc8, 0x04, 0x49, + 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, + 0x25, 0x05, 0x08, 0x19, + 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x0c, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, + 0x64, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, + 0x0a, 0x32, 0x32, 0x88, + 0x48, 0x70, 0xc4, 0x21, + 0x23, 0x44, 0x12, 0x87, + 0x8c, 0x10, 0x41, 0x92, + 0x02, 0x64, 0xc8, 0x08, + 0xb1, 0x14, 0x20, 0x43, + 0x46, 0x88, 0x20, 0xc9, + 0x01, 0x32, 0x32, 0x84, + 0x18, 0x2a, 0x28, 0x2a, + 0x90, 0x31, 0x7c, 0xb0, + 0x5c, 0x91, 0x20, 0xc3, + 0xc8, 0x00, 0x00, 0x00, + 0x89, 0x20, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, + 0x22, 0x66, 0x04, 0x10, + 0xb2, 0x42, 0x82, 0xc9, + 0x10, 0x52, 0x42, 0x82, + 0xc9, 0x90, 0x71, 0xc2, + 0x50, 0x48, 0x0a, 0x09, + 0x26, 0x43, 0xc6, 0x05, + 0x42, 0x32, 0x26, 0x08, + 0x0a, 0x9a, 0x23, 0x00, + 0x83, 0x32, 0x24, 0x18, + 0x08, 0x18, 0x01, 0x00, + 0x51, 0x18, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, + 0x1b, 0x58, 0x23, 0xf8, + 0xff, 0xff, 0xff, 0xff, + 0x01, 0x70, 0x00, 0x09, + 0x28, 0x03, 0x80, 0x0b, + 0xc2, 0x40, 0x20, 0xcc, + 0x41, 0x1e, 0xc2, 0xa1, + 0x1d, 0xca, 0xa1, 0x0d, + 0xe0, 0xe1, 0x1d, 0xd2, + 0xc1, 0x1d, 0xe8, 0xa1, + 0x1c, 0xe4, 0x01, 0x08, + 0x07, 0x76, 0x60, 0x07, + 0x80, 0x68, 0x87, 0x74, + 0x70, 0x87, 0x36, 0x60, + 0x87, 0x72, 0x38, 0x87, + 0x70, 0x60, 0x87, 0x36, + 0xb0, 0x87, 0x72, 0x18, + 0x07, 0x7a, 0x78, 0x07, + 0x79, 0x68, 0x83, 0x7b, + 0x48, 0x07, 0x72, 0xa0, + 0x07, 0x74, 0x00, 0xe0, + 0x00, 0x20, 0xdc, 0xe1, + 0x1d, 0xda, 0x80, 0x1e, + 0xe4, 0x21, 0x1c, 0xe0, + 0x01, 0x1e, 0xd2, 0xc1, + 0x1d, 0xce, 0xa1, 0x0d, + 0xda, 0x21, 0x1c, 0xe8, + 0x01, 0x1d, 0x00, 0x7a, + 0x90, 0x87, 0x7a, 0x28, + 0x07, 0x80, 0x98, 0x07, + 0x7a, 0x08, 0x87, 0x71, + 0x58, 0x87, 0x36, 0x80, + 0x07, 0x79, 0x78, 0x07, + 0x7a, 0x28, 0x87, 0x71, + 0xa0, 0x87, 0x77, 0x90, + 0x87, 0x36, 0x10, 0x87, + 0x7a, 0x30, 0x07, 0x73, + 0x28, 0x07, 0x79, 0x68, + 0x83, 0x79, 0x48, 0x07, + 0x7d, 0x28, 0x07, 0x00, + 0x0f, 0x00, 0x82, 0x1e, + 0xc2, 0x41, 0x1e, 0xce, + 0xa1, 0x1c, 0xe8, 0xa1, + 0x0d, 0xc6, 0x01, 0x1e, + 0xea, 0x01, 0xc0, 0x07, + 0x3c, 0xb0, 0x83, 0x36, + 0xb0, 0x03, 0x3a, 0x00, + 0x08, 0x7a, 0x08, 0x07, + 0x79, 0x38, 0x87, 0x72, + 0xa0, 0x87, 0x36, 0x30, + 0x87, 0x72, 0x08, 0x07, + 0x7a, 0xa8, 0x07, 0x79, + 0x28, 0x87, 0x79, 0x00, + 0xd6, 0x60, 0x1c, 0xda, + 0xe1, 0x1d, 0xec, 0x81, + 0x0d, 0xd6, 0x60, 0x1c, + 0xf0, 0x01, 0x0f, 0xd8, + 0x60, 0x0d, 0xcc, 0x01, + 0x1f, 0xe6, 0x41, 0x1e, + 0xd8, 0x60, 0x0d, 0xda, + 0xa1, 0x1d, 0xf0, 0x81, + 0x0d, 0xd6, 0x60, 0x1e, + 0xe6, 0xa1, 0x1c, 0xd8, + 0x60, 0x0d, 0xe6, 0x61, + 0x1e, 0xca, 0x41, 0x0e, + 0xd8, 0x60, 0x0d, 0xf0, + 0x01, 0x0f, 0xee, 0x00, + 0x20, 0xe8, 0xa1, 0x1e, + 0xdc, 0xa1, 0x1c, 0xda, + 0x60, 0x1c, 0xe0, 0xa1, + 0x1e, 0x80, 0x73, 0x28, + 0x07, 0x77, 0x28, 0x07, + 0x79, 0x48, 0x87, 0x71, + 0x00, 0x36, 0x10, 0x42, + 0x00, 0x90, 0xc2, 0x06, + 0x62, 0x10, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x00, + 0x49, 0x18, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, + 0x13, 0x86, 0x40, 0x18, + 0x00, 0x00, 0x00, 0x00, + 0x13, 0x26, 0x7c, 0xc0, + 0x03, 0x3b, 0xf8, 0x05, + 0x3b, 0xa0, 0x83, 0x36, + 0x80, 0x87, 0x71, 0x68, + 0x03, 0x76, 0x48, 0x07, + 0x77, 0xa8, 0x07, 0x7c, + 0x68, 0x83, 0x73, 0x70, + 0x87, 0x7a, 0xd8, 0x60, + 0x0a, 0xe5, 0xd0, 0x06, + 0xed, 0xa0, 0x07, 0xe5, + 0xd0, 0x06, 0xf0, 0x20, + 0x07, 0x77, 0x00, 0x07, + 0x7a, 0x30, 0x07, 0x72, + 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x00, 0x0f, + 0x72, 0x70, 0x07, 0x71, + 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xd0, 0x06, 0xf0, + 0x20, 0x07, 0x77, 0x20, + 0x07, 0x7a, 0x60, 0x07, + 0x74, 0xa0, 0x07, 0x76, + 0x40, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, + 0x7a, 0x60, 0x07, 0x74, + 0xd0, 0x06, 0xe6, 0x80, + 0x07, 0x70, 0xa0, 0x07, + 0x71, 0x20, 0x07, 0x78, + 0xd0, 0x06, 0xee, 0x80, + 0x07, 0x7a, 0x10, 0x07, + 0x76, 0xa0, 0x07, 0x73, + 0x20, 0x07, 0x7a, 0x60, + 0x07, 0x74, 0xd0, 0x06, + 0xb3, 0x10, 0x07, 0x72, + 0x80, 0x07, 0x1a, 0x21, + 0x4c, 0x0e, 0x13, 0x36, + 0xdb, 0xde, 0x6e, 0xb1, + 0xd3, 0xee, 0xf5, 0x90, + 0x0a, 0x20, 0x04, 0x00, + 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x02, + 0x90, 0xd8, 0x20, 0x50, + 0x54, 0x3d, 0x00, 0x00, + 0x20, 0x0b, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x0c, + 0x19, 0x11, 0x4c, 0x90, + 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x4a, + 0x09, 0x14, 0x42, 0x41, + 0x14, 0x41, 0x39, 0x00, + 0xb1, 0x18, 0x00, 0x00, + 0xb9, 0x00, 0x00, 0x00, + 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, + 0x14, 0x01, 0x3d, 0x88, + 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, + 0x79, 0x78, 0x07, 0x73, + 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, + 0x33, 0x0c, 0x42, 0x1e, + 0xc2, 0xc1, 0x1d, 0xce, + 0xa1, 0x1c, 0x66, 0x30, + 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, + 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, + 0x74, 0x70, 0x07, 0x7b, + 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, + 0x7a, 0x70, 0x03, 0x76, + 0x78, 0x87, 0x70, 0x20, + 0x87, 0x19, 0xcc, 0x11, + 0x0e, 0xec, 0x90, 0x0e, + 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, + 0x0e, 0xf0, 0x50, 0x0e, + 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, + 0x21, 0x1d, 0xc2, 0x61, + 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, + 0xd0, 0x43, 0x39, 0xb4, + 0x03, 0x3c, 0xbc, 0x83, + 0x3c, 0x84, 0x03, 0x3b, + 0xcc, 0xf0, 0x14, 0x76, + 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, + 0x72, 0x68, 0x07, 0x37, + 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, + 0x76, 0x28, 0x07, 0x76, + 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, + 0x5f, 0x08, 0x87, 0x71, + 0x18, 0x87, 0x72, 0x98, + 0x87, 0x79, 0x98, 0x81, + 0x2c, 0xee, 0xf0, 0x0e, + 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, + 0x03, 0x62, 0xc8, 0xa1, + 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x1c, 0xdc, 0x61, + 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, + 0x61, 0x06, 0xd6, 0x90, + 0x43, 0x39, 0xc8, 0x43, + 0x39, 0x98, 0x43, 0x39, + 0xc8, 0x43, 0x39, 0xb8, + 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, + 0x94, 0xc3, 0x2f, 0xbc, + 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, + 0xb0, 0xc3, 0x0c, 0xc7, + 0x69, 0x87, 0x70, 0x58, + 0x87, 0x72, 0x70, 0x83, + 0x74, 0x68, 0x07, 0x78, + 0x60, 0x87, 0x74, 0x18, + 0x87, 0x74, 0xa0, 0x87, + 0x19, 0xce, 0x53, 0x0f, + 0xee, 0x00, 0x0f, 0xf2, + 0x50, 0x0e, 0xe4, 0x90, + 0x0e, 0xe3, 0x40, 0x0f, + 0xe1, 0x20, 0x0e, 0xec, + 0x50, 0x0e, 0x33, 0x20, + 0x28, 0x1d, 0xdc, 0xc1, + 0x1e, 0xc2, 0x41, 0x1e, + 0xd2, 0x21, 0x1c, 0xdc, + 0x81, 0x1e, 0xdc, 0xe0, + 0x1c, 0xe4, 0xe1, 0x1d, + 0xea, 0x01, 0x1e, 0x66, + 0x18, 0x51, 0x38, 0xb0, + 0x43, 0x3a, 0x9c, 0x83, + 0x3b, 0xcc, 0x50, 0x24, + 0x76, 0x60, 0x07, 0x7b, + 0x68, 0x07, 0x37, 0x60, + 0x87, 0x77, 0x78, 0x07, + 0x78, 0x98, 0x51, 0x4c, + 0xf4, 0x90, 0x0f, 0xf0, + 0x50, 0x0e, 0x33, 0x1e, + 0x6a, 0x1e, 0xca, 0x61, + 0x1c, 0xe8, 0x21, 0x1d, + 0xde, 0xc1, 0x1d, 0x7e, + 0x01, 0x1e, 0xe4, 0xa1, + 0x1c, 0xcc, 0x21, 0x1d, + 0xf0, 0x61, 0x06, 0x54, + 0x85, 0x83, 0x38, 0xcc, + 0xc3, 0x3b, 0xb0, 0x43, + 0x3d, 0xd0, 0x43, 0x39, + 0xfc, 0xc2, 0x3c, 0xe4, + 0x43, 0x3b, 0x88, 0xc3, + 0x3b, 0xb0, 0xc3, 0x8c, + 0xc5, 0x0a, 0x87, 0x79, + 0x98, 0x87, 0x77, 0x18, + 0x87, 0x74, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, + 0x98, 0x81, 0x5c, 0xe3, + 0x10, 0x0e, 0xec, 0xc0, + 0x0e, 0xe5, 0x50, 0x0e, + 0xf3, 0x30, 0x23, 0xc1, + 0xd2, 0x41, 0x1e, 0xe4, + 0xe1, 0x17, 0xd8, 0xe1, + 0x1d, 0xde, 0x01, 0x1e, + 0x66, 0x48, 0x19, 0x3b, + 0xb0, 0x83, 0x3d, 0xb4, + 0x83, 0x1b, 0x84, 0xc3, + 0x38, 0x8c, 0x43, 0x39, + 0xcc, 0xc3, 0x3c, 0xb8, + 0xc1, 0x39, 0xc8, 0xc3, + 0x3b, 0xd4, 0x03, 0x3c, + 0xcc, 0x48, 0xb4, 0x71, + 0x08, 0x07, 0x76, 0x60, + 0x07, 0x71, 0x08, 0x87, + 0x71, 0x58, 0x87, 0x19, + 0xdb, 0xc6, 0x0e, 0xec, + 0x60, 0x0f, 0xed, 0xe0, + 0x06, 0xf0, 0x20, 0x0f, + 0xe5, 0x30, 0x0f, 0xe5, + 0x20, 0x0f, 0xf6, 0x50, + 0x0e, 0x6e, 0x10, 0x0e, + 0xe3, 0x30, 0x0e, 0xe5, + 0x30, 0x0f, 0xf3, 0xe0, + 0x06, 0xe9, 0xe0, 0x0e, + 0xe4, 0x50, 0x0e, 0xf8, + 0x30, 0x23, 0xe2, 0xec, + 0x61, 0x1c, 0xc2, 0x81, + 0x1d, 0xd8, 0xe1, 0x17, + 0xec, 0x21, 0x1d, 0xe6, + 0x21, 0x1d, 0xc4, 0x21, + 0x1d, 0xd8, 0x21, 0x1d, + 0xe8, 0x21, 0x1f, 0x66, + 0x20, 0x9d, 0x3b, 0xbc, + 0x43, 0x3d, 0xb8, 0x03, + 0x39, 0x94, 0x83, 0x39, + 0xcc, 0x58, 0xbc, 0x70, + 0x70, 0x07, 0x77, 0x78, + 0x07, 0x7a, 0x08, 0x07, + 0x7a, 0x48, 0x87, 0x77, + 0x70, 0x87, 0x19, 0xcb, + 0xe7, 0x0e, 0xef, 0x30, + 0x0f, 0xe1, 0xe0, 0x0e, + 0xe9, 0x40, 0x0f, 0xe9, + 0xa0, 0x0f, 0xe5, 0x30, + 0xc3, 0x01, 0x03, 0x73, + 0xa8, 0x07, 0x77, 0x18, + 0x87, 0x5f, 0x98, 0x87, + 0x70, 0x70, 0x87, 0x74, + 0xa0, 0x87, 0x74, 0xd0, + 0x87, 0x72, 0x98, 0x81, + 0x84, 0x41, 0x39, 0xe0, + 0xc3, 0x38, 0xb0, 0x43, + 0x3d, 0x90, 0x43, 0x39, + 0xcc, 0x40, 0xc4, 0xa0, + 0x1d, 0xca, 0xa1, 0x1d, + 0xe0, 0x41, 0x1e, 0xde, + 0xc1, 0x1c, 0x66, 0x24, + 0x63, 0x30, 0x0e, 0xe1, + 0xc0, 0x0e, 0xec, 0x30, + 0x0f, 0xe9, 0x40, 0x0f, + 0xe5, 0x30, 0x43, 0x21, + 0x83, 0x75, 0x18, 0x07, + 0x73, 0x48, 0x87, 0x5f, + 0xa0, 0x87, 0x7c, 0x80, + 0x87, 0x72, 0x98, 0xb1, + 0x94, 0x01, 0x3c, 0x8c, + 0xc3, 0x3c, 0x94, 0xc3, + 0x38, 0xd0, 0x43, 0x3a, + 0xbc, 0x83, 0x3b, 0xcc, + 0xc3, 0x8c, 0xc5, 0x0c, + 0x48, 0x21, 0x15, 0x42, + 0x61, 0x1e, 0xe6, 0x21, + 0x1d, 0xce, 0xc1, 0x1d, + 0x52, 0x81, 0x14, 0x00, + 0x79, 0x20, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, + 0x72, 0x1e, 0x48, 0x20, + 0x43, 0x88, 0x0c, 0x19, + 0x09, 0x72, 0x32, 0x48, + 0x20, 0x23, 0x81, 0x8c, + 0x91, 0x91, 0xd1, 0x44, + 0xa0, 0x10, 0x28, 0x64, + 0x3c, 0x31, 0x32, 0x42, + 0x8e, 0x90, 0x21, 0xa3, + 0x68, 0x20, 0xac, 0x00, + 0x94, 0x92, 0x24, 0x47, + 0x03, 0x00, 0x00, 0x00, + 0x63, 0x6c, 0x61, 0x6e, + 0x67, 0x20, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x31, 0x37, + 0x2e, 0x30, 0x2e, 0x36, + 0x77, 0x63, 0x68, 0x61, + 0x72, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x50, 0x49, + 0x43, 0x20, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x50, + 0x49, 0x45, 0x20, 0x4c, + 0x65, 0x76, 0x65, 0x6c, + 0x75, 0x77, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x66, + 0x72, 0x61, 0x6d, 0x65, + 0x2d, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, + 0x23, 0x08, 0x41, 0x30, + 0x82, 0x10, 0x08, 0x23, + 0x08, 0xc1, 0x30, 0x82, + 0x10, 0x10, 0x23, 0x08, + 0x41, 0x31, 0x43, 0x10, + 0xcc, 0x30, 0x1c, 0x02, + 0x32, 0xc3, 0x90, 0x0c, + 0xca, 0x0c, 0xc3, 0x42, + 0x28, 0x33, 0x0c, 0x4b, + 0xa1, 0xcc, 0x30, 0x2c, + 0x86, 0x22, 0x23, 0x81, + 0x09, 0x4a, 0x85, 0x8d, + 0xcd, 0xae, 0xcd, 0x25, + 0x8d, 0xac, 0xcc, 0x8d, + 0x6e, 0x94, 0x60, 0xc9, + 0x88, 0x8d, 0xcd, 0xae, + 0xcd, 0xa5, 0xed, 0x8d, + 0xac, 0x8e, 0xad, 0xcc, + 0xc5, 0x8c, 0x2d, 0xec, + 0x6c, 0x6e, 0x94, 0x82, + 0x69, 0x9c, 0x07, 0x02, + 0xa9, 0x18, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, + 0x0b, 0x0a, 0x72, 0x28, + 0x87, 0x77, 0x80, 0x07, + 0x7a, 0x58, 0x70, 0x98, + 0x43, 0x3d, 0xb8, 0xc3, + 0x38, 0xb0, 0x43, 0x39, + 0xd0, 0xc3, 0x82, 0xe6, + 0x1c, 0xc6, 0xa1, 0x0d, + 0xe8, 0x41, 0x1e, 0xc2, + 0xc1, 0x1d, 0xe6, 0x21, + 0x1d, 0xe8, 0x21, 0x1d, + 0xde, 0xc1, 0x1d, 0x16, + 0x34, 0xe3, 0x60, 0x0e, + 0xe7, 0x50, 0x0f, 0xe1, + 0x20, 0x0f, 0xe4, 0x40, + 0x0f, 0xe1, 0x20, 0x0f, + 0xe7, 0x50, 0x0e, 0xf4, + 0xb0, 0x80, 0x81, 0x07, + 0x79, 0x28, 0x87, 0x70, + 0x60, 0x07, 0x76, 0x78, + 0x87, 0x71, 0x08, 0x07, + 0x7a, 0x28, 0x07, 0x72, + 0x58, 0x70, 0x9c, 0xc3, + 0x38, 0xb4, 0x01, 0x3b, + 0xa4, 0x83, 0x3d, 0x94, + 0xc3, 0x02, 0x6b, 0x1c, + 0xd8, 0x21, 0x1c, 0xdc, + 0xe1, 0x1c, 0xdc, 0x20, + 0x1c, 0xe4, 0x61, 0x1c, + 0xdc, 0x20, 0x1c, 0xe8, + 0x81, 0x1e, 0xc2, 0x61, + 0x1c, 0xd0, 0xa1, 0x1c, + 0xc8, 0x61, 0x1c, 0xc2, + 0x81, 0x1d, 0xd8, 0x61, + 0xc1, 0x01, 0x0f, 0xf4, + 0x20, 0x0f, 0xe1, 0x50, + 0x0f, 0xf4, 0x80, 0x0e, + 0x0b, 0x88, 0x75, 0x18, + 0x07, 0x73, 0x48, 0x87, + 0x05, 0xcf, 0x38, 0xbc, + 0x83, 0x3b, 0xd8, 0x43, + 0x39, 0xc8, 0xc3, 0x39, + 0x94, 0x83, 0x3b, 0x8c, + 0x43, 0x39, 0x8c, 0x03, + 0x3d, 0xc8, 0x03, 0x3b, + 0x00, 0x00, 0x00, 0x00, + 0xd1, 0x10, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x07, 0xcc, 0x3c, 0xa4, + 0x83, 0x3b, 0x9c, 0x03, + 0x3b, 0x94, 0x03, 0x3d, + 0xa0, 0x83, 0x3c, 0x94, + 0x43, 0x38, 0x90, 0xc3, + 0x01, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, + 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, + 0x94, 0x11, 0x00, 0x00, + 0x33, 0x11, 0x41, 0x10, + 0x8c, 0xc2, 0x4c, 0x44, + 0x10, 0x04, 0xa3, 0x30, + 0x13, 0x01, 0x04, 0x01, + 0x29, 0x0c, 0x1b, 0x10, + 0x03, 0x31, 0x00, 0xc3, + 0x06, 0x84, 0x60, 0x0c, + 0xc0, 0xb0, 0x01, 0x11, + 0x14, 0x04, 0xb0, 0x04, + 0x00, 0x00, 0x00, 0x00, + 0x71, 0x20, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x32, 0x0e, 0x10, 0x22, + 0x84, 0x00, 0xda, 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + }; + writer.append_bytes(&rest_module_block); + + const symtab_block align(4) = .{ + 0x65, 0x0c, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, + 0x12, 0x03, 0x94, 0xf0, + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, + 0x00, 0x24, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + }; + writer.append_bytes(&symtab_block); + + const strtab_block align(4) = .{ + 0x5d, 0x0c, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, + 0x12, 0x03, 0x94, 0x66, + 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x61, 0x69, 0x6e, + 0x31, 0x37, 0x2e, 0x30, + 0x2e, 0x36, 0x78, 0x38, + 0x36, 0x5f, 0x36, 0x34, + 0x2d, 0x70, 0x63, 0x2d, + 0x6c, 0x69, 0x6e, 0x75, + 0x78, 0x2d, 0x67, 0x6e, + 0x75, 0x6c, 0x6c, 0x76, + 0x6d, 0x2d, 0x6c, 0x69, + 0x6e, 0x6b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + }; + writer.append_bytes(&strtab_block); + } + + fn write_module_version(writer: *Writer) void { + writer.emit_record(u64, @intFromEnum(ModuleCode.version), &.{2}, 0); + } + + fn enter_block_info_block(writer: *Writer) void { + writer.enter_subblock(BlockId.block_info, 2); + writer.block_info_current_block_id = ~@as(u32, 0); + writer.block_info_records.clear(); + } + + fn write_block_info(writer: *Writer) void { + writer.enter_block_info_block(); + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 3 }); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + abbreviation.add_with_encoding(.{ .encoding = .array }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.value_symtab), abbreviation); + if (block_info_abbrev != @intFromEnum(ValueSymtabAbbreviationId.entry8)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ValueSymtabCode.entry)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + abbreviation.add_with_encoding(.{ .encoding = .array }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 7 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.value_symtab), abbreviation); + if (block_info_abbrev != @intFromEnum(ValueSymtabAbbreviationId.entry7)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ValueSymtabCode.entry)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + abbreviation.add_with_encoding(.{ .encoding = .array }); + abbreviation.add_with_encoding(.{ .encoding = .char6 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.value_symtab), abbreviation); + if (block_info_abbrev != @intFromEnum(ValueSymtabAbbreviationId.entry6)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ValueSymtabCode.bb_entry)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + abbreviation.add_with_encoding(.{ .encoding = .array }); + abbreviation.add_with_encoding(.{ .encoding = .char6 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.value_symtab), abbreviation); + if (block_info_abbrev != @intFromEnum(ValueSymtabAbbreviationId.bb_entry6)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ConstantCode.set_type)); + + // TODO: compute + const type_indices_needed_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = type_indices_needed_bits }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.constant), abbreviation); + if (block_info_abbrev != @intFromEnum(ConstantAbbreviationId.set_type)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ConstantCode.integer)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.constant), abbreviation); + if (block_info_abbrev != @intFromEnum(ConstantAbbreviationId.integer)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ConstantCode.cast)); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + + // TODO: compute + const type_indices_needed_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = type_indices_needed_bits }); + + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.constant), abbreviation); + if (block_info_abbrev != @intFromEnum(ConstantAbbreviationId.cast)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(ConstantCode.null)); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.constant), abbreviation); + if (block_info_abbrev != @intFromEnum(ConstantAbbreviationId.null)) unreachable; + } + + // TODO: check FIXME in LLVM code + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.load)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + + // TODO: compute + const type_indices_needed_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = type_indices_needed_bits }); + + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 4 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 1 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.load)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.unary_op)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.unary_op)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.unary_op)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.unary_op_flags)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.binary_op)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.binary_op)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.binary_op)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.binary_op_flags)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.cast)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + + // TODO: compute + const type_indices_needed_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = type_indices_needed_bits }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.cast)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.cast)); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + + // TODO: compute + const type_indices_needed_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = type_indices_needed_bits }); + + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 4 }); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 8 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.cast_flags)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.ret)); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.ret_void)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.ret)); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.ret_val)) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.@"unreachable")); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.@"unreachable")) unreachable; + } + + { + const abbreviation = writer.abbreviation_buffer.append(.{}); + abbreviation.add_literal(@intFromEnum(FunctionCode.gep)); + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = 1 }); + + // TODO: compute + const dest_ty_bits = 0; + abbreviation.add_with_encoding(.{ .encoding = .fixed, .value = dest_ty_bits }); + + abbreviation.add_with_encoding(.{ .encoding = .array }); + abbreviation.add_with_encoding(.{ .encoding = .vbr, .value = 6 }); + + const block_info_abbrev = writer.emit_block_info_abbrev(@intFromEnum(BlockId.function), abbreviation); + if (block_info_abbrev != @intFromEnum(FunctionAbbreviationId.gep)) unreachable; + } + + writer.exit_block(); + } + + fn switch_to_block_id(writer: *Writer, block_id: u32) void { + if (block_id != writer.block_info_current_block_id) { + const v = [1]u32{block_id}; + writer.emit_record(u32, @intFromEnum(BlockInfoCode.set_bid), &v, 0); + writer.block_info_current_block_id = block_id; + } + } + + fn get_block_info(writer: *Writer, block_id: u32) ?*BlockInfo { + if (writer.block_info_records.length > 0) { + const last = &writer.block_info_records.slice()[writer.block_info_records.length - 1]; + if (last.id == block_id) { + return last; + } + + for (writer.block_info_records.slice()) |*block_info| { + if (block_info.id == block_id) { + return block_info; + } + } + } + + return null; + } + + fn get_or_create_block_info(writer: *Writer, block_id: u32) *BlockInfo { + if (writer.get_block_info(block_id)) |block_info| return block_info else { + const result = writer.block_info_records.append(.{ + .id = block_id, + }); + + return result; + } + } + + fn emit_block_info_abbrev(writer: *Writer, block_id: u32, abbreviation: *Abbreviation) u32 { + writer.switch_to_block_id(block_id); + writer.encode_abbreviation(abbreviation); + const block_info = writer.get_or_create_block_info(block_id); + _ = block_info.abbreviations.append(abbreviation); + return block_info.abbreviations.length - 1 + @intFromEnum(FixedAbbreviationId.first_application_abbrev); } fn write_raw(writer: *Writer, value: u32) void { @@ -1288,7 +2309,7 @@ const Bitcode = struct { writer.emit_vbr64(v, 6); } } else { - writer.emit_record_with_abbrev(u32, abbreviation, values, null, code); + writer.emit_record_with_abbrev(T, abbreviation, values, null, code); } } @@ -1441,564 +2462,6 @@ fn write_bitcode() void { var writer = Bitcode.Writer{}; writer.write(); - const identification_block = .{ - 0x35, 0x14, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, - 0x62, 0x0c, 0x30, 0x24, - 0x4a, 0x59, 0xbe, 0x66, - 0xbd, 0xfb, 0xb4, 0xaf, - 0x0b, 0x51, 0x80, 0x4c, - 0x01, 0x00, 0x00, 0x00, - }; - std.testing.expectEqualSlices(u8, &identification_block, writer.get_byte_slice()[4..]) catch unreachable; - - const module_block align(4) = [_]u8{ - 0x21, 0x0c, 0x00, 0x00, - 0xe6, 0x01, 0x00, 0x00, - 0x0b, 0x02, 0x21, 0x00, - 0x02, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, - 0x07, 0x81, 0x23, 0x91, - 0x41, 0xc8, 0x04, 0x49, - 0x06, 0x10, 0x32, 0x39, - 0x92, 0x01, 0x84, 0x0c, - 0x25, 0x05, 0x08, 0x19, - 0x1e, 0x04, 0x8b, 0x62, - 0x80, 0x0c, 0x45, 0x02, - 0x42, 0x92, 0x0b, 0x42, - 0x64, 0x10, 0x32, 0x14, - 0x38, 0x08, 0x18, 0x4b, - 0x0a, 0x32, 0x32, 0x88, - 0x48, 0x70, 0xc4, 0x21, - 0x23, 0x44, 0x12, 0x87, - 0x8c, 0x10, 0x41, 0x92, - 0x02, 0x64, 0xc8, 0x08, - 0xb1, 0x14, 0x20, 0x43, - 0x46, 0x88, 0x20, 0xc9, - 0x01, 0x32, 0x32, 0x84, - 0x18, 0x2a, 0x28, 0x2a, - 0x90, 0x31, 0x7c, 0xb0, - 0x5c, 0x91, 0x20, 0xc3, - 0xc8, 0x00, 0x00, 0x00, - 0x89, 0x20, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, - 0x22, 0x66, 0x04, 0x10, - 0xb2, 0x42, 0x82, 0xc9, - 0x10, 0x52, 0x42, 0x82, - 0xc9, 0x90, 0x71, 0xc2, - 0x50, 0x48, 0x0a, 0x09, - 0x26, 0x43, 0xc6, 0x05, - 0x42, 0x32, 0x26, 0x08, - 0x0a, 0x9a, 0x23, 0x00, - 0x83, 0x32, 0x24, 0x18, - 0x08, 0x18, 0x01, 0x00, - 0x51, 0x18, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, - 0x1b, 0x58, 0x23, 0xf8, - 0xff, 0xff, 0xff, 0xff, - 0x01, 0x70, 0x00, 0x09, - 0x28, 0x03, 0x80, 0x0b, - 0xc2, 0x40, 0x20, 0xcc, - 0x41, 0x1e, 0xc2, 0xa1, - 0x1d, 0xca, 0xa1, 0x0d, - 0xe0, 0xe1, 0x1d, 0xd2, - 0xc1, 0x1d, 0xe8, 0xa1, - 0x1c, 0xe4, 0x01, 0x08, - 0x07, 0x76, 0x60, 0x07, - 0x80, 0x68, 0x87, 0x74, - 0x70, 0x87, 0x36, 0x60, - 0x87, 0x72, 0x38, 0x87, - 0x70, 0x60, 0x87, 0x36, - 0xb0, 0x87, 0x72, 0x18, - 0x07, 0x7a, 0x78, 0x07, - 0x79, 0x68, 0x83, 0x7b, - 0x48, 0x07, 0x72, 0xa0, - 0x07, 0x74, 0x00, 0xe0, - 0x00, 0x20, 0xdc, 0xe1, - 0x1d, 0xda, 0x80, 0x1e, - 0xe4, 0x21, 0x1c, 0xe0, - 0x01, 0x1e, 0xd2, 0xc1, - 0x1d, 0xce, 0xa1, 0x0d, - 0xda, 0x21, 0x1c, 0xe8, - 0x01, 0x1d, 0x00, 0x7a, - 0x90, 0x87, 0x7a, 0x28, - 0x07, 0x80, 0x98, 0x07, - 0x7a, 0x08, 0x87, 0x71, - 0x58, 0x87, 0x36, 0x80, - 0x07, 0x79, 0x78, 0x07, - 0x7a, 0x28, 0x87, 0x71, - 0xa0, 0x87, 0x77, 0x90, - 0x87, 0x36, 0x10, 0x87, - 0x7a, 0x30, 0x07, 0x73, - 0x28, 0x07, 0x79, 0x68, - 0x83, 0x79, 0x48, 0x07, - 0x7d, 0x28, 0x07, 0x00, - 0x0f, 0x00, 0x82, 0x1e, - 0xc2, 0x41, 0x1e, 0xce, - 0xa1, 0x1c, 0xe8, 0xa1, - 0x0d, 0xc6, 0x01, 0x1e, - 0xea, 0x01, 0xc0, 0x07, - 0x3c, 0xb0, 0x83, 0x36, - 0xb0, 0x03, 0x3a, 0x00, - 0x08, 0x7a, 0x08, 0x07, - 0x79, 0x38, 0x87, 0x72, - 0xa0, 0x87, 0x36, 0x30, - 0x87, 0x72, 0x08, 0x07, - 0x7a, 0xa8, 0x07, 0x79, - 0x28, 0x87, 0x79, 0x00, - 0xd6, 0x60, 0x1c, 0xda, - 0xe1, 0x1d, 0xec, 0x81, - 0x0d, 0xd6, 0x60, 0x1c, - 0xf0, 0x01, 0x0f, 0xd8, - 0x60, 0x0d, 0xcc, 0x01, - 0x1f, 0xe6, 0x41, 0x1e, - 0xd8, 0x60, 0x0d, 0xda, - 0xa1, 0x1d, 0xf0, 0x81, - 0x0d, 0xd6, 0x60, 0x1e, - 0xe6, 0xa1, 0x1c, 0xd8, - 0x60, 0x0d, 0xe6, 0x61, - 0x1e, 0xca, 0x41, 0x0e, - 0xd8, 0x60, 0x0d, 0xf0, - 0x01, 0x0f, 0xee, 0x00, - 0x20, 0xe8, 0xa1, 0x1e, - 0xdc, 0xa1, 0x1c, 0xda, - 0x60, 0x1c, 0xe0, 0xa1, - 0x1e, 0x80, 0x73, 0x28, - 0x07, 0x77, 0x28, 0x07, - 0x79, 0x48, 0x87, 0x71, - 0x00, 0x36, 0x10, 0x42, - 0x00, 0x90, 0xc2, 0x06, - 0x62, 0x10, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, - 0x49, 0x18, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, - 0x13, 0x86, 0x40, 0x18, - 0x00, 0x00, 0x00, 0x00, - 0x13, 0x26, 0x7c, 0xc0, - 0x03, 0x3b, 0xf8, 0x05, - 0x3b, 0xa0, 0x83, 0x36, - 0x80, 0x87, 0x71, 0x68, - 0x03, 0x76, 0x48, 0x07, - 0x77, 0xa8, 0x07, 0x7c, - 0x68, 0x83, 0x73, 0x70, - 0x87, 0x7a, 0xd8, 0x60, - 0x0a, 0xe5, 0xd0, 0x06, - 0xed, 0xa0, 0x07, 0xe5, - 0xd0, 0x06, 0xf0, 0x20, - 0x07, 0x77, 0x00, 0x07, - 0x7a, 0x30, 0x07, 0x72, - 0xa0, 0x07, 0x73, 0x20, - 0x07, 0x6d, 0x00, 0x0f, - 0x72, 0x70, 0x07, 0x71, - 0xa0, 0x07, 0x73, 0x20, - 0x07, 0x7a, 0x30, 0x07, - 0x72, 0xd0, 0x06, 0xf0, - 0x20, 0x07, 0x77, 0x20, - 0x07, 0x7a, 0x60, 0x07, - 0x74, 0xa0, 0x07, 0x76, - 0x40, 0x07, 0x6d, 0x90, - 0x0e, 0x76, 0x40, 0x07, - 0x7a, 0x60, 0x07, 0x74, - 0xd0, 0x06, 0xe6, 0x80, - 0x07, 0x70, 0xa0, 0x07, - 0x71, 0x20, 0x07, 0x78, - 0xd0, 0x06, 0xee, 0x80, - 0x07, 0x7a, 0x10, 0x07, - 0x76, 0xa0, 0x07, 0x73, - 0x20, 0x07, 0x7a, 0x60, - 0x07, 0x74, 0xd0, 0x06, - 0xb3, 0x10, 0x07, 0x72, - 0x80, 0x07, 0x1a, 0x21, - 0x4c, 0x0e, 0x13, 0x36, - 0xdb, 0xde, 0x6e, 0xb1, - 0xd3, 0xee, 0xf5, 0x90, - 0x0a, 0x20, 0x04, 0x00, - 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x02, - 0x90, 0xd8, 0x20, 0x50, - 0x54, 0x3d, 0x00, 0x00, - 0x20, 0x0b, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, - 0x32, 0x1e, 0x98, 0x0c, - 0x19, 0x11, 0x4c, 0x90, - 0x8c, 0x09, 0x26, 0x47, - 0xc6, 0x04, 0x43, 0x4a, - 0x09, 0x14, 0x42, 0x41, - 0x14, 0x41, 0x39, 0x00, - 0xb1, 0x18, 0x00, 0x00, - 0xb9, 0x00, 0x00, 0x00, - 0x33, 0x08, 0x80, 0x1c, - 0xc4, 0xe1, 0x1c, 0x66, - 0x14, 0x01, 0x3d, 0x88, - 0x43, 0x38, 0x84, 0xc3, - 0x8c, 0x42, 0x80, 0x07, - 0x79, 0x78, 0x07, 0x73, - 0x98, 0x71, 0x0c, 0xe6, - 0x00, 0x0f, 0xed, 0x10, - 0x0e, 0xf4, 0x80, 0x0e, - 0x33, 0x0c, 0x42, 0x1e, - 0xc2, 0xc1, 0x1d, 0xce, - 0xa1, 0x1c, 0x66, 0x30, - 0x05, 0x3d, 0x88, 0x43, - 0x38, 0x84, 0x83, 0x1b, - 0xcc, 0x03, 0x3d, 0xc8, - 0x43, 0x3d, 0x8c, 0x03, - 0x3d, 0xcc, 0x78, 0x8c, - 0x74, 0x70, 0x07, 0x7b, - 0x08, 0x07, 0x79, 0x48, - 0x87, 0x70, 0x70, 0x07, - 0x7a, 0x70, 0x03, 0x76, - 0x78, 0x87, 0x70, 0x20, - 0x87, 0x19, 0xcc, 0x11, - 0x0e, 0xec, 0x90, 0x0e, - 0xe1, 0x30, 0x0f, 0x6e, - 0x30, 0x0f, 0xe3, 0xf0, - 0x0e, 0xf0, 0x50, 0x0e, - 0x33, 0x10, 0xc4, 0x1d, - 0xde, 0x21, 0x1c, 0xd8, - 0x21, 0x1d, 0xc2, 0x61, - 0x1e, 0x66, 0x30, 0x89, - 0x3b, 0xbc, 0x83, 0x3b, - 0xd0, 0x43, 0x39, 0xb4, - 0x03, 0x3c, 0xbc, 0x83, - 0x3c, 0x84, 0x03, 0x3b, - 0xcc, 0xf0, 0x14, 0x76, - 0x60, 0x07, 0x7b, 0x68, - 0x07, 0x37, 0x68, 0x87, - 0x72, 0x68, 0x07, 0x37, - 0x80, 0x87, 0x70, 0x90, - 0x87, 0x70, 0x60, 0x07, - 0x76, 0x28, 0x07, 0x76, - 0xf8, 0x05, 0x76, 0x78, - 0x87, 0x77, 0x80, 0x87, - 0x5f, 0x08, 0x87, 0x71, - 0x18, 0x87, 0x72, 0x98, - 0x87, 0x79, 0x98, 0x81, - 0x2c, 0xee, 0xf0, 0x0e, - 0xee, 0xe0, 0x0e, 0xf5, - 0xc0, 0x0e, 0xec, 0x30, - 0x03, 0x62, 0xc8, 0xa1, - 0x1c, 0xe4, 0xa1, 0x1c, - 0xcc, 0xa1, 0x1c, 0xe4, - 0xa1, 0x1c, 0xdc, 0x61, - 0x1c, 0xca, 0x21, 0x1c, - 0xc4, 0x81, 0x1d, 0xca, - 0x61, 0x06, 0xd6, 0x90, - 0x43, 0x39, 0xc8, 0x43, - 0x39, 0x98, 0x43, 0x39, - 0xc8, 0x43, 0x39, 0xb8, - 0xc3, 0x38, 0x94, 0x43, - 0x38, 0x88, 0x03, 0x3b, - 0x94, 0xc3, 0x2f, 0xbc, - 0x83, 0x3c, 0xfc, 0x82, - 0x3b, 0xd4, 0x03, 0x3b, - 0xb0, 0xc3, 0x0c, 0xc7, - 0x69, 0x87, 0x70, 0x58, - 0x87, 0x72, 0x70, 0x83, - 0x74, 0x68, 0x07, 0x78, - 0x60, 0x87, 0x74, 0x18, - 0x87, 0x74, 0xa0, 0x87, - 0x19, 0xce, 0x53, 0x0f, - 0xee, 0x00, 0x0f, 0xf2, - 0x50, 0x0e, 0xe4, 0x90, - 0x0e, 0xe3, 0x40, 0x0f, - 0xe1, 0x20, 0x0e, 0xec, - 0x50, 0x0e, 0x33, 0x20, - 0x28, 0x1d, 0xdc, 0xc1, - 0x1e, 0xc2, 0x41, 0x1e, - 0xd2, 0x21, 0x1c, 0xdc, - 0x81, 0x1e, 0xdc, 0xe0, - 0x1c, 0xe4, 0xe1, 0x1d, - 0xea, 0x01, 0x1e, 0x66, - 0x18, 0x51, 0x38, 0xb0, - 0x43, 0x3a, 0x9c, 0x83, - 0x3b, 0xcc, 0x50, 0x24, - 0x76, 0x60, 0x07, 0x7b, - 0x68, 0x07, 0x37, 0x60, - 0x87, 0x77, 0x78, 0x07, - 0x78, 0x98, 0x51, 0x4c, - 0xf4, 0x90, 0x0f, 0xf0, - 0x50, 0x0e, 0x33, 0x1e, - 0x6a, 0x1e, 0xca, 0x61, - 0x1c, 0xe8, 0x21, 0x1d, - 0xde, 0xc1, 0x1d, 0x7e, - 0x01, 0x1e, 0xe4, 0xa1, - 0x1c, 0xcc, 0x21, 0x1d, - 0xf0, 0x61, 0x06, 0x54, - 0x85, 0x83, 0x38, 0xcc, - 0xc3, 0x3b, 0xb0, 0x43, - 0x3d, 0xd0, 0x43, 0x39, - 0xfc, 0xc2, 0x3c, 0xe4, - 0x43, 0x3b, 0x88, 0xc3, - 0x3b, 0xb0, 0xc3, 0x8c, - 0xc5, 0x0a, 0x87, 0x79, - 0x98, 0x87, 0x77, 0x18, - 0x87, 0x74, 0x08, 0x07, - 0x7a, 0x28, 0x07, 0x72, - 0x98, 0x81, 0x5c, 0xe3, - 0x10, 0x0e, 0xec, 0xc0, - 0x0e, 0xe5, 0x50, 0x0e, - 0xf3, 0x30, 0x23, 0xc1, - 0xd2, 0x41, 0x1e, 0xe4, - 0xe1, 0x17, 0xd8, 0xe1, - 0x1d, 0xde, 0x01, 0x1e, - 0x66, 0x48, 0x19, 0x3b, - 0xb0, 0x83, 0x3d, 0xb4, - 0x83, 0x1b, 0x84, 0xc3, - 0x38, 0x8c, 0x43, 0x39, - 0xcc, 0xc3, 0x3c, 0xb8, - 0xc1, 0x39, 0xc8, 0xc3, - 0x3b, 0xd4, 0x03, 0x3c, - 0xcc, 0x48, 0xb4, 0x71, - 0x08, 0x07, 0x76, 0x60, - 0x07, 0x71, 0x08, 0x87, - 0x71, 0x58, 0x87, 0x19, - 0xdb, 0xc6, 0x0e, 0xec, - 0x60, 0x0f, 0xed, 0xe0, - 0x06, 0xf0, 0x20, 0x0f, - 0xe5, 0x30, 0x0f, 0xe5, - 0x20, 0x0f, 0xf6, 0x50, - 0x0e, 0x6e, 0x10, 0x0e, - 0xe3, 0x30, 0x0e, 0xe5, - 0x30, 0x0f, 0xf3, 0xe0, - 0x06, 0xe9, 0xe0, 0x0e, - 0xe4, 0x50, 0x0e, 0xf8, - 0x30, 0x23, 0xe2, 0xec, - 0x61, 0x1c, 0xc2, 0x81, - 0x1d, 0xd8, 0xe1, 0x17, - 0xec, 0x21, 0x1d, 0xe6, - 0x21, 0x1d, 0xc4, 0x21, - 0x1d, 0xd8, 0x21, 0x1d, - 0xe8, 0x21, 0x1f, 0x66, - 0x20, 0x9d, 0x3b, 0xbc, - 0x43, 0x3d, 0xb8, 0x03, - 0x39, 0x94, 0x83, 0x39, - 0xcc, 0x58, 0xbc, 0x70, - 0x70, 0x07, 0x77, 0x78, - 0x07, 0x7a, 0x08, 0x07, - 0x7a, 0x48, 0x87, 0x77, - 0x70, 0x87, 0x19, 0xcb, - 0xe7, 0x0e, 0xef, 0x30, - 0x0f, 0xe1, 0xe0, 0x0e, - 0xe9, 0x40, 0x0f, 0xe9, - 0xa0, 0x0f, 0xe5, 0x30, - 0xc3, 0x01, 0x03, 0x73, - 0xa8, 0x07, 0x77, 0x18, - 0x87, 0x5f, 0x98, 0x87, - 0x70, 0x70, 0x87, 0x74, - 0xa0, 0x87, 0x74, 0xd0, - 0x87, 0x72, 0x98, 0x81, - 0x84, 0x41, 0x39, 0xe0, - 0xc3, 0x38, 0xb0, 0x43, - 0x3d, 0x90, 0x43, 0x39, - 0xcc, 0x40, 0xc4, 0xa0, - 0x1d, 0xca, 0xa1, 0x1d, - 0xe0, 0x41, 0x1e, 0xde, - 0xc1, 0x1c, 0x66, 0x24, - 0x63, 0x30, 0x0e, 0xe1, - 0xc0, 0x0e, 0xec, 0x30, - 0x0f, 0xe9, 0x40, 0x0f, - 0xe5, 0x30, 0x43, 0x21, - 0x83, 0x75, 0x18, 0x07, - 0x73, 0x48, 0x87, 0x5f, - 0xa0, 0x87, 0x7c, 0x80, - 0x87, 0x72, 0x98, 0xb1, - 0x94, 0x01, 0x3c, 0x8c, - 0xc3, 0x3c, 0x94, 0xc3, - 0x38, 0xd0, 0x43, 0x3a, - 0xbc, 0x83, 0x3b, 0xcc, - 0xc3, 0x8c, 0xc5, 0x0c, - 0x48, 0x21, 0x15, 0x42, - 0x61, 0x1e, 0xe6, 0x21, - 0x1d, 0xce, 0xc1, 0x1d, - 0x52, 0x81, 0x14, 0x00, - 0x79, 0x20, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, - 0x72, 0x1e, 0x48, 0x20, - 0x43, 0x88, 0x0c, 0x19, - 0x09, 0x72, 0x32, 0x48, - 0x20, 0x23, 0x81, 0x8c, - 0x91, 0x91, 0xd1, 0x44, - 0xa0, 0x10, 0x28, 0x64, - 0x3c, 0x31, 0x32, 0x42, - 0x8e, 0x90, 0x21, 0xa3, - 0x68, 0x20, 0xac, 0x00, - 0x94, 0x92, 0x24, 0x47, - 0x03, 0x00, 0x00, 0x00, - 0x63, 0x6c, 0x61, 0x6e, - 0x67, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x31, 0x37, - 0x2e, 0x30, 0x2e, 0x36, - 0x77, 0x63, 0x68, 0x61, - 0x72, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x50, 0x49, - 0x43, 0x20, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x50, - 0x49, 0x45, 0x20, 0x4c, - 0x65, 0x76, 0x65, 0x6c, - 0x75, 0x77, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x66, - 0x72, 0x61, 0x6d, 0x65, - 0x2d, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, - 0x23, 0x08, 0x41, 0x30, - 0x82, 0x10, 0x08, 0x23, - 0x08, 0xc1, 0x30, 0x82, - 0x10, 0x10, 0x23, 0x08, - 0x41, 0x31, 0x43, 0x10, - 0xcc, 0x30, 0x1c, 0x02, - 0x32, 0xc3, 0x90, 0x0c, - 0xca, 0x0c, 0xc3, 0x42, - 0x28, 0x33, 0x0c, 0x4b, - 0xa1, 0xcc, 0x30, 0x2c, - 0x86, 0x22, 0x23, 0x81, - 0x09, 0x4a, 0x85, 0x8d, - 0xcd, 0xae, 0xcd, 0x25, - 0x8d, 0xac, 0xcc, 0x8d, - 0x6e, 0x94, 0x60, 0xc9, - 0x88, 0x8d, 0xcd, 0xae, - 0xcd, 0xa5, 0xed, 0x8d, - 0xac, 0x8e, 0xad, 0xcc, - 0xc5, 0x8c, 0x2d, 0xec, - 0x6c, 0x6e, 0x94, 0x82, - 0x69, 0x9c, 0x07, 0x02, - 0xa9, 0x18, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, - 0x0b, 0x0a, 0x72, 0x28, - 0x87, 0x77, 0x80, 0x07, - 0x7a, 0x58, 0x70, 0x98, - 0x43, 0x3d, 0xb8, 0xc3, - 0x38, 0xb0, 0x43, 0x39, - 0xd0, 0xc3, 0x82, 0xe6, - 0x1c, 0xc6, 0xa1, 0x0d, - 0xe8, 0x41, 0x1e, 0xc2, - 0xc1, 0x1d, 0xe6, 0x21, - 0x1d, 0xe8, 0x21, 0x1d, - 0xde, 0xc1, 0x1d, 0x16, - 0x34, 0xe3, 0x60, 0x0e, - 0xe7, 0x50, 0x0f, 0xe1, - 0x20, 0x0f, 0xe4, 0x40, - 0x0f, 0xe1, 0x20, 0x0f, - 0xe7, 0x50, 0x0e, 0xf4, - 0xb0, 0x80, 0x81, 0x07, - 0x79, 0x28, 0x87, 0x70, - 0x60, 0x07, 0x76, 0x78, - 0x87, 0x71, 0x08, 0x07, - 0x7a, 0x28, 0x07, 0x72, - 0x58, 0x70, 0x9c, 0xc3, - 0x38, 0xb4, 0x01, 0x3b, - 0xa4, 0x83, 0x3d, 0x94, - 0xc3, 0x02, 0x6b, 0x1c, - 0xd8, 0x21, 0x1c, 0xdc, - 0xe1, 0x1c, 0xdc, 0x20, - 0x1c, 0xe4, 0x61, 0x1c, - 0xdc, 0x20, 0x1c, 0xe8, - 0x81, 0x1e, 0xc2, 0x61, - 0x1c, 0xd0, 0xa1, 0x1c, - 0xc8, 0x61, 0x1c, 0xc2, - 0x81, 0x1d, 0xd8, 0x61, - 0xc1, 0x01, 0x0f, 0xf4, - 0x20, 0x0f, 0xe1, 0x50, - 0x0f, 0xf4, 0x80, 0x0e, - 0x0b, 0x88, 0x75, 0x18, - 0x07, 0x73, 0x48, 0x87, - 0x05, 0xcf, 0x38, 0xbc, - 0x83, 0x3b, 0xd8, 0x43, - 0x39, 0xc8, 0xc3, 0x39, - 0x94, 0x83, 0x3b, 0x8c, - 0x43, 0x39, 0x8c, 0x03, - 0x3d, 0xc8, 0x03, 0x3b, - 0x00, 0x00, 0x00, 0x00, - 0xd1, 0x10, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, - 0x07, 0xcc, 0x3c, 0xa4, - 0x83, 0x3b, 0x9c, 0x03, - 0x3b, 0x94, 0x03, 0x3d, - 0xa0, 0x83, 0x3c, 0x94, - 0x43, 0x38, 0x90, 0xc3, - 0x01, 0x00, 0x00, 0x00, - 0x61, 0x20, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, - 0x13, 0x04, 0x41, 0x2c, - 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x94, 0x11, 0x00, 0x00, - 0x33, 0x11, 0x41, 0x10, - 0x8c, 0xc2, 0x4c, 0x44, - 0x10, 0x04, 0xa3, 0x30, - 0x13, 0x01, 0x04, 0x01, - 0x29, 0x0c, 0x1b, 0x10, - 0x03, 0x31, 0x00, 0xc3, - 0x06, 0x84, 0x60, 0x0c, - 0xc0, 0xb0, 0x01, 0x11, - 0x14, 0x04, 0xb0, 0x04, - 0x00, 0x00, 0x00, 0x00, - 0x71, 0x20, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, - 0x32, 0x0e, 0x10, 0x22, - 0x84, 0x00, 0xda, 0x03, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - writer.append_bytes(&module_block); - - const symtab_block align(4) = .{ - 0x65, 0x0c, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, - 0x12, 0x03, 0x94, 0xf0, - 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, - 0x00, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - writer.append_bytes(&symtab_block); - - const strtab_block align(4) = .{ - 0x5d, 0x0c, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, - 0x12, 0x03, 0x94, 0x66, - 0x00, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, - 0x31, 0x37, 0x2e, 0x30, - 0x2e, 0x36, 0x78, 0x38, - 0x36, 0x5f, 0x36, 0x34, - 0x2d, 0x70, 0x63, 0x2d, - 0x6c, 0x69, 0x6e, 0x75, - 0x78, 0x2d, 0x67, 0x6e, - 0x75, 0x6c, 0x6c, 0x76, - 0x6d, 0x2d, 0x6c, 0x69, - 0x6e, 0x6b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - writer.append_bytes(&strtab_block); const context = LLVM.Context.create(); const module = context.parse_bitcode(writer.get_byte_slice()) orelse exit(1); diff --git a/bootstrap/library.zig b/bootstrap/library.zig index 2e32e55..e39c063 100644 --- a/bootstrap/library.zig +++ b/bootstrap/library.zig @@ -175,6 +175,10 @@ pub fn PinnedArrayAdvanced(comptime T: type, comptime MaybeIndex: ?type, comptim const Array = @This(); + pub fn clear(array: *Array) void { + array.length = 0; + } + pub fn const_slice(array: *const Array) []const T { return array.pointer[0..array.length]; }