| ... | ... | @@ -5433,24 +5433,14 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5433 | 5433 | } |
| 5434 | 5434 | |
| 5435 | 5435 | switch (typed_value.ty.zigTypeTag()) { |
| 5436 | | .Array => { |
| 5437 | | return self.lowerUnnamedConst(typed_value); |
| 5438 | | }, |
| 5439 | 5436 | .Pointer => switch (typed_value.ty.ptrSize()) { |
| 5440 | | .Slice => { |
| 5441 | | return self.lowerUnnamedConst(typed_value); |
| 5442 | | }, |
| 5437 | .Slice => {}, |
| 5443 | 5438 | else => { |
| 5444 | 5439 | switch (typed_value.val.tag()) { |
| 5445 | 5440 | .int_u64 => { |
| 5446 | 5441 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; |
| 5447 | 5442 | }, |
| 5448 | | .slice => { |
| 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 | | }, |
| 5443 | else => {}, |
| 5454 | 5444 | } |
| 5455 | 5445 | }, |
| 5456 | 5446 | }, |
| ... | ... | @@ -5459,10 +5449,9 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5459 | 5449 | if (info.bits <= ptr_bits and info.signedness == .signed) { |
| 5460 | 5450 | return MCValue{ .immediate = @bitCast(u64, typed_value.val.toSignedInt()) }; |
| 5461 | 5451 | } |
| 5462 | | if (info.bits > ptr_bits or info.signedness == .signed) { |
| 5463 | | return self.fail("TODO const int bigger than ptr and signed int", .{}); |
| 5452 | if (!(info.bits > ptr_bits or info.signedness == .signed)) { |
| 5453 | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; |
| 5464 | 5454 | } |
| 5465 | | return MCValue{ .immediate = typed_value.val.toUnsignedInt() }; |
| 5466 | 5455 | }, |
| 5467 | 5456 | .Bool => { |
| 5468 | 5457 | return MCValue{ .immediate = @boolToInt(typed_value.val.toBool()) }; |
| ... | ... | @@ -5482,7 +5471,6 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue { |
| 5482 | 5471 | } else if (typed_value.ty.abiSize(self.target.*) == 1) { |
| 5483 | 5472 | return MCValue{ .immediate = @boolToInt(typed_value.val.isNull()) }; |
| 5484 | 5473 | } |
| 5485 | | return self.fail("TODO non pointer optionals", .{}); |
| 5486 | 5474 | }, |
| 5487 | 5475 | .Enum => { |
| 5488 | 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 | 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 => { |
| 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}), |
| 5521 | else => {}, |
| 5541 | 5522 | } |
| 5523 | |
| 5524 | return self.lowerUnnamedConst(typed_value); |
| 5542 | 5525 | } |
| 5543 | 5526 | |
| 5544 | 5527 | const CallMCValues = struct { |