bool RSimdBox::recover(JSContext* cx, SnapshotIterator& iter) const { JSObject* resultObject = nullptr; RValueAllocation a = iter.readAllocation(); MOZ_ASSERT(iter.allocationReadable(a)); const FloatRegisters::RegisterContent* raw = iter.floatAllocationPointer(a); switch (SimdTypeDescr::Type(type_)) { case SimdTypeDescr::Bool32x4: MOZ_ASSERT_IF(a.mode() == RValueAllocation::ANY_FLOAT_REG, a.fpuReg().isSimd128()); resultObject = js::CreateSimd<Bool32x4>(cx, (const Bool32x4::Elem*) raw); break; case SimdTypeDescr::Int32x4: MOZ_ASSERT_IF(a.mode() == RValueAllocation::ANY_FLOAT_REG, a.fpuReg().isSimd128()); resultObject = js::CreateSimd<Int32x4>(cx, (const Int32x4::Elem*) raw); break; case SimdTypeDescr::Float32x4: MOZ_ASSERT_IF(a.mode() == RValueAllocation::ANY_FLOAT_REG, a.fpuReg().isSimd128()); resultObject = js::CreateSimd<Float32x4>(cx, (const Float32x4::Elem*) raw); break; case SimdTypeDescr::Float64x2: MOZ_CRASH("NYI, RSimdBox of Float64x2"); break; case SimdTypeDescr::Int8x16: MOZ_CRASH("NYI, RSimdBox of Int8x16"); break; case SimdTypeDescr::Int16x8: MOZ_CRASH("NYI, RSimdBox of Int16x8"); break; case SimdTypeDescr::Uint8x16: MOZ_CRASH("NYI, RSimdBox of UInt8x16"); break; case SimdTypeDescr::Uint16x8: MOZ_CRASH("NYI, RSimdBox of UInt16x8"); break; case SimdTypeDescr::Uint32x4: MOZ_CRASH("NYI, RSimdBox of UInt32x4"); break; case SimdTypeDescr::Bool8x16: MOZ_CRASH("NYI, RSimdBox of Bool8x16"); break; case SimdTypeDescr::Bool16x8: MOZ_CRASH("NYI, RSimdBox of Bool16x8"); break; case SimdTypeDescr::Bool64x2: MOZ_CRASH("NYI, RSimdBox of Bool64x2"); break; } if (!resultObject) return false; RootedValue result(cx); result.setObject(*resultObject); iter.storeInstructionResult(result); return true; }