/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.objects.simd; import com.github.anba.es6draft.runtime.ExecutionContext; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.types.Intrinsics; import com.github.anba.es6draft.runtime.types.ScriptObject; import com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject; /** * <h1>SIMD</h1> * <h2>SIMD objects</h2> * <ul> * <li>Properties of SIMD Instances * </ul> */ public final class SIMDObject extends OrdinaryObject { /** [[SIMDWrapperData]] */ private final SIMDValue data; /** * Constructs a new SIMD object. * * @param realm * the realm object * @param data * the SIMD data * @param prototype * the prototype object */ public SIMDObject(Realm realm, SIMDValue data, ScriptObject prototype) { super(realm); this.data = data; setPrototype(prototype); } /** * [[SIMDWrapperData]] * * @return the wrapped SIMD value */ public SIMDValue getData() { return data; } /** * Creates a new SIMD object. * * @param cx * the execution context * @param value * the SIMD value * @return the new SIMD object */ public static SIMDObject SIMDCreate(ExecutionContext cx, SIMDValue value) { return new SIMDObject(cx.getRealm(), value, cx.getIntrinsic(getProtoKey(value.getType()))); } /** * Creates a new SIMD object. * * @param cx * the execution context * @param value * the SIMD value * @param prototype * the prototype object * @return the new SIMD object */ public static SIMDObject SIMDCreate(ExecutionContext cx, SIMDValue value, ScriptObject prototype) { return new SIMDObject(cx.getRealm(), value, prototype); } private static Intrinsics getProtoKey(SIMDType type) { switch (type) { case Float64x2: return Intrinsics.SIMD_Float64x2Prototype; case Float32x4: return Intrinsics.SIMD_Float32x4Prototype; case Int32x4: return Intrinsics.SIMD_Int32x4Prototype; case Int16x8: return Intrinsics.SIMD_Int16x8Prototype; case Int8x16: return Intrinsics.SIMD_Int8x16Prototype; case Uint32x4: return Intrinsics.SIMD_Uint32x4Prototype; case Uint16x8: return Intrinsics.SIMD_Uint16x8Prototype; case Uint8x16: return Intrinsics.SIMD_Uint8x16Prototype; case Bool64x2: return Intrinsics.SIMD_Bool64x2Prototype; case Bool32x4: return Intrinsics.SIMD_Bool32x4Prototype; case Bool16x8: return Intrinsics.SIMD_Bool16x8Prototype; case Bool8x16: return Intrinsics.SIMD_Bool8x16Prototype; default: throw new AssertionError(); } } }