本文整理汇总了C++中PPCEmuAssembler::movddup方法的典型用法代码示例。如果您正苦于以下问题:C++ PPCEmuAssembler::movddup方法的具体用法?C++ PPCEmuAssembler::movddup怎么用?C++ PPCEmuAssembler::movddup使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PPCEmuAssembler
的用法示例。
在下文中一共展示了PPCEmuAssembler::movddup方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: jit_fallback
static bool
fmaddGeneric(PPCEmuAssembler& a, Instruction instr)
{
if (instr.rc) {
return jit_fallback(a, instr);
}
// FPSCR, FPRF supposed to be updated here...
auto result = a.allocXmmTmp();
{
auto srcC = a.loadRegisterRead(a.fprps[instr.frC]);
// Do the rounding first so we don't run out of host registers
if (ShouldRound) {
auto tmpSrcC = a.allocXmmTmp(srcC);
roundTo24BitSd(a, tmpSrcC);
srcC = tmpSrcC;
}
auto srcA = a.loadRegisterRead(a.fprps[instr.frA]);
auto srcB = a.loadRegisterRead(a.fprps[instr.frB]);
a.movq(result, srcA);
if (hostHasFMA3()) {
if (ShouldSubtract) {
a.vfmsub132sd(result, srcB, srcC);
} else {
a.vfmadd132sd(result, srcB, srcC);
}
} else { // no FMA3
a.mulsd(result, srcC);
if (ShouldSubtract) {
a.subsd(result, srcB);
} else {
a.addsd(result, srcB);
}
}
}
if (ShouldNegate) {
negateXmmSd(a, result);
}
if (ShouldRound) {
roundToSingleSd(a, result, result);
auto dst = a.loadRegisterWrite(a.fprps[instr.frD]);
a.movddup(dst, result);
} else {
auto dst = a.loadRegisterReadWrite(a.fprps[instr.frD]);
a.movsd(dst, result);
}
return true;
}