authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-06-24 23:01:08-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-06-25 19:14:03-04:00
log054536f3430ecc96cb3520e82b07b2bee3337585
treef967ef1bfe980f3921a712a2757c55e379817194
parent614c8077027767063f399d3dbb5d478deebf37c3

x86_64: fix unimplemented type crashes


1 files changed, 8 insertions(+), 1 deletions(-)

src/arch/x86_64/CodeGen.zig+8-1
...@@ -4565,7 +4565,9 @@ fn airPopcount(self: *Self, inst: Air.Inst.Index) !void {...@@ -4565,7 +4565,9 @@ fn airPopcount(self: *Self, inst: Air.Inst.Index) !void {
4565 const ty_op = self.air.instructions.items(.data)[inst].ty_op;4565 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
4566 const result: MCValue = result: {4566 const result: MCValue = result: {
4567 const src_ty = self.typeOf(ty_op.operand);4567 const src_ty = self.typeOf(ty_op.operand);
4568 const src_abi_size = @as(u32, @intCast(src_ty.abiSize(mod)));4568 const src_abi_size: u32 = @intCast(src_ty.abiSize(mod));
4569 if (src_ty.zigTypeTag(mod) == .Vector or src_abi_size > 8)
4570 return self.fail("TODO implement airPopcount for {}", .{src_ty.fmt(mod)});
4569 const src_mcv = try self.resolveInst(ty_op.operand);4571 const src_mcv = try self.resolveInst(ty_op.operand);
45704572
4571 if (self.hasFeature(.popcnt)) {4573 if (self.hasFeature(.popcnt)) {
...@@ -4674,8 +4676,13 @@ fn airPopcount(self: *Self, inst: Air.Inst.Index) !void {...@@ -4674,8 +4676,13 @@ fn airPopcount(self: *Self, inst: Air.Inst.Index) !void {
4674}4676}
46754677
4676fn byteSwap(self: *Self, inst: Air.Inst.Index, src_ty: Type, src_mcv: MCValue, mem_ok: bool) !MCValue {4678fn byteSwap(self: *Self, inst: Air.Inst.Index, src_ty: Type, src_mcv: MCValue, mem_ok: bool) !MCValue {
4679 const mod = self.bin_file.options.module.?;
4677 const ty_op = self.air.instructions.items(.data)[inst].ty_op;4680 const ty_op = self.air.instructions.items(.data)[inst].ty_op;
46784681
4682 if (src_ty.zigTypeTag(mod) == .Vector or src_ty.abiSize(mod) > 8) return self.fail(
4683 "TODO implement byteSwap for {}",
4684 .{src_ty.fmt(mod)},
4685 );
4679 const src_bits = self.regBitSize(src_ty);4686 const src_bits = self.regBitSize(src_ty);
4680 const src_lock = switch (src_mcv) {4687 const src_lock = switch (src_mcv) {
4681 .register => |reg| self.register_manager.lockRegAssumeUnused(reg),4688 .register => |reg| self.register_manager.lockRegAssumeUnused(reg),