From b5a32b9dca489d34f7d3511475991853d2d5706a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jukka=20Jyl=C3=A4nki?= Date: Sat, 20 Jun 2015 20:21:39 +0300 Subject: [PATCH] Implement SSE1 _mm_sfence(). Closes #3051. --- system/include/emscripten/xmmintrin.h | 6 ++++++ tests/test_sse1.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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