diff --git a/system/include/emscripten/xmmintrin.h b/system/include/emscripten/xmmintrin.h index 4868c8221df86..ceb9acc1cc486 100644 --- a/system/include/emscripten/xmmintrin.h +++ b/system/include/emscripten/xmmintrin.h @@ -120,6 +120,12 @@ _mm_store_ps(float *__p, __m128 __a) // No NTA cache hint available. #define _mm_stream_ps _mm_store_ps +static __inline__ void __attribute__((__always_inline__)) +_mm_sfence(void) +{ + __sync_synchronize(); // Emscripten/SharedArrayBuffer has only a full barrier instruction, which gives a stronger guarantee. +} + #define _MM_SHUFFLE(w, z, y, x) (((w) << 6) | ((z) << 4) | ((y) << 2) | (x)) // This is defined as a macro because __builtin_shufflevector requires its diff --git a/tests/test_sse1.cpp b/tests/test_sse1.cpp index 87680279bc0d7..e155c52176312 100644 --- a/tests/test_sse1.cpp +++ b/tests/test_sse1.cpp @@ -332,8 +332,8 @@ int main() _mm_prefetch(dummyData, _MM_HINT_T1); _mm_prefetch(dummyData, _MM_HINT_T2); _mm_prefetch(dummyData, _MM_HINT_NTA); - _mm_sfence(); #endif + _mm_sfence(); // SSE1 Misc instructions: #ifdef TEST_M64