A64: Implement FADDP (scalar)

This commit is contained in:
MerryMage 2018-07-15 22:46:27 +01:00
parent 33fa65de23
commit 89e43867c1
2 changed files with 11 additions and 1 deletions

View file

@ -427,7 +427,7 @@ INST(ADDP_pair, "ADDP (scalar)", "01011
//INST(FMAXNMP_pair_1, "FMAXNMP (scalar)", "0101111000110000110010nnnnnddddd")
//INST(FMAXNMP_pair_2, "FMAXNMP (scalar)", "011111100z110000110010nnnnnddddd")
//INST(FADDP_pair_1, "FADDP (scalar)", "0101111000110000110110nnnnnddddd")
//INST(FADDP_pair_2, "FADDP (scalar)", "011111100z110000110110nnnnnddddd")
INST(FADDP_pair_2, "FADDP (scalar)", "011111100z110000110110nnnnnddddd")
//INST(FMAXP_pair_1, "FMAXP (scalar)", "0101111000110000111110nnnnnddddd")
//INST(FMAXP_pair_2, "FMAXP (scalar)", "011111100z110000111110nnnnnddddd")
//INST(FMINNMP_pair_1, "FMINNMP (scalar)", "0101111010110000110010nnnnnddddd")

View file

@ -21,5 +21,15 @@ bool TranslatorVisitor::ADDP_pair(Imm<2> size, Vec Vn, Vec Vd) {
return true;
}
bool TranslatorVisitor::FADDP_pair_2(bool size, Vec Vn, Vec Vd) {
const size_t esize = size ? 64 : 32;
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));
V(128, Vd, result);
return true;
}
} // namespace A64
} // namespace Dynarmic