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) { Id EmitConvertS32S8(EmitContext& ctx, Id value) {
ASSERT(ctx.profile.support_int8); // TODO
const Id as_s8 = ctx.OpBitcast(ctx.S8, value); const Id as_s8 = ctx.OpBitcast(ctx.S8, value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s8); const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s8);
return ctx.OpBitcast(ctx.U32[1], as_s32); return ctx.OpBitcast(ctx.U32[1], as_s32);
} }
Id EmitConvertS32S16(EmitContext& ctx, Id value) { Id EmitConvertS32S16(EmitContext& ctx, Id value) {
ASSERT(ctx.profile.support_int16); // TODO
const Id as_s16 = ctx.OpBitcast(ctx.S16, value); const Id as_s16 = ctx.OpBitcast(ctx.S16, value);
const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s16); const Id as_s32 = ctx.OpSConvert(ctx.S32[1], as_s16);
return ctx.OpBitcast(ctx.U32[1], as_s32); 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 { } else {
IR::Value value; IR::Value value;
switch (scalar_width) { switch (scalar_width) {
case 8: case 8: {
value = ir.LoadBufferU8(handle, address, buffer_info); IR::U8 byte_val = ir.LoadBufferU8(handle, address, buffer_info);
if (is_signed) { value = is_signed ? ir.SConvert(32, byte_val) : ir.UConvert(32, byte_val);
value = ir.SConvert(32, IR::U8{value});
}
break; break;
case 16: }
value = ir.LoadBufferU16(handle, address, buffer_info); case 16: {
if (is_signed) { IR::U16 short_val = ir.LoadBufferU16(handle, address, buffer_info);
value = ir.SConvert(32, IR::U16{value}); value = is_signed ? ir.SConvert(32, short_val) : ir.UConvert(32, short_val);
}
break; break;
}
case 32: case 32:
value = ir.LoadBufferU32(num_dwords, handle, address, buffer_info); value = ir.LoadBufferU32(num_dwords, handle, address, buffer_info);
break; break;