summaryrefslogtreecommitdiff
path: root/lib/Headers/xmmintrin.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Headers/xmmintrin.h')
-rw-r--r--lib/Headers/xmmintrin.h11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/Headers/xmmintrin.h b/lib/Headers/xmmintrin.h
index 7291f88979e43..4938399063cdd 100644
--- a/lib/Headers/xmmintrin.h
+++ b/lib/Headers/xmmintrin.h
@@ -464,20 +464,19 @@ _mm_cvtss_f32(__m128 a)
static inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm_loadh_pi(__m128 a, __m64 const *p)
{
- return __builtin_ia32_loadhps(a, (__v2si *)p);
+ __m128 b;
+ b[0] = *(float*)p;
+ b[1] = *((float*)p+1);
+ return __builtin_shufflevector(a, b, 0, 1, 4, 5);
}
static inline __m128 __attribute__((__always_inline__, __nodebug__))
_mm_loadl_pi(__m128 a, __m64 const *p)
{
-#if 0
- // FIXME: This should work, but gives really crappy code at the moment
__m128 b;
b[0] = *(float*)p;
b[1] = *((float*)p+1);
- return __builtin_shufflevector(a, b, 0, 1, 4, 5);
-#endif
- return __builtin_ia32_loadlps(a, (__v2si *)p);
+ return __builtin_shufflevector(a, b, 4, 5, 2, 3);
}
static inline __m128 __attribute__((__always_inline__, __nodebug__))