mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-22 18:15:14 +00:00
also need to zero extend u8/u16 to u32 result
This commit is contained in:
parent
97f7043330
commit
5b6f9f7820
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user