Hi Joe,

we do want to support up to SSE 4.2, although some of that support will
fall back to scalarized code, and at the moment the support is only
available experimentally on asm.js, and not on Wasm. However there is still
value in maintaining the asm.js side of SSE support, since that will likely
help target SIMD support later on Wasm. Feel free to open GitHub items
about any missing functions you care about (if you didn't already?), I can
look at adding them in at some point.

2016-11-02 13:17 GMT+02:00 Joe White <[email protected]>:

> Hi Charles,
>
> Thanks for the reply.
>
> Anything that uses processor specific intrinsics won't work with
>> Emscripten.
>> There is support for SSE 3 and below, but see details here:
>> https://kripken.github.io/emscripten-site/docs/porting/simd.html
>
>
> Are these two statements not contradictory?
>
> I realise in the mainline version there is only support up to SSE3. This
> github issue[0] suggested that one of the developers had provided partial
> support for SSE4.1 and this file ssimmintrin.h[1] provides coverage for
> the intrinsics we're using. However when I include the header the compiler
> breaks on the wrapper code.
>
> Maybe I'm trying to use something that is too new?
>
> Cheers,
> Joe
>
> [0] https://github.com/kripken/emscripten/issues/4030
> [1] https://github.com/kripken/emscripten/blob/
> af684d5600492a5d69f0ae986492762f0fc87981/system/include/
> emscripten/smmintrin.h
>
> On Tue, Nov 1, 2016 at 10:33 PM, Charles Vaughn <[email protected]> wrote:
>
>> Anything that uses processor specific intrinsics won't work with
>> Emscripten.
>>
>> There is support for SSE 3 and below, but see details here:
>> https://kripken.github.io/emscripten-site/docs/porting/simd.html
>>
>> Especially if you're not using it in a browser with built in SIMD
>> support, don't expect it to be fast.
>>
>>
>> On Tuesday, November 1, 2016 at 7:50:31 AM UTC-7, [email protected]
>> wrote:
>>>
>>> Hi,
>>>
>>> I'm trying to compile our C++ code that makes use of SSE 4.1 intrinsics.
>>>
>>> I'm on OSX 10.11.6 using emscripten-incoming-64bit on commit
>>> a28973d1b60a22723768e4e2bbe77b6795f964d1
>>>
>>> The emscripten command I'm running is:
>>>
>>> path/to/emscripten/incoming/em++ --pre-js 
>>> /Users/joe/Desktop/test2/js/hv_wrapper.js
>>> /Users/joe/Desktop/test2/c/Heavy_heavy.cpp
>>> /Users/joe/Desktop/test2/c/HeavyContext.cpp
>>> /Users/joe/Desktop/test2/c/HvHeavy.cpp 
>>> /Users/joe/Desktop/test2/c/HvLightPipe.c
>>> /Users/joe/Desktop/test2/c/HvMessage.c 
>>> /Users/joe/Desktop/test2/c/HvMessagePool.c
>>> /Users/joe/Desktop/test2/c/HvMessageQueue.c
>>> /Users/joe/Desktop/test2/c/HvSignalPhasor.c
>>> /Users/joe/Desktop/test2/c/HvSignalVar.c 
>>> /Users/joe/Desktop/test2/c/HvTable.c
>>> -msse4.1 -ffast-math -DNDEBUG -std=c++11 -Wall -s WASM=1 -s
>>> RESERVED_FUNCTION_POINTERS=2 -s EXPORTED_FUNCTIONS=["_hv_heavy_new",
>>> "_hv_delete", "_hv_processInline", "_hv_getNumInputChannels",
>>> "_hv_getNumOutputChannels", "_hv_setPrintHook", "_hv_sendFloatToReceiver",
>>> "_hv_sendBangToReceiver", "_hv_sendSymbolToReceiver", "_hv_stringToHash",
>>> "_hv_msg_getByteSize", "_hv_msg_init", "_hv_msg_setFloat",
>>> "_hv_msg_getFloat", "_hv_table_getLength", "_hv_table_resize",
>>> "_hv_table_getBuffer"] -O3 --memory-init-file 0 -o
>>> /Users/joe/Desktop/test2/js/heavyLib.min.js
>>>
>>>
>>> And the errors I get are these:
>>>
>>> path/to/c/HvMath.h:335:11: error: use of undeclared identifier
>>> '__builtin_ia32_roundps'
>>>   *bOut = _mm_ceil_ps(bIn);
>>>           ^
>>> path/to/emscripten/incoming/system/include/SSE/smmintrin.h:53:30: note:
>>> expanded from macro '_mm_ceil_ps'
>>> #define _mm_ceil_ps(X)       _mm_round_ps((X), _MM_FROUND_CEIL)
>>>                              ^
>>> path/to/emscripten/incoming/system/include/SSE/smmintrin.h:64:11: note:
>>> expanded from macro '_mm_round_ps'
>>>   (__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M)); })
>>>           ^
>>> path/to/c/HvMath.h:335:9: error: assigning to '__m128' (aka 'float32x4')
>>> from incompatible type 'void'
>>>   *bOut = _mm_ceil_ps(bIn);
>>>         ^ ~~~~~~~~~~~~~~~~
>>> path/to/c/HvMath.h:353:11: error: use of undeclared identifier
>>> '__builtin_ia32_roundps'
>>>   *bOut = _mm_floor_ps(bIn);
>>>           ^
>>> path/to/emscripten/incoming/system/include/SSE/smmintrin.h:58:30: note:
>>> expanded from macro '_mm_floor_ps'
>>> #define _mm_floor_ps(X)      _mm_round_ps((X), _MM_FROUND_FLOOR)
>>>                              ^
>>> path/to/emscripten/incoming/system/include/SSE/smmintrin.h:64:11: note:
>>> expanded from macro '_mm_round_ps'
>>>   (__m128)__builtin_ia32_roundps((__v4sf)(__m128)(X), (M)); })
>>>           ^
>>> path/to/c/HvMath.h:353:9: error: assigning to '__m128' (aka 'float32x4')
>>> from incompatible type 'void'
>>>   *bOut = _mm_floor_ps(bIn);
>>>         ^ ~~~~~~~~~~~~~~~~~
>>> 4 errors generated.
>>> ERROR:root:compiler frontend failed to generate LLVM bitcode, halting
>>>
>>>
>>> It looks like it can't find the builtin x86 functions, I'm not that
>>> familiar with the emscripten build system so I'm wondering if there's
>>> something I'm misssing?
>>>
>>> Note: i had to change the #include <immintrin.h> declaration we usually
>>> have to #include <smmintrin.h> for emscripten to find the SSE4.1
>>> intrinsics.
>>>
>>> Any pointers would be much appreciated!
>>>
>>> Thanks,
>>> Joe
>>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "emscripten-discuss" group.
>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>> pic/emscripten-discuss/h4xM0ds5lJE/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to