mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2026-03-11 09:32:56 +00:00
ir_emitter: Default fpcr_controlled arguments to true
This commit is contained in:
@@ -21,7 +21,7 @@ bool FPCompare(TranslatorVisitor& v, Imm<2> type, Vec Vm, Vec Vn, bool exc_on_qn
|
||||
operand2 = v.V_scalar(*datasize, Vm);
|
||||
}
|
||||
|
||||
const auto nzcv = v.ir.FPCompare(operand1, operand2, exc_on_qnan, true);
|
||||
const auto nzcv = v.ir.FPCompare(operand1, operand2, exc_on_qnan);
|
||||
v.ir.SetNZCV(nzcv);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ bool FPCompare(TranslatorVisitor& v, Imm<2> type, Vec Vm, Cond cond, Vec Vn, Imm
|
||||
const IR::U32U64 operand1 = v.V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = v.V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::NZCV then_flags = v.ir.FPCompare(operand1, operand2, exc_on_qnan, true);
|
||||
const IR::NZCV then_flags = v.ir.FPCompare(operand1, operand2, exc_on_qnan);
|
||||
const IR::NZCV else_flags = v.ir.NZCVFromPackedFlags(v.ir.Imm32(flags));
|
||||
v.ir.SetNZCV(v.ir.ConditionalSelect(cond, then_flags, else_flags));
|
||||
return true;
|
||||
|
||||
@@ -16,7 +16,7 @@ bool TranslatorVisitor::FMADD_float(Imm<2> type, Vec Vm, Vec Va, Vec Vn, Vec Vd)
|
||||
const IR::U16U32U64 operanda = V_scalar(*datasize, Va);
|
||||
const IR::U16U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U16U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(operanda, operand1, operand2, true);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(operanda, operand1, operand2);
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
}
|
||||
@@ -30,7 +30,7 @@ bool TranslatorVisitor::FMSUB_float(Imm<2> type, Vec Vm, Vec Va, Vec Vn, Vec Vd)
|
||||
const IR::U16U32U64 operanda = V_scalar(*datasize, Va);
|
||||
const IR::U16U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U16U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(operanda, ir.FPNeg(operand1), operand2, true);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(operanda, ir.FPNeg(operand1), operand2);
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
}
|
||||
@@ -44,7 +44,7 @@ bool TranslatorVisitor::FNMADD_float(Imm<2> type, Vec Vm, Vec Va, Vec Vn, Vec Vd
|
||||
const IR::U16U32U64 operanda = V_scalar(*datasize, Va);
|
||||
const IR::U16U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U16U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(ir.FPNeg(operanda), ir.FPNeg(operand1), operand2, true);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(ir.FPNeg(operanda), ir.FPNeg(operand1), operand2);
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
}
|
||||
@@ -58,7 +58,7 @@ bool TranslatorVisitor::FNMSUB_float(Imm<2> type, Vec Vm, Vec Va, Vec Vn, Vec Vd
|
||||
const IR::U16U32U64 operanda = V_scalar(*datasize, Va);
|
||||
const IR::U16U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U16U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(ir.FPNeg(operanda), operand1, operand2, true);
|
||||
const IR::U16U32U64 result = ir.FPMulAdd(ir.FPNeg(operanda), operand1, operand2);
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ bool TranslatorVisitor::FMUL_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPMul(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPMul(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -31,7 +31,7 @@ bool TranslatorVisitor::FDIV_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPDiv(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPDiv(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -46,7 +46,7 @@ bool TranslatorVisitor::FADD_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPAdd(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPAdd(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -61,7 +61,7 @@ bool TranslatorVisitor::FSUB_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPSub(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPSub(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -76,7 +76,7 @@ bool TranslatorVisitor::FMAX_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPMax(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPMax(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -91,7 +91,7 @@ bool TranslatorVisitor::FMIN_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPMin(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPMin(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -106,7 +106,7 @@ bool TranslatorVisitor::FMAXNM_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPMaxNumeric(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPMaxNumeric(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -121,7 +121,7 @@ bool TranslatorVisitor::FMINNM_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPMinNumeric(operand1, operand2, true);
|
||||
const IR::U32U64 result = ir.FPMinNumeric(operand1, operand2);
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
@@ -136,7 +136,7 @@ bool TranslatorVisitor::FNMUL_float(Imm<2> type, Vec Vm, Vec Vn, Vec Vd) {
|
||||
const IR::U32U64 operand1 = V_scalar(*datasize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(*datasize, Vm);
|
||||
|
||||
const IR::U32U64 result = ir.FPNeg(ir.FPMul(operand1, operand2, true));
|
||||
const IR::U32U64 result = ir.FPNeg(ir.FPMul(operand1, operand2));
|
||||
|
||||
V_scalar(*datasize, Vd, result);
|
||||
return true;
|
||||
|
||||
@@ -70,13 +70,13 @@ bool FPMinMax(TranslatorVisitor& v, bool Q, bool sz, Vec Vn, Vec Vd, MinMaxOpera
|
||||
const auto op = [&](const IR::U32U64& lhs, const IR::U32U64& rhs) {
|
||||
switch (operation) {
|
||||
case MinMaxOperation::Max:
|
||||
return v.ir.FPMax(lhs, rhs, true);
|
||||
return v.ir.FPMax(lhs, rhs);
|
||||
case MinMaxOperation::MaxNumeric:
|
||||
return v.ir.FPMaxNumeric(lhs, rhs, true);
|
||||
return v.ir.FPMaxNumeric(lhs, rhs);
|
||||
case MinMaxOperation::Min:
|
||||
return v.ir.FPMin(lhs, rhs, true);
|
||||
return v.ir.FPMin(lhs, rhs);
|
||||
case MinMaxOperation::MinNumeric:
|
||||
return v.ir.FPMinNumeric(lhs, rhs, true);
|
||||
return v.ir.FPMinNumeric(lhs, rhs);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
@@ -23,13 +23,13 @@ bool FPPairwiseMinMax(TranslatorVisitor& v, bool sz, Vec Vn, Vec Vd, MinMaxOpera
|
||||
const IR::U32U64 result = [&] {
|
||||
switch (operation) {
|
||||
case MinMaxOperation::Max:
|
||||
return v.ir.FPMax(element1, element2, true);
|
||||
return v.ir.FPMax(element1, element2);
|
||||
case MinMaxOperation::MaxNumeric:
|
||||
return v.ir.FPMaxNumeric(element1, element2, true);
|
||||
return v.ir.FPMaxNumeric(element1, element2);
|
||||
case MinMaxOperation::Min:
|
||||
return v.ir.FPMin(element1, element2, true);
|
||||
return v.ir.FPMin(element1, element2);
|
||||
case MinMaxOperation::MinNumeric:
|
||||
return v.ir.FPMinNumeric(element1, element2, true);
|
||||
return v.ir.FPMinNumeric(element1, element2);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
@@ -57,7 +57,7 @@ bool TranslatorVisitor::FADDP_pair_2(bool size, Vec Vn, Vec Vd) {
|
||||
|
||||
const IR::U32U64 operand1 = ir.VectorGetElement(esize, V(128, Vn), 0);
|
||||
const IR::U32U64 operand2 = ir.VectorGetElement(esize, V(128, Vn), 1);
|
||||
const IR::U128 result = ir.ZeroExtendToQuad(ir.FPAdd(operand1, operand2, true));
|
||||
const IR::U128 result = ir.ZeroExtendToQuad(ir.FPAdd(operand1, operand2));
|
||||
V(128, Vd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ bool TranslatorVisitor::FABD_2(bool sz, Vec Vm, Vec Vn, Vec Vd) {
|
||||
|
||||
const IR::U32U64 operand1 = V_scalar(esize, Vn);
|
||||
const IR::U32U64 operand2 = V_scalar(esize, Vm);
|
||||
const IR::U32U64 result = ir.FPAbs(ir.FPSub(operand1, operand2, true));
|
||||
const IR::U32U64 result = ir.FPAbs(ir.FPSub(operand1, operand2));
|
||||
|
||||
V_scalar(esize, Vd, result);
|
||||
return true;
|
||||
|
||||
@@ -39,7 +39,7 @@ bool MultiplyByElement(TranslatorVisitor& v, bool sz, Imm<1> L, Imm<1> M, Imm<4>
|
||||
IR::U32U64 operand1 = v.V_scalar(esize, Vn);
|
||||
|
||||
if (extra_behavior == ExtraBehavior::None) {
|
||||
return v.ir.FPMul(operand1, element, true);
|
||||
return v.ir.FPMul(operand1, element);
|
||||
}
|
||||
|
||||
if (extra_behavior == ExtraBehavior::MultiplyExtended) {
|
||||
@@ -51,7 +51,7 @@ bool MultiplyByElement(TranslatorVisitor& v, bool sz, Imm<1> L, Imm<1> M, Imm<4>
|
||||
}
|
||||
|
||||
const IR::U32U64 operand2 = v.V_scalar(esize, Vd);
|
||||
return v.ir.FPMulAdd(operand2, operand1, element, true);
|
||||
return v.ir.FPMulAdd(operand2, operand1, element);
|
||||
}();
|
||||
|
||||
v.V_scalar(esize, Vd, result);
|
||||
@@ -85,7 +85,7 @@ bool MultiplyByElementHalfPrecision(TranslatorVisitor& v, Imm<1> L, Imm<1> M, Im
|
||||
}
|
||||
|
||||
const IR::U16 operand2 = v.V_scalar(esize, Vd);
|
||||
return v.ir.FPMulAdd(operand2, operand1, element, true);
|
||||
return v.ir.FPMulAdd(operand2, operand1, element);
|
||||
}();
|
||||
|
||||
v.V_scalar(esize, Vd, result);
|
||||
|
||||
@@ -115,10 +115,8 @@ bool TranslatorVisitor::FCMLA_vec(bool Q, Imm<2> size, Vec Vm, Imm<2> rot, Vec V
|
||||
const IR::U32U64 operand3_elem1 = ir.VectorGetElement(esize, operand3, first);
|
||||
const IR::U32U64 operand3_elem2 = ir.VectorGetElement(esize, operand3, second);
|
||||
|
||||
result = ir.VectorSetElement(esize, result, first,
|
||||
ir.FPMulAdd(operand3_elem1, element2, element1, true));
|
||||
result = ir.VectorSetElement(esize, result, second,
|
||||
ir.FPMulAdd(operand3_elem2, element4, element3, true));
|
||||
result = ir.VectorSetElement(esize, result, first, ir.FPMulAdd(operand3_elem1, element2, element1));
|
||||
result = ir.VectorSetElement(esize, result, second, ir.FPMulAdd(operand3_elem2, element4, element3));
|
||||
}
|
||||
|
||||
ir.SetQ(Vd, result);
|
||||
@@ -166,10 +164,8 @@ bool TranslatorVisitor::FCADD_vec(bool Q, Imm<2> size, Vec Vm, Imm<1> rot, Vec V
|
||||
const IR::U32U64 operand1_elem1 = ir.VectorGetElement(esize, operand1, first);
|
||||
const IR::U32U64 operand1_elem3 = ir.VectorGetElement(esize, operand1, second);
|
||||
|
||||
result = ir.VectorSetElement(esize, result, first,
|
||||
ir.FPAdd(operand1_elem1, element1, true));
|
||||
result = ir.VectorSetElement(esize, result, second,
|
||||
ir.FPAdd(operand1_elem3, element3, true));
|
||||
result = ir.VectorSetElement(esize, result, first, ir.FPAdd(operand1_elem1, element1));
|
||||
result = ir.VectorSetElement(esize, result, second, ir.FPAdd(operand1_elem3, element3));
|
||||
}
|
||||
|
||||
ir.SetQ(Vd, result);
|
||||
|
||||
@@ -296,10 +296,8 @@ bool TranslatorVisitor::FCMLA_elt(bool Q, Imm<2> size, Imm<1> L, Imm<1> M, Imm<4
|
||||
const IR::U32U64 operand3_elem1 = ir.VectorGetElement(esize, operand3, first);
|
||||
const IR::U32U64 operand3_elem2 = ir.VectorGetElement(esize, operand3, second);
|
||||
|
||||
result = ir.VectorSetElement(esize, result, first,
|
||||
ir.FPMulAdd(operand3_elem1, element2, element1, true));
|
||||
result = ir.VectorSetElement(esize, result, second,
|
||||
ir.FPMulAdd(operand3_elem2, element4, element3, true));
|
||||
result = ir.VectorSetElement(esize, result, first, ir.FPMulAdd(operand3_elem1, element2, element1));
|
||||
result = ir.VectorSetElement(esize, result, second, ir.FPMulAdd(operand3_elem2, element4, element3));
|
||||
}
|
||||
|
||||
ir.SetQ(Vd, result);
|
||||
|
||||
Reference in New Issue
Block a user