also need to zero extend u8/u16 to u32 result

This commit is contained in:
Frodo Baggins 2025-07-11 20:26:35 -07:00
parent 97f7043330
commit 5b6f9f7820
2 changed files with 8 additions and 12 deletions

View File

@ -272,14 +272,12 @@ Id EmitConvertU32U8(EmitContext& ctx, Id value) {
}
Id EmitConvertS32S8(EmitContext& ctx, Id value) {
ASSERT(ctx.profile.support_int8); // TODO
const Id as_s8 = ctx.OpBitcast(ctx.S8, value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s8);
return ctx.OpBitcast(ctx.U32[1], as_s32);
}
Id EmitConvertS32S16(EmitContext& ctx, Id value) {
ASSERT(ctx.profile.support_int16); // TODO
const Id as_s16 = ctx.OpBitcast(ctx.S16, value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s16);
return ctx.OpBitcast(ctx.U32[1], as_s32);

View File

@ -258,18 +258,16 @@ void Translator::BUFFER_LOAD(u32 num_dwords, bool is_inst_typed, bool is_buffer_
} else {
IR::Value value;
switch (scalar_width) {
case 8:
value = ir.LoadBufferU8(handle, address, buffer_info);
if (is_signed) {
value = ir.SConvert(32, IR::U8{value});
}
case 8: {
IR::U8 byte_val = ir.LoadBufferU8(handle, address, buffer_info);
value = is_signed ? ir.SConvert(32, byte_val) : ir.UConvert(32, byte_val);
break;
case 16:
value = ir.LoadBufferU16(handle, address, buffer_info);
if (is_signed) {
value = ir.SConvert(32, IR::U16{value});
}
}
case 16: {
IR::U16 short_val = ir.LoadBufferU16(handle, address, buffer_info);
value = is_signed ? ir.SConvert(32, short_val) : ir.UConvert(32, short_val);
break;
}
case 32:
value = ir.LoadBufferU32(num_dwords, handle, address, buffer_info);
break;