]> granicus.if.org Git - libjpeg-turbo/commitdiff
MMI: Fix unaligned decomp. perf. for 32-bit PFs
authorDRC <information@libjpeg-turbo.org>
Fri, 1 Feb 2019 07:16:13 +0000 (01:16 -0600)
committerDRC <information@libjpeg-turbo.org>
Fri, 1 Feb 2019 07:16:13 +0000 (01:16 -0600)
(Oversight from db84125fcb05bbc48430b53d45b89392a8f3609e)

simd/loongson/jdcolext-mmi.c

index 982fa767a01159f43d977a8741ff1c102a405e6f..8a159ef690655a123ef175e37437a496298f432f 100644 (file)
@@ -341,10 +341,17 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
       mmC = _mm_unpacklo_pi32(mmC, mmG);      /* (04 14 24 34 05 15 25 35) */
 
       if (num_cols >= 8) {
-        _mm_store_si64((__m64 *)outptr, mmA);
-        _mm_store_si64((__m64 *)(outptr + 8), mmD);
-        _mm_store_si64((__m64 *)(outptr + 16), mmC);
-        _mm_store_si64((__m64 *)(outptr + 24), mmH);
+        if (!(((long)outptr) & 7)) {
+          _mm_store_si64((__m64 *)outptr, mmA);
+          _mm_store_si64((__m64 *)(outptr + 8), mmD);
+          _mm_store_si64((__m64 *)(outptr + 16), mmC);
+          _mm_store_si64((__m64 *)(outptr + 24), mmH);
+        } else {
+          _mm_storeu_si64((__m64 *)outptr, mmA);
+          _mm_storeu_si64((__m64 *)(outptr + 8), mmD);
+          _mm_storeu_si64((__m64 *)(outptr + 16), mmC);
+          _mm_storeu_si64((__m64 *)(outptr + 24), mmH);
+        }
         outptr += RGB_PIXELSIZE * 8;
       } else {
         col = num_cols;