diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-20 00:35:09 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-20 00:36:44 -0700 |
| commit | 0576086395774389a9f38d960f9ed5102a813bdb (patch) | |
| tree | 43558a9b825a3312865ec76d2da7f6980d0b1a70 /src/codegen/c.zig | |
| parent | 3ef34feaeb3a18926bead1981e5ce577382da38e (diff) | |
| download | zig-0576086395774389a9f38d960f9ed5102a813bdb.tar.gz zig-0576086395774389a9f38d960f9ed5102a813bdb.zip | |
stage2: remove Value.Tag.abi_align_default
and make Decl alignment & linksection, and struct & union field alignment
be scalar values, not Value values.
YAGNI
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 48 |
1 files changed, 17 insertions, 31 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 5c023c3dff..23ccdc007b 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -245,7 +245,7 @@ pub const Function = struct { ty, decl_c_value, .Const, - Value.initTag(.abi_align_default), + 0, ); try writer.writeAll(" = "); try f.object.dg.renderValue(writer, ty, val); @@ -267,10 +267,10 @@ pub const Function = struct { } fn allocLocal(f: *Function, ty: Type, mutability: Mutability) !CValue { - return f.allocAlignedLocal(ty, mutability, Value.initTag(.abi_align_default)); + return f.allocAlignedLocal(ty, mutability, 0); } - fn allocAlignedLocal(f: *Function, ty: Type, mutability: Mutability, alignment: Value) !CValue { + fn allocAlignedLocal(f: *Function, ty: Type, mutability: Mutability, alignment: u32) !CValue { const local_value = f.allocLocalValue(); try f.object.dg.renderTypeAndName( f.object.writer(), @@ -854,8 +854,7 @@ pub const DeclGen = struct { try w.writeAll(", "); } const name = CValue{ .arg = index }; - const alignment = Value.initTag(.abi_align_default); - try dg.renderTypeAndName(w, dg.decl.ty.fnParamType(index), name, .Mut, alignment); + try dg.renderTypeAndName(w, dg.decl.ty.fnParamType(index), name, .Mut, 0); params_written += 1; } @@ -928,8 +927,7 @@ pub const DeclGen = struct { var ptr_type_buf: Type.SlicePtrFieldTypeBuffer = undefined; const ptr_type = t.slicePtrFieldType(&ptr_type_buf); const ptr_name = CValue{ .bytes = "ptr" }; - const ptr_alignment = Value.initTag(.abi_align_default); - try dg.renderTypeAndName(bw, ptr_type, ptr_name, .Mut, ptr_alignment); + try dg.renderTypeAndName(bw, ptr_type, ptr_name, .Mut, 0); const ptr_sentinel = ptr_type.ptrInfo().data.sentinel; const child_type = t.childType(); @@ -1018,7 +1016,7 @@ pub const DeclGen = struct { try name.writer().print("field_{d}", .{i}); try buffer.append(' '); - try dg.renderTypeAndName(writer, field_ty, .{ .bytes = name.items }, .Mut, Value.initTag(.abi_align_default)); + try dg.renderTypeAndName(writer, field_ty, .{ .bytes = name.items }, .Mut, 0); try buffer.appendSlice(";\n"); } } @@ -1056,7 +1054,7 @@ pub const DeclGen = struct { const name: CValue = .{ .bytes = "tag" }; try buffer.appendSlice("struct {\n "); if (layout.tag_size != 0) { - try dg.renderTypeAndName(buffer.writer(), tag_ty, name, .Mut, Value.initTag(.abi_align_default)); + try dg.renderTypeAndName(buffer.writer(), tag_ty, name, .Mut, 0); try buffer.appendSlice(";\n"); } } @@ -1106,8 +1104,7 @@ pub const DeclGen = struct { try bw.writeAll("typedef struct { "); const payload_name = CValue{ .bytes = "payload" }; - const alignment = Value.initTag(.abi_align_default); - try dg.renderTypeAndName(bw, child_type, payload_name, .Mut, alignment); + try dg.renderTypeAndName(bw, child_type, payload_name, .Mut, 0); try bw.writeAll("; uint16_t error; } "); const name_index = buffer.items.len; if (err_set_type.castTag(.error_set_inferred)) |inf_err_set_payload| { @@ -1172,8 +1169,7 @@ pub const DeclGen = struct { try bw.writeAll("typedef struct { "); const payload_name = CValue{ .bytes = "payload" }; - const alignment = Value.initTag(.abi_align_default); - try dg.renderTypeAndName(bw, child_type, payload_name, .Mut, alignment); + try dg.renderTypeAndName(bw, child_type, payload_name, .Mut, 0); try bw.writeAll("; bool is_null; } "); const name_index = buffer.items.len; try bw.print("zig_Q_{s};\n", .{typeToCIdentifier(child_type)}); @@ -1375,12 +1371,9 @@ pub const DeclGen = struct { dg: *DeclGen, w: anytype, ty: Type, - //mutability: Mutability, - //alignment: Value, ) error{ OutOfMemory, AnalysisFail }!void { const name = CValue{ .bytes = "" }; - const alignment = Value.initTag(.abi_align_default); - return renderTypeAndName(dg, w, ty, name, .Mut, alignment); + return renderTypeAndName(dg, w, ty, name, .Mut, 0); } /// Renders a type and name in field declaration/definition format. @@ -1398,7 +1391,7 @@ pub const DeclGen = struct { ty: Type, name: CValue, mutability: Mutability, - alignment: Value, + alignment: u32, ) error{ OutOfMemory, AnalysisFail }!void { var suffix = std.ArrayList(u8).init(dg.gpa); defer suffix.deinit(); @@ -1413,8 +1406,8 @@ pub const DeclGen = struct { render_ty = render_ty.elemType(); } - if (alignment.tag() != .abi_align_default and alignment.tag() != .null_value) - try w.print("ZIG_ALIGN({}) ", .{alignment.toUnsignedInt()}); + if (alignment != 0) + try w.print("ZIG_ALIGN({}) ", .{alignment}); try dg.renderType(w, render_ty); const const_prefix = switch (mutability) { @@ -1570,7 +1563,7 @@ pub fn genDecl(o: *Object) !void { const decl_c_value: CValue = if (is_global) .{ .bytes = mem.span(o.dg.decl.name) } else .{ .decl = o.dg.decl }; - try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.align_val); + try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align"); try fwd_decl_writer.writeAll(";\n"); if (variable.init.isUndefDeep()) { @@ -1579,7 +1572,7 @@ pub fn genDecl(o: *Object) !void { try o.indent_writer.insertNewline(); const w = o.writer(); - try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.align_val); + try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align"); try w.writeAll(" = "); if (variable.init.tag() != .unreachable_value) { try o.dg.renderValue(w, tv.ty, variable.init); @@ -1594,7 +1587,7 @@ pub fn genDecl(o: *Object) !void { // https://github.com/ziglang/zig/issues/7582 const decl_c_value: CValue = .{ .decl = o.dg.decl }; - try o.dg.renderTypeAndName(writer, tv.ty, decl_c_value, .Mut, o.dg.decl.align_val); + try o.dg.renderTypeAndName(writer, tv.ty, decl_c_value, .Mut, o.dg.decl.@"align"); try writer.writeAll(" = "); try o.dg.renderValue(writer, tv.ty, tv.val); @@ -1993,15 +1986,8 @@ fn airAlloc(f: *Function, inst: Air.Inst.Index) !CValue { } const target = f.object.dg.module.getTarget(); - const alignment = inst_ty.ptrAlignment(target); - var payload = Value.Payload.U64{ - .base = .{ .tag = .int_u64 }, - .data = alignment, - }; - const alignment_value = Value.initPayload(&payload.base); - // First line: the variable used as data storage. - const local = try f.allocAlignedLocal(elem_type, mutability, alignment_value); + const local = try f.allocAlignedLocal(elem_type, mutability, inst_ty.ptrAlignment(target)); try writer.writeAll(";\n"); return CValue{ .local_ref = local.local }; |
