void CodeGeneratorX64::visitAsmJSStoreGlobalVar(LAsmJSStoreGlobalVar* ins) { MAsmJSStoreGlobalVar* mir = ins->mir(); MIRType type = mir->value()->type(); MOZ_ASSERT(IsNumberType(type) || IsSimdType(type)); CodeOffsetLabel label; switch (type) { case MIRType_Int32: label = masm.storeRipRelativeInt32(ToRegister(ins->value())); break; case MIRType_Float32: label = masm.storeRipRelativeFloat32(ToFloatRegister(ins->value())); break; case MIRType_Double: label = masm.storeRipRelativeDouble(ToFloatRegister(ins->value())); break; // Aligned access: code is aligned on PageSize + there is padding // before the global data section. case MIRType_Int32x4: label = masm.storeRipRelativeInt32x4(ToFloatRegister(ins->value())); break; case MIRType_Float32x4: label = masm.storeRipRelativeFloat32x4(ToFloatRegister(ins->value())); break; default: MOZ_CRASH("unexpected type in visitAsmJSStoreGlobalVar"); } masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
void CodeGeneratorX86::visitAsmJSStoreGlobalVar(LAsmJSStoreGlobalVar* ins) { MAsmJSStoreGlobalVar* mir = ins->mir(); MIRType type = mir->value()->type(); MOZ_ASSERT(IsNumberType(type) || IsSimdType(type)); CodeOffset label; switch (type) { case MIRType_Int32: label = masm.movlWithPatch(ToRegister(ins->value()), PatchedAbsoluteAddress()); break; case MIRType_Float32: label = masm.vmovssWithPatch(ToFloatRegister(ins->value()), PatchedAbsoluteAddress()); break; case MIRType_Double: label = masm.vmovsdWithPatch(ToFloatRegister(ins->value()), PatchedAbsoluteAddress()); break; // Aligned access: code is aligned on PageSize + there is padding // before the global data section. case MIRType_Int32x4: label = masm.vmovdqaWithPatch(ToFloatRegister(ins->value()), PatchedAbsoluteAddress()); break; case MIRType_Float32x4: label = masm.vmovapsWithPatch(ToFloatRegister(ins->value()), PatchedAbsoluteAddress()); break; default: MOZ_CRASH("unexpected type in visitAsmJSStoreGlobalVar"); } masm.append(AsmJSGlobalAccess(label, mir->globalDataOffset())); }
bool CodeGeneratorX64::visitAsmJSStoreGlobalVar(LAsmJSStoreGlobalVar *ins) { MAsmJSStoreGlobalVar *mir = ins->mir(); MIRType type = mir->value()->type(); JS_ASSERT(type == MIRType_Int32 || type == MIRType_Double); CodeOffsetLabel label; if (type == MIRType_Int32) label = masm.storeRipRelativeInt32(ToRegister(ins->value())); else label = masm.storeRipRelativeDouble(ToFloatRegister(ins->value())); return gen->noteGlobalAccess(label.offset(), mir->globalDataOffset()); }