adjust V_MAD_I32_I24 for bit extraction

This commit is contained in:
DanielSvoboda 2024-07-08 11:55:08 -03:00 committed by GitHub
parent 3ee6e8c6c2
commit 3b2e20d98f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -361,10 +361,10 @@ void Translator::V_BFE_U32(bool is_signed, const GcnInst& inst) {
SetDst(inst.dst[0], ir.BitFieldExtract(src0, src1, src2, is_signed));
}
void Translator::V_MAD_I32_I24(const GcnInst& inst) {
const IR::U32 src0{ir.BitFieldExtract(GetSrc(inst.src[0]), ir.Imm32(0), ir.Imm32(24), true)};
const IR::U32 src1{ir.BitFieldExtract(GetSrc(inst.src[1]), ir.Imm32(0), ir.Imm32(24), true)};
const IR::U32 src2{GetSrc(inst.src[2])};
void Translator::V_MAD_I32_I24(const GcnInst& inst, bool performBitExtract) {
const IR::U32 src0 = performBitExtract ? ir.BitFieldExtract(GetSrc(inst.src[0]), ir.Imm32(0), ir.Imm32(24), true) : GetSrc(inst.src[0]);
const IR::U32 src1 = performBitExtract ? ir.BitFieldExtract(GetSrc(inst.src[1]), ir.Imm32(0), ir.Imm32(24), true) : GetSrc(inst.src[1]);
const IR::U32 src2 = GetSrc(inst.src[2]);
SetDst(inst.dst[0], ir.IAdd(ir.IMul(src0, src1), src2));
}
@ -393,10 +393,7 @@ void Translator::V_ASHRREV_I32(const GcnInst& inst) {
}
void Translator::V_MAD_U32_U24(const GcnInst& inst) {
const IR::U32 src0 = ir.BitFieldExtract(GetSrc(inst.src[0]), ir.Imm32(0), ir.Imm32(24), false);
const IR::U32 src1 = ir.BitFieldExtract(GetSrc(inst.src[1]), ir.Imm32(0), ir.Imm32(24), false);
const IR::U32 src2 = GetSrc(inst.src[2]);
SetDst(inst.dst[0], ir.IAdd(ir.IMul(src0, src1), src2));
V_MAD_I32_I24(inst, false);
}
void Translator::V_RNDNE_F32(const GcnInst& inst) {