authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-06 01:34:55-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-20 18:33:00-07:00
logf12c4f86fc5e46d24c511614759ee26a5ac07f3c
treef901e7f2e8642549bb6431d72898885c7f7b4952
parent5ec0a7d8a5201fb35334ce62f82c5958b6ba296e

aarch64: implement `ptr_slice_*_ptr`


1 files changed, 20 insertions(+), 0 deletions(-)

src/codegen/aarch64/Select.zig+20
......@@ -6147,6 +6147,26 @@ pub fn body(isel: *Select, air_body: []const Air.Inst.Index) error{ OutOfMemory,
61476147 }
61486148 if (air.next()) |next_air_tag| continue :air_tag next_air_tag;
61496149 },
6150 .ptr_slice_len_ptr => {
6151 if (isel.live_values.fetchRemove(air.inst_index)) |dst_vi| unused: {
6152 defer dst_vi.value.deref(isel);
6153 const ty_op = air.data(air.inst_index).ty_op;
6154 const dst_ra = try dst_vi.value.defReg(isel) orelse break :unused;
6155 const src_vi = try isel.use(ty_op.operand);
6156 const src_mat = try src_vi.matReg(isel);
6157 try isel.emit(.add(dst_ra.x(), src_mat.ra.x(), .{ .immediate = 8 }));
6158 try src_mat.finish(isel);
6159 }
6160 if (air.next()) |next_air_tag| continue :air_tag next_air_tag;
6161 },
6162 .ptr_slice_ptr_ptr => {
6163 if (isel.live_values.fetchRemove(air.inst_index)) |dst_vi| {
6164 defer dst_vi.value.deref(isel);
6165 const ty_op = air.data(air.inst_index).ty_op;
6166 try dst_vi.value.move(isel, ty_op.operand);
6167 }
6168 if (air.next()) |next_air_tag| continue :air_tag next_air_tag;
6169 },
61506170 .array_elem_val => {
61516171 if (isel.live_values.fetchRemove(air.inst_index)) |elem_vi| unused: {
61526172 defer elem_vi.value.deref(isel);