x64: make lowerUnnamedConst a fallthrough condition

This commit is contained in:
Jakub Konka 2022-02-28 11:01:56 +01:00
parent 06f58a0b3b
commit 4d0c48738b

View File

@ -5433,24 +5433,14 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue {
} }
switch (typed_value.ty.zigTypeTag()) { switch (typed_value.ty.zigTypeTag()) {
.Array => {
return self.lowerUnnamedConst(typed_value);
},
.Pointer => switch (typed_value.ty.ptrSize()) { .Pointer => switch (typed_value.ty.ptrSize()) {
.Slice => { .Slice => {},
return self.lowerUnnamedConst(typed_value);
},
else => { else => {
switch (typed_value.val.tag()) { switch (typed_value.val.tag()) {
.int_u64 => { .int_u64 => {
return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; return MCValue{ .immediate = typed_value.val.toUnsignedInt() };
}, },
.slice => { else => {},
return self.lowerUnnamedConst(typed_value);
},
else => {
return self.fail("TODO codegen more kinds of const pointers: {}", .{typed_value.val.tag()});
},
} }
}, },
}, },
@ -5459,10 +5449,9 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue {
if (info.bits <= ptr_bits and info.signedness == .signed) { if (info.bits <= ptr_bits and info.signedness == .signed) {
return MCValue{ .immediate = @bitCast(u64, typed_value.val.toSignedInt()) }; return MCValue{ .immediate = @bitCast(u64, typed_value.val.toSignedInt()) };
} }
if (info.bits > ptr_bits or info.signedness == .signed) { if (!(info.bits > ptr_bits or info.signedness == .signed)) {
return self.fail("TODO const int bigger than ptr and signed int", .{});
}
return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; return MCValue{ .immediate = typed_value.val.toUnsignedInt() };
}
}, },
.Bool => { .Bool => {
return MCValue{ .immediate = @boolToInt(typed_value.val.toBool()) }; return MCValue{ .immediate = @boolToInt(typed_value.val.toBool()) };
@ -5482,7 +5471,6 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue {
} else if (typed_value.ty.abiSize(self.target.*) == 1) { } else if (typed_value.ty.abiSize(self.target.*) == 1) {
return MCValue{ .immediate = @boolToInt(typed_value.val.isNull()) }; return MCValue{ .immediate = @boolToInt(typed_value.val.isNull()) };
} }
return self.fail("TODO non pointer optionals", .{});
}, },
.Enum => { .Enum => {
if (typed_value.val.castTag(.enum_field_index)) |field_index| { if (typed_value.val.castTag(.enum_field_index)) |field_index| {
@ -5529,16 +5517,11 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue {
return self.genTypedValue(.{ .ty = error_type, .val = typed_value.val }); return self.genTypedValue(.{ .ty = error_type, .val = typed_value.val });
} }
} }
return self.lowerUnnamedConst(typed_value);
}, },
.Struct => { else => {},
return self.lowerUnnamedConst(typed_value);
},
.Union => {
return self.lowerUnnamedConst(typed_value);
},
else => return self.fail("TODO implement const of type '{}'", .{typed_value.ty}),
} }
return self.lowerUnnamedConst(typed_value);
} }
const CallMCValues = struct { const CallMCValues = struct {