shader recompiler: fix SetVectorReg64 & standardize switches-case

This commit is contained in:
Vinicius Rangel 2024-07-24 13:32:49 -03:00
parent 09946f15a2
commit 96b2cf1e61
No known key found for this signature in database
GPG Key ID: A5B154D904B761D9

View File

@ -200,7 +200,7 @@ void IREmitter::SetVectorReg(IR::VectorReg reg, const U32F32& value) {
void IREmitter::SetVectorReg64(IR::VectorReg reg, const U64F64& value) { void IREmitter::SetVectorReg64(IR::VectorReg reg, const U64F64& value) {
const U64 value_typed = value.Type() == Type::F64 ? BitCast<U64>(F64{value}) : U64{value}; const U64 value_typed = value.Type() == Type::F64 ? BitCast<U64>(F64{value}) : U64{value};
Inst(Opcode::SetVectorRegister, reg, value); Inst(Opcode::SetVectorRegister, reg, value_typed);
} }
U1 IREmitter::GetGotoVariable(u32 id) { U1 IREmitter::GetGotoVariable(u32 id) {
@ -1196,8 +1196,9 @@ U32U64 IREmitter::ConvertFToS(size_t bitsize, const F32F64& value) {
ThrowInvalidType(value.Type()); ThrowInvalidType(value.Type());
} }
default: default:
UNREACHABLE_MSG("Invalid destination bitsize {}", bitsize); break;
} }
throw NotImplementedException("Invalid destination bitsize {}", bitsize);
} }
U32U64 IREmitter::ConvertFToU(size_t bitsize, const F32F64& value) { U32U64 IREmitter::ConvertFToU(size_t bitsize, const F32F64& value) {
@ -1231,13 +1232,17 @@ F32F64 IREmitter::ConvertSToF(size_t dest_bitsize, size_t src_bitsize, const Val
switch (src_bitsize) { switch (src_bitsize) {
case 32: case 32:
return Inst<F32>(Opcode::ConvertF32S32, value); return Inst<F32>(Opcode::ConvertF32S32, value);
default:
break;
} }
break;
case 64: case 64:
switch (src_bitsize) { switch (src_bitsize) {
case 32: case 32:
return Inst<F64>(Opcode::ConvertF64S32, value); return Inst<F64>(Opcode::ConvertF64S32, value);
default:
break;
} }
default:
break; break;
} }
UNREACHABLE_MSG("Invalid bit size combination dst={} src={}", dest_bitsize, src_bitsize); UNREACHABLE_MSG("Invalid bit size combination dst={} src={}", dest_bitsize, src_bitsize);
@ -1251,13 +1256,17 @@ F32F64 IREmitter::ConvertUToF(size_t dest_bitsize, size_t src_bitsize, const Val
return Inst<F32>(Opcode::ConvertF32U16, value); return Inst<F32>(Opcode::ConvertF32U16, value);
case 32: case 32:
return Inst<F32>(Opcode::ConvertF32U32, value); return Inst<F32>(Opcode::ConvertF32U32, value);
default:
break;
} }
break;
case 64: case 64:
switch (src_bitsize) { switch (src_bitsize) {
case 32: case 32:
return Inst<F64>(Opcode::ConvertF64U32, value); return Inst<F64>(Opcode::ConvertF64U32, value);
default:
break;
} }
default:
break; break;
} }
UNREACHABLE_MSG("Invalid bit size combination dst={} src={}", dest_bitsize, src_bitsize); UNREACHABLE_MSG("Invalid bit size combination dst={} src={}", dest_bitsize, src_bitsize);
@ -1276,22 +1285,24 @@ U16U32U64 IREmitter::UConvert(size_t result_bitsize, const U16U32U64& value) {
case Type::U32: case Type::U32:
return Inst<U16>(Opcode::ConvertU16U32, value); return Inst<U16>(Opcode::ConvertU16U32, value);
default: default:
ThrowInvalidType(value.Type()); break;
} }
case 32: case 32:
switch (value.Type()) { switch (value.Type()) {
case Type::U64: case Type::U64:
return Inst<U32>(Opcode::ConvertU32U64, value); return Inst<U32>(Opcode::ConvertU32U64, value);
default: default:
ThrowInvalidType(value.Type()); break;
} }
case 64: case 64:
switch (value.Type()) { switch (value.Type()) {
case Type::U32: case Type::U32:
return Inst<U64>(Opcode::ConvertU64U32, value); return Inst<U64>(Opcode::ConvertU64U32, value);
default: default:
ThrowInvalidType(value.Type()); break;
} }
default:
break;
} }
throw NotImplementedException("Conversion from {} to {} bits", value.Type(), result_bitsize); throw NotImplementedException("Conversion from {} to {} bits", value.Type(), result_bitsize);
} }
@ -1302,13 +1313,17 @@ F16F32F64 IREmitter::FPConvert(size_t result_bitsize, const F16F32F64& value) {
switch (value.Type()) { switch (value.Type()) {
case Type::F32: case Type::F32:
return Inst<F16>(Opcode::ConvertF16F32, value); return Inst<F16>(Opcode::ConvertF16F32, value);
default:
break;
} }
break;
case 32: case 32:
switch (value.Type()) { switch (value.Type()) {
case Type::F16: case Type::F16:
return Inst<F32>(Opcode::ConvertF32F16, value); return Inst<F32>(Opcode::ConvertF32F16, value);
default:
break;
} }
default:
break; break;
} }
throw NotImplementedException("Conversion from {} to {} bits", value.Type(), result_bitsize); throw NotImplementedException("Conversion from {} to {} bits", value.Type(), result_bitsize);