authorgravatar for xtex@astrafall.orgxtex <xtex@astrafall.org> 2026-10-16 09:17:18+08:00
committergravatar for xtex@astrafall.orgxtex <xtex@astrafall.org> 2026-10-17 10:26:20+08:00
logf039581a2d9c4072db3f5d97c238a1a02d027c00
tree2fc294212970fb5d26c7c8119c411aea0fbad0b1
parent03128b0e6180c1e13182803204d73f510de67ff4
signature Signed by SSH key SHA256:IEYEjkZlkUTr5U9GiDAmZU/4eZus2t2RsxusyhQqwao

loongarch: use failUnimplemented for i128 sign-ext

So it can be trapped by debug_trap_unimplemented_code

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

src/codegen/loongarch/Select.zig+5-2
...@@ -895,7 +895,7 @@ pub const Value = struct {...@@ -895,7 +895,7 @@ pub const Value = struct {
895 };895 };
896 const unused_bits = @max(new_unused_bits, old_unused_bits);896 const unused_bits = @max(new_unused_bits, old_unused_bits);
897 if (dst_ext == src_ext and bit_size <= old_bits) return;897 if (dst_ext == src_ext and bit_size <= old_bits) return;
898 tracking_log.debug("{f}: {t} ({t}) -> {t} ({t}), {d}b -> {d}b", .{ vi, src_ext, new_ext, dst_ext, old_ext, old_bits, bit_size });898 tracking_log.debug("{f}: in {t} ({t}) -> out {t} ({t}), {d}b -> {d}b", .{ vi, src_ext, new_ext, dst_ext, old_ext, old_bits, bit_size });
899899
900 // avoid setting extension to .garbage to reduce MIR for sequences like900 // avoid setting extension to .garbage to reduce MIR for sequences like
901 // zero_ext -> garbage -> zero_ext901 // zero_ext -> garbage -> zero_ext
...@@ -914,7 +914,10 @@ pub const Value = struct {...@@ -914,7 +914,10 @@ pub const Value = struct {
914 try vi_mat.finish(isel);914 try vi_mat.finish(isel);
915 } else {915 } else {
916 const unused_bytes = std.math.divCeil(u64, unused_bits, 8) catch unreachable;916 const unused_bytes = std.math.divCeil(u64, unused_bits, 8) catch unreachable;
917 assert(unused_bytes <= isel.gprSize()); // TODO larger extending917 if (unused_bytes > isel.gprSize()) {
918 try isel.failUnimplemented("unimplemented sign-extend width > GPR", .{});
919 return;
920 }
918 const used_bytes = vi.size(isel) - unused_bytes;921 const used_bytes = vi.size(isel) - unused_bytes;
919922
920 var hit = false;923 var hit = false;