authorgravatar for xtex@astrafall.orgxtex <xtex@astrafall.org> 2026-10-16 09:35:33+08:00
committergravatar for xtex@astrafall.orgxtex <xtex@astrafall.org> 2026-10-17 10:26:20+08:00
log19e0c4b97fe0dba2e0e940413599c2668aa9a179
tree7e633cf74abc876970c1382b41b276aebb3806ea
parent415bc9e8fe70c488db4298d9aa47751f6659dfb2
signature Signed by SSH key SHA256:IEYEjkZlkUTr5U9GiDAmZU/4eZus2t2RsxusyhQqwao

loongarch: remove broken support for sign-extend width > GPR


1 files changed, 2 insertions(+), 30 deletions(-)

src/codegen/loongarch/Select.zig+2-30
......@@ -913,36 +913,8 @@ pub const Value = struct {
913913 );
914914 try vi_mat.finish(isel);
915915 } else {
916 const unused_bytes = std.math.divCeil(u64, unused_bits, 8) catch unreachable;
917 if (unused_bytes > isel.gprSize()) {
918 try isel.failUnimplemented("unimplemented sign-extend width > GPR", .{});
919 return;
920 }
921 const used_bytes = vi.size(isel) - unused_bytes;
922
923 var hit = false;
924 var walker = vi.walk(isel, .{});
925 while (walker.next()) |part_vi| {
926 const part_offset = part_vi.offsetIn(isel, vi);
927 const part_size = part_vi.size(isel);
928 const part_end = part_offset + part_size;
929 if (part_end <= used_bytes) continue;
930 if (part_size > isel.gprSize()) continue;
931
932 walker.skipChildren(part_vi);
933
934 const part_mat = try part_vi.mat(isel, .{ .pref = .only_reg });
935 try isel.fillUnusedBits(
936 part_mat.reg(),
937 part_mat.reg(),
938 dst_ext,
939 src_ext,
940 @intCast(unused_bits - ((vi.size(isel) - part_end) * 8)),
941 );
942 try part_mat.finish(isel);
943 if (hit) unreachable; // TODO
944 hit = true;
945 }
916 try isel.failUnimplemented("unimplemented sign-extend width > GPR", .{});
917 return;
946918 }
947919 }
948920