| ... | @@ -5433,24 +5433,14 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { | ... | @@ -5433,24 +5433,14 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5433 | } | 5433 | } |
| 5434 | | 5434 | |
| 5435 | switch (typed_value.ty.zigTypeTag()) { | 5435 | switch (typed_value.ty.zigTypeTag()) { |
| 5436 | .Array => { | | |
| 5437 | return self.lowerUnnamedConst(typed_value); | | |
| 5438 | }, | | |
| 5439 | .Pointer => switch (typed_value.ty.ptrSize()) { | 5436 | .Pointer => switch (typed_value.ty.ptrSize()) { |
| 5440 | .Slice => { | 5437 | .Slice => {}, |
| 5441 | return self.lowerUnnamedConst(typed_value); | | |
| 5442 | }, | | |
| 5443 | else => { | 5438 | else => { |
| 5444 | switch (typed_value.val.tag()) { | 5439 | switch (typed_value.val.tag()) { |
| 5445 | .int_u64 => { | 5440 | .int_u64 => { |
| 5446 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; | 5441 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; |
| 5447 | }, | 5442 | }, |
| 5448 | .slice => { | 5443 | else => {}, |
| 5449 | return self.lowerUnnamedConst(typed_value); | | |
| 5450 | }, | | |
| 5451 | else => { | | |
| 5452 | return self.fail("TODO codegen more kinds of const pointers: {}", .{typed_value.val.tag()}); | | |
| 5453 | }, | | |
| 5454 | } | 5444 | } |
| 5455 | }, | 5445 | }, |
| 5456 | }, | 5446 | }, |
| ... | @@ -5459,10 +5449,9 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { | ... | @@ -5459,10 +5449,9 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5459 | if (info.bits <= ptr_bits and info.signedness == .signed) { | 5449 | if (info.bits <= ptr_bits and info.signedness == .signed) { |
| 5460 | return MCValue{ .immediate = @bitCast(u64, typed_value.val.toSignedInt()) }; | 5450 | return MCValue{ .immediate = @bitCast(u64, typed_value.val.toSignedInt()) }; |
| 5461 | } | 5451 | } |
| 5462 | if (info.bits > ptr_bits or info.signedness == .signed) { | 5452 | if (!(info.bits > ptr_bits or info.signedness == .signed)) { |
| 5463 | return self.fail("TODO const int bigger than ptr and signed int", .{}); | 5453 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; |
| 5464 | } | 5454 | } |
| 5465 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; | | |
| 5466 | }, | 5455 | }, |
| 5467 | .Bool => { | 5456 | .Bool => { |
| 5468 | return MCValue{ .immediate = @boolToInt(typed_value.val.toBool()) }; | 5457 | return MCValue{ .immediate = @boolToInt(typed_value.val.toBool()) }; |
| ... | @@ -5482,7 +5471,6 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { | ... | @@ -5482,7 +5471,6 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5482 | } else if (typed_value.ty.abiSize(self.target.*) == 1) { | 5471 | } else if (typed_value.ty.abiSize(self.target.*) == 1) { |
| 5483 | return MCValue{ .immediate = @boolToInt(typed_value.val.isNull()) }; | 5472 | return MCValue{ .immediate = @boolToInt(typed_value.val.isNull()) }; |
| 5484 | } | 5473 | } |
| 5485 | return self.fail("TODO non pointer optionals", .{}); | | |
| 5486 | }, | 5474 | }, |
| 5487 | .Enum => { | 5475 | .Enum => { |
| 5488 | if (typed_value.val.castTag(.enum_field_index)) |field_index| { | 5476 | if (typed_value.val.castTag(.enum_field_index)) |field_index| { |
| ... | @@ -5529,16 +5517,11 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { | ... | @@ -5529,16 +5517,11 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5529 | return self.genTypedValue(.{ .ty = error_type, .val = typed_value.val }); | 5517 | return self.genTypedValue(.{ .ty = error_type, .val = typed_value.val }); |
| 5530 | } | 5518 | } |
| 5531 | } | 5519 | } |
| 5532 | return self.lowerUnnamedConst(typed_value); | | |
| 5533 | }, | 5520 | }, |
| 5534 | .Struct => { | 5521 | else => {}, |
| 5535 | return self.lowerUnnamedConst(typed_value); | | |
| 5536 | }, | | |
| 5537 | .Union => { | | |
| 5538 | return self.lowerUnnamedConst(typed_value); | | |
| 5539 | }, | | |
| 5540 | else => return self.fail("TODO implement const of type '{}'", .{typed_value.ty}), | | |
| 5541 | } | 5522 | } |
| | 5523 | |
| | 5524 | return self.lowerUnnamedConst(typed_value); |
| 5542 | } | 5525 | } |
| 5543 | | 5526 | |
| 5544 | const CallMCValues = struct { | 5527 | const CallMCValues = struct { |