void CodeGeneratorX86::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins) { MAsmJSLoadFuncPtr* mir = ins->mir(); Register index = ToRegister(ins->index()); Register out = ToRegister(ins->output()); CodeOffsetLabel label = masm.movlWithPatch(PatchedAbsoluteAddress(), index, TimesFour, out); masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
bool CodeGeneratorX86::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr *ins) { MAsmJSLoadFuncPtr *mir = ins->mir(); Register index = ToRegister(ins->index()); Register out = ToRegister(ins->output()); CodeOffsetLabel label = masm.movlWithPatch(NULL, index, TimesFour, out); return gen->noteGlobalAccess(label.offset(), mir->globalDataOffset()); }
void CodeGeneratorX64::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins) { MAsmJSLoadFuncPtr* mir = ins->mir(); Register index = ToRegister(ins->index()); Register tmp = ToRegister(ins->temp()); Register out = ToRegister(ins->output()); CodeOffsetLabel label = masm.leaRipRelative(tmp); masm.loadPtr(Operand(tmp, index, TimesEight, 0), out); masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
void CodeGeneratorX64::visitAsmJSLoadFuncPtr(LAsmJSLoadFuncPtr* ins) { MAsmJSLoadFuncPtr* mir = ins->mir(); Register index = ToRegister(ins->index()); Register tmp = ToRegister(ins->temp()); Register out = ToRegister(ins->output()); if (mir->hasLimit()) { masm.branch32(Assembler::Condition::AboveOrEqual, index, Imm32(mir->limit()), wasm::JumpTarget::OutOfBounds); } CodeOffset label = masm.leaRipRelative(tmp); masm.loadPtr(Operand(tmp, index, ScalePointer, 0), out); masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }