authorgravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2025-08-07 23:31:38+02:00
committergravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2025-08-12 16:33:57+02:00
log76d2782149bef0214526a36a888c00adc5f2f897
tree50d187fcd1207945ad71d38dd6acadc64ce7e0f8
parent79e5c138c6474713776caf25cbc21923471ff759

replace most aggregate interns in x86_64/CodeGen


1 files changed, 39 insertions(+), 63 deletions(-)

src/arch/x86_64/CodeGen.zig+39-63
......@@ -170058,12 +170058,9 @@ fn airTrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
170058170058 });
170059170059 const splat_abi_size: u32 = @intCast(splat_ty.abiSize(zcu));
170060170060
170061 const splat_val = try pt.intern(.{ .aggregate = .{
170062 .ty = splat_ty.ip_index,
170063 .storage = .{ .repeated_elem = mask_val.ip_index },
170064 } });
170061 const splat_val = try pt.aggregateSplatValue(splat_ty, mask_val);
170065170062
170066 const splat_mcv = try self.lowerValue(.fromInterned(splat_val));
170063 const splat_mcv = try self.lowerValue(splat_val);
170067170064 const splat_addr_mcv: MCValue = switch (splat_mcv) {
170068170065 .memory, .indirect, .load_frame => splat_mcv.address(),
170069170066 else => .{ .register = try self.copyToTmpRegister(.usize, splat_mcv.address()) },
......@@ -171693,12 +171690,12 @@ fn airShlShrBinOp(self: *CodeGen, inst: Air.Inst.Index) !void {
171693171690 defer self.register_manager.unlockReg(shift_lock);
171694171691
171695171692 const mask_ty = try pt.vectorType(.{ .len = 16, .child = .u8_type });
171696 const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
171697 .ty = mask_ty.toIntern(),
171698 .storage = .{ .elems = &([1]InternPool.Index{
171693 const mask_mcv = try self.lowerValue(try pt.aggregateValue(
171694 mask_ty,
171695 &([1]InternPool.Index{
171699171696 (try rhs_ty.childType(zcu).maxIntScalar(pt, .u8)).toIntern(),
171700 } ++ [1]InternPool.Index{.zero_u8} ** 15) },
171701 } })));
171697 } ++ [1]InternPool.Index{.zero_u8} ** 15),
171698 ));
171702171699 const mask_addr_reg = try self.copyToTmpRegister(.usize, mask_mcv.address());
171703171700 const mask_addr_lock = self.register_manager.lockRegAssumeUnused(mask_addr_reg);
171704171701 defer self.register_manager.unlockReg(mask_addr_lock);
......@@ -181139,10 +181136,7 @@ fn genSetReg(
181139181136 .child = .u8_type,
181140181137 });
181141181138 try self.genSetReg(dst_reg, full_ty, try self.lowerValue(
181142 .fromInterned(try pt.intern(.{ .aggregate = .{
181143 .ty = full_ty.toIntern(),
181144 .storage = .{ .repeated_elem = (try pt.intValue(.u8, 0xaa)).toIntern() },
181145 } })),
181139 try pt.aggregateSplatValue(full_ty, try pt.intValue(.u8, 0xaa)),
181146181140 ), opts);
181147181141 },
181148181142 .x87 => try self.genSetReg(dst_reg, .f80, try self.lowerValue(
......@@ -183565,10 +183559,7 @@ fn airSelect(self: *CodeGen, inst: Air.Inst.Index) !void {
183565183559 mask_elem_ty,
183566183560 @as(u8, 1) << @truncate(bit),
183567183561 )).toIntern();
183568 const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
183569 .ty = mask_ty.toIntern(),
183570 .storage = .{ .elems = mask_elems },
183571 } })));
183562 const mask_mcv = try self.lowerValue(try pt.aggregateValue(mask_ty, mask_elems));
183572183563 const mask_mem: Memory = .{
183573183564 .base = .{ .reg = try self.copyToTmpRegister(.usize, mask_mcv.address()) },
183574183565 .mod = .{ .rm = .{ .size = self.memSize(ty) } },
......@@ -184296,10 +184287,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184296184287 else
184297184288 try select_mask_elem_ty.minIntScalar(pt, select_mask_elem_ty)).toIntern();
184298184289 }
184299 const select_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184300 .ty = select_mask_ty.toIntern(),
184301 .storage = .{ .elems = select_mask_elems[0..mask_elems.len] },
184302 } })));
184290 const select_mask_mcv = try self.lowerValue(
184291 try pt.aggregateValue(select_mask_ty, select_mask_elems[0..mask_elems.len]),
184292 );
184303184293
184304184294 if (self.hasFeature(.sse4_1)) {
184305184295 const mir_tag: Mir.Inst.FixedTag = .{
......@@ -184441,10 +184431,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184441184431 })).toIntern();
184442184432 }
184443184433 const lhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
184444 const lhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184445 .ty = lhs_mask_ty.toIntern(),
184446 .storage = .{ .elems = lhs_mask_elems[0..max_abi_size] },
184447 } })));
184434 const lhs_mask_mcv = try self.lowerValue(
184435 try pt.aggregateValue(lhs_mask_ty, lhs_mask_elems[0..max_abi_size]),
184436 );
184448184437 const lhs_mask_mem: Memory = .{
184449184438 .base = .{ .reg = try self.copyToTmpRegister(.usize, lhs_mask_mcv.address()) },
184450184439 .mod = .{ .rm = .{ .size = .fromSize(@max(max_abi_size, 16)) } },
......@@ -184472,10 +184461,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184472184461 })).toIntern();
184473184462 }
184474184463 const rhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
184475 const rhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184476 .ty = rhs_mask_ty.toIntern(),
184477 .storage = .{ .elems = rhs_mask_elems[0..max_abi_size] },
184478 } })));
184464 const rhs_mask_mcv = try self.lowerValue(
184465 try pt.aggregateValue(rhs_mask_ty, rhs_mask_elems[0..max_abi_size]),
184466 );
184479184467 const rhs_mask_mem: Memory = .{
184480184468 .base = .{ .reg = try self.copyToTmpRegister(.usize, rhs_mask_mcv.address()) },
184481184469 .mod = .{ .rm = .{ .size = .fromSize(@max(max_abi_size, 16)) } },
......@@ -192924,36 +192912,30 @@ const Select = struct {
192924192912 break :res_scalar .{ res_scalar_ty, try pt.intValue_big(res_scalar_ty, res_big_int.toConst()) };
192925192913 },
192926192914 };
192927 const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
192928 .ty = (try pt.vectorType(.{
192929 .len = len,
192930 .child = res_scalar_ty.toIntern(),
192931 })).toIntern(),
192932 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },
192933 } })) else res_scalar_val;
192915 const res_val = if (res_vector_len) |len| try pt.aggregateSplatValue(try pt.vectorType(.{
192916 .len = len,
192917 .child = res_scalar_ty.toIntern(),
192918 }), res_scalar_val) else res_scalar_val;
192934192919 return .{ try cg.tempMemFromValue(res_val), true };
192935192920 },
192936 .f64_0x1p52_0x1p84_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192937 .ty = (try pt.vectorType(.{ .len = 2, .child = .f64_type })).toIntern(),
192938 .storage = .{ .elems = &.{
192921 .f64_0x1p52_0x1p84_mem => .{ try cg.tempMemFromValue(
192922 try pt.aggregateValue(try pt.vectorType(.{ .len = 2, .child = .f64_type }), &.{
192939192923 (try pt.floatValue(.f64, @as(f64, 0x1p52))).toIntern(),
192940192924 (try pt.floatValue(.f64, @as(f64, 0x1p84))).toIntern(),
192941 } },
192942 } }))), true },
192943 .u32_0x1p52_hi_0x1p84_hi_0_0_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192944 .ty = (try pt.vectorType(.{ .len = 4, .child = .u32_type })).toIntern(),
192945 .storage = .{ .elems = &(.{
192925 }),
192926 ), true },
192927 .u32_0x1p52_hi_0x1p84_hi_0_0_mem => .{ try cg.tempMemFromValue(
192928 try pt.aggregateValue(try pt.vectorType(.{ .len = 4, .child = .u32_type }), &(.{
192946192929 (try pt.intValue(.u32, @as(u64, @bitCast(@as(f64, 0x1p52))) >> 32)).toIntern(),
192947192930 (try pt.intValue(.u32, @as(u64, @bitCast(@as(f64, 0x1p84))) >> 32)).toIntern(),
192948 } ++ .{(try pt.intValue(.u32, 0)).toIntern()} ** 2) },
192949 } }))), true },
192950 .f32_0_0x1p64_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192951 .ty = (try pt.vectorType(.{ .len = 2, .child = .f32_type })).toIntern(),
192952 .storage = .{ .elems = &.{
192931 } ++ .{(try pt.intValue(.u32, 0)).toIntern()} ** 2)),
192932 ), true },
192933 .f32_0_0x1p64_mem => .{ try cg.tempMemFromValue(
192934 try pt.aggregateValue(try pt.vectorType(.{ .len = 2, .child = .f32_type }), &.{
192953192935 (try pt.floatValue(.f32, @as(f32, 0))).toIntern(),
192954192936 (try pt.floatValue(.f32, @as(f32, 0x1p64))).toIntern(),
192955 } },
192956 } }))), true },
192937 }),
192938 ), true },
192957192939 .pshufb_splat_mem => |splat_spec| {
192958192940 const zcu = pt.zcu;
192959192941 assert(spec.type.isVector(zcu) and spec.type.childType(zcu).toIntern() == .u8_type);
......@@ -193110,13 +193092,10 @@ const Select = struct {
193110193092 const mem_size = cg.unalignedSize(spec.type);
193111193093 return .{ try cg.tempMemFromAlignedValue(
193112193094 if (mem_size < 16) .fromByteUnits(mem_size) else .none,
193113 .fromInterned(try pt.intern(.{ .aggregate = .{
193114 .ty = if (mem_size < 16)
193115 (try pt.arrayType(.{ .len = elems.len, .child = elem_ty.toIntern() })).toIntern()
193116 else
193117 spec.type.toIntern(),
193118 .storage = .{ .elems = elems },
193119 } })),
193095 try pt.aggregateValue(if (mem_size < 16) try pt.arrayType(.{
193096 .len = elems.len,
193097 .child = elem_ty.toIntern(),
193098 }) else spec.type, elems),
193120193099 ), true };
193121193100 },
193122193101 .splat_float_mem => |splat_spec| {
......@@ -193133,10 +193112,7 @@ const Select = struct {
193133193112 .zero => 0.0,
193134193113 }))).toIntern());
193135193114 @memset(elems[inside_len..], (try pt.floatValue(elem_ty, splat_spec.outside)).toIntern());
193136 return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
193137 .ty = spec.type.toIntern(),
193138 .storage = .{ .elems = elems },
193139 } }))), true };
193115 return .{ try cg.tempMemFromValue(try pt.aggregateValue(spec.type, elems)), true };
193140193116 },
193141193117 .frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{
193142193118 .index = frame_index,