recompiler: trivial missing ops (VALU OR and SALU LE, GE) added

This commit is contained in:
psucien 2024-06-10 23:49:23 +02:00
parent 7fcb758da2
commit cb2cf7d93c
3 changed files with 17 additions and 0 deletions

View File

@ -228,6 +228,9 @@ void Translate(IR::Block* block, std::span<const GcnInst> inst_list, Info& info)
case Opcode::V_AND_B32: case Opcode::V_AND_B32:
translator.V_AND_B32(inst); translator.V_AND_B32(inst);
break; break;
case Opcode::V_OR_B32:
translator.V_OR_B32(inst);
break;
case Opcode::V_LSHLREV_B32: case Opcode::V_LSHLREV_B32:
translator.V_LSHLREV_B32(inst); translator.V_LSHLREV_B32(inst);
break; break;
@ -318,6 +321,9 @@ void Translate(IR::Block* block, std::span<const GcnInst> inst_list, Info& info)
case Opcode::V_CMP_EQ_I32: case Opcode::V_CMP_EQ_I32:
translator.V_CMP_U32(ConditionOp::EQ, true, false, inst); translator.V_CMP_U32(ConditionOp::EQ, true, false, inst);
break; break;
case Opcode::V_CMP_LE_I32:
translator.V_CMP_U32(ConditionOp::LE, true, false, inst);
break;
case Opcode::V_CMP_NE_U32: case Opcode::V_CMP_NE_U32:
translator.V_CMP_U32(ConditionOp::LG, false, false, inst); translator.V_CMP_U32(ConditionOp::LG, false, false, inst);
break; break;
@ -378,6 +384,9 @@ void Translate(IR::Block* block, std::span<const GcnInst> inst_list, Info& info)
case Opcode::S_CMP_GT_I32: case Opcode::S_CMP_GT_I32:
translator.S_CMP(ConditionOp::GT, true, inst); translator.S_CMP(ConditionOp::GT, true, inst);
break; break;
case Opcode::S_CMP_GE_I32:
translator.S_CMP(ConditionOp::GE, true, inst);
break;
case Opcode::S_CMP_EQ_I32: case Opcode::S_CMP_EQ_I32:
translator.S_CMP(ConditionOp::EQ, true, inst); translator.S_CMP(ConditionOp::EQ, true, inst);
break; break;

View File

@ -62,6 +62,7 @@ public:
void V_CVT_PKRTZ_F16_F32(const GcnInst& inst); void V_CVT_PKRTZ_F16_F32(const GcnInst& inst);
void V_MUL_F32(const GcnInst& inst); void V_MUL_F32(const GcnInst& inst);
void V_CNDMASK_B32(const GcnInst& inst); void V_CNDMASK_B32(const GcnInst& inst);
void V_OR_B32(const GcnInst& inst);
void V_AND_B32(const GcnInst& inst); void V_AND_B32(const GcnInst& inst);
void V_LSHLREV_B32(const GcnInst& inst); void V_LSHLREV_B32(const GcnInst& inst);
void V_ADD_I32(const GcnInst& inst); void V_ADD_I32(const GcnInst& inst);

View File

@ -50,6 +50,13 @@ void Translator::V_CNDMASK_B32(const GcnInst& inst) {
ir.SetVectorReg(dst_reg, IR::U32F32{result}); ir.SetVectorReg(dst_reg, IR::U32F32{result});
} }
void Translator::V_OR_B32(const GcnInst& inst) {
const IR::U32 src0{GetSrc(inst.src[0])};
const IR::U32 src1{ir.GetVectorReg(IR::VectorReg(inst.src[1].code))};
const IR::VectorReg dst_reg{inst.dst[0].code};
ir.SetVectorReg(dst_reg, ir.BitwiseOr(src0, src1));
}
void Translator::V_AND_B32(const GcnInst& inst) { void Translator::V_AND_B32(const GcnInst& inst) {
const IR::U32 src0{GetSrc(inst.src[0])}; const IR::U32 src0{GetSrc(inst.src[0])};
const IR::U32 src1{ir.GetVectorReg(IR::VectorReg(inst.src[1].code))}; const IR::U32 src1{ir.GetVectorReg(IR::VectorReg(inst.src[1].code))};