void CodeGeneratorX64::visitAsmJSLoadGlobalVar(LAsmJSLoadGlobalVar* ins) { MAsmJSLoadGlobalVar* mir = ins->mir(); MIRType type = mir->type(); MOZ_ASSERT(IsNumberType(type) || IsSimdType(type)); CodeOffsetLabel label; switch (type) { case MIRType_Int32: label = masm.loadRipRelativeInt32(ToRegister(ins->output())); break; case MIRType_Float32: label = masm.loadRipRelativeFloat32(ToFloatRegister(ins->output())); break; case MIRType_Double: label = masm.loadRipRelativeDouble(ToFloatRegister(ins->output())); break; // Aligned access: code is aligned on PageSize + there is padding // before the global data section. case MIRType_Int32x4: label = masm.loadRipRelativeInt32x4(ToFloatRegister(ins->output())); break; case MIRType_Float32x4: label = masm.loadRipRelativeFloat32x4(ToFloatRegister(ins->output())); break; default: MOZ_CRASH("unexpected type in visitAsmJSLoadGlobalVar"); } masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
void CodeGeneratorX86::visitAsmJSLoadGlobalVar(LAsmJSLoadGlobalVar* ins) { MAsmJSLoadGlobalVar* mir = ins->mir(); MIRType type = mir->type(); MOZ_ASSERT(IsNumberType(type) || IsSimdType(type)); CodeOffset label; switch (type) { case MIRType_Int32: label = masm.movlWithPatch(PatchedAbsoluteAddress(), ToRegister(ins->output())); break; case MIRType_Float32: label = masm.vmovssWithPatch(PatchedAbsoluteAddress(), ToFloatRegister(ins->output())); break; case MIRType_Double: label = masm.vmovsdWithPatch(PatchedAbsoluteAddress(), ToFloatRegister(ins->output())); break; // Aligned access: code is aligned on PageSize + there is padding // before the global data section. case MIRType_Int32x4: label = masm.vmovdqaWithPatch(PatchedAbsoluteAddress(), ToFloatRegister(ins->output())); break; case MIRType_Float32x4: label = masm.vmovapsWithPatch(PatchedAbsoluteAddress(), ToFloatRegister(ins->output())); break; default: MOZ_CRASH("unexpected type in visitAsmJSLoadGlobalVar"); } masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
bool CodeGeneratorX64::visitAsmJSLoadGlobalVar(LAsmJSLoadGlobalVar *ins) { MAsmJSLoadGlobalVar *mir = ins->mir(); CodeOffsetLabel label; if (mir->type() == MIRType_Int32) label = masm.loadRipRelativeInt32(ToRegister(ins->output())); else label = masm.loadRipRelativeDouble(ToFloatRegister(ins->output())); return gen->noteGlobalAccess(label.offset(), mir->globalDataOffset()); }
bool CodeGeneratorX86::visitAsmJSLoadGlobalVar(LAsmJSLoadGlobalVar *ins) { MAsmJSLoadGlobalVar *mir = ins->mir(); CodeOffsetLabel label; if (mir->type() == MIRType_Int32) label = masm.movlWithPatch(NULL, ToRegister(ins->output())); else label = masm.movsdWithPatch(NULL, ToFloatRegister(ins->output())); return gen->noteGlobalAccess(label.offset(), mir->globalDataOffset()); }