diff --git a/src/gallium/drivers/swr/rasterizer/common/os.h b/src/gallium/drivers/swr/rasterizer/common/os.h index ef00a255d31..0b8f273bba4 100644 --- a/src/gallium/drivers/swr/rasterizer/common/os.h +++ b/src/gallium/drivers/swr/rasterizer/common/os.h @@ -171,6 +171,12 @@ void _mm256_storeu2_m128i(__m128i *hi, __m128i *lo, __m256i a) _mm_storeu_si128((__m128i*)lo, _mm256_castsi256_si128(a)); _mm_storeu_si128((__m128i*)hi, _mm256_extractf128_si256(a, 0x1)); } + +// gcc prior to 4.9 doesn't have _mm*_undefined_* +#if (__GNUC__) && (GCC_VERSION < 409000) +#define _mm_undefined_si128 _mm_setzero_si128 +#define _mm256_undefined_ps _mm256_setzero_ps +#endif #endif inline diff --git a/src/gallium/drivers/swr/rasterizer/common/simd16intrin.h b/src/gallium/drivers/swr/rasterizer/common/simd16intrin.h index aa4757428fa..90c903dfaba 100644 --- a/src/gallium/drivers/swr/rasterizer/common/simd16intrin.h +++ b/src/gallium/drivers/swr/rasterizer/common/simd16intrin.h @@ -405,8 +405,8 @@ INLINE simd16mask SIMDAPI _simd16_movemask_pd(simd16scalard a) INLINE uint64_t SIMDAPI _simd16_movemask_epi8(simd16scalari a) { - uint32_t mask_lo = _mm256_movemask_epi8(a.lo); - uint32_t mask_hi = _mm256_movemask_epi8(a.hi); + uint32_t mask_lo = _simd_movemask_epi8(a.lo); + uint32_t mask_hi = _simd_movemask_epi8(a.hi); return static_cast(mask_lo) | (static_cast(mask_hi) << 32); }