bool CodeGeneratorX86::visitInterruptCheck(LInterruptCheck *lir) { OutOfLineCode *ool = oolCallVM(InterruptCheckInfo, lir, (ArgList()), StoreNothing()); if (!ool) return false; void *interrupt = (void*)&gen->compartment->rt->interrupt; masm.cmpl(Operand(interrupt), Imm32(0)); masm.j(Assembler::NonZero, ool->entry()); masm.bind(ool->rejoin()); return true; }
bool CodeGeneratorX64::visitInterruptCheck(LInterruptCheck *lir) { OutOfLineCode *ool = oolCallVM(InterruptCheckInfo, lir, (ArgList()), StoreNothing()); if (!ool) return false; masm.branch32(Assembler::NotEqual, AbsoluteAddress(&GetIonContext()->runtime->interrupt), Imm32(0), ool->entry()); masm.bind(ool->rejoin()); return true; }
bool CodeGeneratorX64::visitInterruptCheck(LInterruptCheck *lir) { OutOfLineCode *ool = oolCallVM(InterruptCheckInfo, lir, (ArgList()), StoreNothing()); if (!ool) return false; void *interrupt = (void*)&GetIonContext()->runtime->interrupt; masm.movq(ImmWord(interrupt), ScratchReg); masm.cmpl(Operand(ScratchReg, 0), Imm32(0)); masm.j(Assembler::NonZero, ool->entry()); masm.bind(ool->rejoin()); return true; }
bool CodeGeneratorX86::visitInterruptCheck(LInterruptCheck *lir) { typedef bool (*pf)(JSContext *); static const VMFunction interruptCheckInfo = FunctionInfo<pf>(InterruptCheck); OutOfLineCode *ool = oolCallVM(interruptCheckInfo, lir, (ArgList()), StoreNothing()); if (!ool) return false; void *interrupt = (void*)&gen->compartment->rt->interrupt; masm.cmpl(Operand(interrupt), Imm32(0)); masm.j(Assembler::NonZero, ool->entry()); masm.bind(ool->rejoin()); return true; }