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)); SetDst(inst.dst[0], ir.BitFieldExtract(src0, src1, src2, is_signed));
} }
void Translator::V_MAD_I32_I24(const GcnInst& inst) { void Translator::V_MAD_I32_I24(const GcnInst& inst, bool performBitExtract) {
const IR::U32 src0{ir.BitFieldExtract(GetSrc(inst.src[0]), ir.Imm32(0), ir.Imm32(24), true)}; 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{ir.BitFieldExtract(GetSrc(inst.src[1]), ir.Imm32(0), ir.Imm32(24), true)}; 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])}; const IR::U32 src2 = GetSrc(inst.src[2]);
SetDst(inst.dst[0], ir.IAdd(ir.IMul(src0, src1), src2)); 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) { 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); V_MAD_I32_I24(inst, 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));
} }
void Translator::V_RNDNE_F32(const GcnInst& inst) { void Translator::V_RNDNE_F32(const GcnInst& inst) {