ir_emitter: Default fpcr_controlled arguments to true

This commit is contained in:
MerryMage
2020-06-19 22:46:19 +01:00
parent 794440cf8d
commit d3664b03fe
12 changed files with 62 additions and 68 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);