Esempio n. 1
0
int main()
{
    int32x4 v = emscripten_int32x4_set(1, 0, 1, 4);
    DUMP(v);
    int32x4 w = emscripten_int32x4_splat(2);
    DUMP(w);
    DUMP(emscripten_int32x4_add(v, w));
    DUMP(emscripten_int32x4_sub(v, w));
    DUMP(emscripten_int32x4_mul(v, w));
    DUMP(emscripten_int32x4_neg(v));
    DUMP(emscripten_int32x4_and(v, w));
    DUMP(emscripten_int32x4_xor(v, w));
    DUMP(emscripten_int32x4_or(v, w));
    DUMP(emscripten_int32x4_not(v));
    DUMP(emscripten_int32x4_lessThan(v, w));
    DUMP(emscripten_int32x4_lessThanOrEqual(v, w));
    DUMP(emscripten_int32x4_greaterThan(v, w));
    DUMP(emscripten_int32x4_greaterThanOrEqual(v, w));
    DUMP(emscripten_int32x4_equal(v, w));
    DUMP(emscripten_int32x4_notEqual(v, w));
//    DUMPINT(emscripten_int32x4_anyTrue(v)); // XXX TODO: Figure out if there is a no-op cast from int32x4->bool32x4 and enable this, or remove if this doesn't make sense.
//    DUMPINT(emscripten_int32x4_allTrue(v)); // XXX TODO: Figure out if there is a no-op cast from int32x4->bool32x4 and enable this, or remove if this doesn't make sense.
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 0));
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 1));
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 2));
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 16));
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 32));
    DUMP(emscripten_int32x4_shiftLeftByScalar(v, 48));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 0));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 1));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 2));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 16));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 32));
    DUMP(emscripten_int32x4_shiftRightByScalar(v, 48));
    bool32x4 b = emscripten_int32x4_set(0, -1, 0, -1);
    DUMP(emscripten_int32x4_select(b, v, w));
    DUMP(emscripten_int32x4_replaceLane(v, 0, 9));
    DUMP(emscripten_int32x4_replaceLane(v, 1, 3));
    DUMP(emscripten_int32x4_replaceLane(v, 2, 0));
    DUMP(emscripten_int32x4_replaceLane(v, 3, 91));
    uint8_t bytes[16];
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_int32x4_store(bytes, v);
    DUMPBYTES("emscripten_int32x4_store", bytes);
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_int32x4_store1(bytes, v);
    DUMPBYTES("emscripten_int32x4_store1", bytes);
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_int32x4_store2(bytes, v);
    DUMPBYTES("emscripten_int32x4_store2", bytes);
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_int32x4_store3(bytes, v);
    DUMPBYTES("emscripten_int32x4_store3", bytes);

    emscripten_int32x4_store(bytes, v);
    DUMP(emscripten_int32x4_load(bytes));
    DUMP(emscripten_int32x4_load1(bytes));
    DUMP(emscripten_int32x4_load2(bytes));
    DUMP(emscripten_int32x4_load3(bytes));
    // TODO: emscripten_int32x4_fromFloat64x2Bits
    // TODO: emscripten_int32x4_fromInt32x4Bits
    // TODO: emscripten_int32x4_fromUint32x4Bits
    // TODO: emscripten_int32x4_fromInt16x8Bits
    // TODO: emscripten_int32x4_fromUint16x8Bits
    // TODO: emscripten_int32x4_fromInt8x16Bits
    // TODO: emscripten_int32x4_fromUint8x16Bits
    // TODO: emscripten_int32x4_fromInt32x4
    // TODO: emscripten_int32x4_fromUint32x4
    DUMP(emscripten_int32x4_swizzle(v, 0, 1, 2, 3));
    DUMP(emscripten_int32x4_swizzle(v, 3, 2, 1, 0));
    DUMP(emscripten_int32x4_swizzle(v, 0, 0, 0, 0));
    DUMP(emscripten_int32x4_swizzle(v, 0, 3, 0, 3));
    DUMP(emscripten_int32x4_swizzle(v, 3, 3, 3, 3));
    int32x4 z = emscripten_int32x4_set(-5, 20, 14, 9);
    DUMP(z);
    DUMP(emscripten_int32x4_shuffle(v, z, 0, 0, 0, 0));
    DUMP(emscripten_int32x4_shuffle(v, z, 4, 4, 4, 4));
    DUMP(emscripten_int32x4_shuffle(v, z, 7, 7, 7, 7));
    DUMP(emscripten_int32x4_shuffle(v, z, 0, 2, 4, 6));
    DUMP(emscripten_int32x4_shuffle(v, z, 7, 0, 3, 5));
    printf("Done!\n");
}
Esempio n. 2
0
int main()
{
    float64x2 v = emscripten_float64x2_set(-1.5f, 2.5f);
    DUMP(v);
    float64x2 w = emscripten_float64x2_splat(1.5f);
    DUMP(w);
    DUMP(emscripten_float64x2_add(v, w));
    DUMP(emscripten_float64x2_sub(v, w));
    DUMP(emscripten_float64x2_mul(v, w));
    DUMP(emscripten_float64x2_div(v, w));
    DUMP(emscripten_float64x2_max(v, w));
    DUMP(emscripten_float64x2_min(v, w));
    DUMP(emscripten_float64x2_maxNum(v, w));
    DUMP(emscripten_float64x2_minNum(v, w));
    DUMP(emscripten_float64x2_neg(v));
    DUMP(emscripten_float64x2_sqrt(v));
    float64x2 rcp = emscripten_float64x2_reciprocalApproximation(v);
    assert(fabs(emscripten_float64x2_extractLane(rcp, 0) - 1.0 / emscripten_float64x2_extractLane(v, 0)) < 0.1);
    assert(fabs(emscripten_float64x2_extractLane(rcp, 1) - 1.0 / emscripten_float64x2_extractLane(v, 1)) < 0.1);
    float64x2 rcpSqrt = emscripten_float64x2_reciprocalSqrtApproximation(v);
    // assert(isnan(emscripten_float64x2_extractLane(rcpSqrt, 0))); XXX TODO Enable once Float64x2 type lands in SIMD.js.
    assert(fabs(emscripten_float64x2_extractLane(rcpSqrt, 1) - 1.0 / sqrt(emscripten_float64x2_extractLane(v, 1))) < 0.1);
    DUMP(emscripten_float64x2_abs(v));
    DUMP(emscripten_float64x2_and(v, w));
    DUMP(emscripten_float64x2_xor(v, w));
    DUMP(emscripten_float64x2_or(v, w));
    DUMP(emscripten_float64x2_not(v));
    DUMP(emscripten_float64x2_lessThan(v, w));
    DUMP(emscripten_float64x2_lessThanOrEqual(v, w));
    DUMP(emscripten_float64x2_greaterThan(v, w));
    DUMP(emscripten_float64x2_greaterThanOrEqual(v, w));
    DUMP(emscripten_float64x2_equal(v, w));
    DUMP(emscripten_float64x2_notEqual(v, w));
    //bool64x2 b = emscripten_int64x2_set(0, -1); // TODO: Can't yet use this form, no int64x2.
    //DUMP(emscripten_float64x2_select(b, v, w));
    DUMP(emscripten_float64x2_replaceLane(v, 0, 9.f));
    DUMP(emscripten_float64x2_replaceLane(v, 1, -3.f));
    uint8_t bytes[16];
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_float64x2_store(bytes, v);
    DUMPBYTES("emscripten_float64x2_store", bytes);
    memset(bytes, 0xFF, sizeof(bytes));
    emscripten_float64x2_store1(bytes, v);
    DUMPBYTES("emscripten_float64x2_store1", bytes);

    emscripten_float64x2_store(bytes, v);
    DUMP(emscripten_float64x2_load(bytes));
    DUMP(emscripten_float64x2_load1(bytes));
    // TODO: emscripten_float64x2_fromFloat64x2Bits
    // TODO: emscripten_float64x2_fromInt64x2Bits
    // TODO: emscripten_float64x2_fromUint64x2Bits
    // TODO: emscripten_float64x2_fromInt16x8Bits
    // TODO: emscripten_float64x2_fromUint16x8Bits
    // TODO: emscripten_float64x2_fromInt8x16Bits
    // TODO: emscripten_float64x2_fromUint8x16Bits
    // TODO: emscripten_float64x2_fromInt64x2
    // TODO: emscripten_float64x2_fromUint64x2
    DUMP(emscripten_float64x2_swizzle(v, 0, 1));
    DUMP(emscripten_float64x2_swizzle(v, 1, 0));
    DUMP(emscripten_float64x2_swizzle(v, 0, 0));
    DUMP(emscripten_float64x2_swizzle(v, 1, 1));
    float64x2 z = emscripten_float64x2_set(-5.5f, 20.5f);
    DUMP(z);
    DUMP(emscripten_float64x2_shuffle(v, z, 0, 0));
    DUMP(emscripten_float64x2_shuffle(v, z, 2, 2));
    DUMP(emscripten_float64x2_shuffle(v, z, 3, 3));
    DUMP(emscripten_float64x2_shuffle(v, z, 0, 2));
    DUMP(emscripten_float64x2_shuffle(v, z, 3, 1));

    printf("Done!\n");
}