本文整理汇总了C++中MDefinition::isMod方法的典型用法代码示例。如果您正苦于以下问题:C++ MDefinition::isMod方法的具体用法?C++ MDefinition::isMod怎么用?C++ MDefinition::isMod使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MDefinition
的用法示例。
在下文中一共展示了MDefinition::isMod方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ToRegister
void
CodeGeneratorX86::visitDivOrModI64(LDivOrModI64* lir)
{
Register64 lhs = ToRegister64(lir->getInt64Operand(LDivOrModI64::Lhs));
Register64 rhs = ToRegister64(lir->getInt64Operand(LDivOrModI64::Rhs));
Register temp = ToRegister(lir->temp());
Register64 output = ToOutRegister64(lir);
MOZ_ASSERT(output == ReturnReg64);
Label done;
// Handle divide by zero.
if (lir->canBeDivideByZero())
masm.branchTest64(Assembler::Zero, rhs, rhs, temp, trap(lir, wasm::Trap::IntegerDivideByZero));
MDefinition* mir = lir->mir();
// Handle an integer overflow exception from INT64_MIN / -1.
if (lir->canBeNegativeOverflow()) {
Label notmin;
masm.branch64(Assembler::NotEqual, lhs, Imm64(INT64_MIN), ¬min);
masm.branch64(Assembler::NotEqual, rhs, Imm64(-1), ¬min);
if (mir->isMod())
masm.xor64(output, output);
else
masm.jump(trap(lir, wasm::Trap::IntegerOverflow));
masm.jump(&done);
masm.bind(¬min);
}
masm.setupWasmABICall();
masm.passABIArg(lhs.high);
masm.passABIArg(lhs.low);
masm.passABIArg(rhs.high);
masm.passABIArg(rhs.low);
MOZ_ASSERT(gen->compilingWasm());
if (mir->isMod())
masm.callWithABI(lir->bytecodeOffset(), wasm::SymbolicAddress::ModI64);
else
masm.callWithABI(lir->bytecodeOffset(), wasm::SymbolicAddress::DivI64);
// output in edx:eax, move to output register.
masm.movl(edx, output.high);
MOZ_ASSERT(eax == output.low);
masm.bind(&done);
}