Fix ubsan_undefined error due to misaligned load As reported in issue 1486, there is a misaligned load in the function av1_convolve_2d_copy_sr_sse2 which causes error when built with -DSANITIZE=undefined. This commit fixes the issue. BUG=aomedia:1486 Change-Id: Ide3312213d8469dc8ae14c2c5437c79c3bb1ac20
diff --git a/av1/common/x86/convolve_2d_sse2.c b/av1/common/x86/convolve_2d_sse2.c index 5e0502d..61c6578 100644 --- a/av1/common/x86/convolve_2d_sse2.c +++ b/av1/common/x86/convolve_2d_sse2.c
@@ -577,20 +577,24 @@ if (w == 2) { do { - *(uint16_t *)dst = *(uint16_t *)src; + __m128i s = _mm_loadl_epi64((__m128i *)src); + *(uint16_t *)dst = _mm_cvtsi128_si32(s); src += src_stride; dst += dst_stride; - *(uint16_t *)dst = *(uint16_t *)src; + s = _mm_loadl_epi64((__m128i *)src); + *(uint16_t *)dst = _mm_cvtsi128_si32(s); src += src_stride; dst += dst_stride; h -= 2; } while (h); } else if (w == 4) { do { - *(uint32_t *)dst = *(uint32_t *)src; + __m128i s = _mm_loadl_epi64((__m128i *)src); + *(uint32_t *)dst = _mm_cvtsi128_si32(s); src += src_stride; dst += dst_stride; - *(uint32_t *)dst = *(uint32_t *)src; + s = _mm_loadl_epi64((__m128i *)src); + *(uint32_t *)dst = _mm_cvtsi128_si32(s); src += src_stride; dst += dst_stride; h -= 2;