]> granicus.if.org Git - libjpeg-turbo/commitdiff
MMI: Fix unaligned comp. perf. for 32-bit PFs also
authorDRC <information@libjpeg-turbo.org>
Fri, 1 Feb 2019 06:56:02 +0000 (00:56 -0600)
committerDRC <information@libjpeg-turbo.org>
Fri, 1 Feb 2019 06:59:58 +0000 (00:59 -0600)
(Oversight from 1c2d3cfaaf7324d9091ba3cc4e900f60a16fe1aa)

simd/loongson/jccolext-mmi.c

index a94b53b955d4db522fc00ffd10e78c09116b8e7d..6cdeb5e09a6f9efb7a2d5194fad6fbc0fc214fa3 100644 (file)
@@ -275,10 +275,17 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
             : "$f0", "$f2", "$8", "$9", "$10", "$11", "$13", "memory"
            );
       } else {
-        mmA = _mm_load_si64((__m64 *)&inptr[0]);
-        mmF = _mm_load_si64((__m64 *)&inptr[8]);
-        mmD = _mm_load_si64((__m64 *)&inptr[16]);
-        mmC = _mm_load_si64((__m64 *)&inptr[24]);
+        if (!(((long)inptr) & 7)) {
+          mmA = _mm_load_si64((__m64 *)&inptr[0]);
+          mmF = _mm_load_si64((__m64 *)&inptr[8]);
+          mmD = _mm_load_si64((__m64 *)&inptr[16]);
+          mmC = _mm_load_si64((__m64 *)&inptr[24]);
+        } else {
+          mmA = _mm_loadu_si64((__m64 *)&inptr[0]);
+          mmF = _mm_loadu_si64((__m64 *)&inptr[8]);
+          mmD = _mm_loadu_si64((__m64 *)&inptr[16]);
+          mmC = _mm_loadu_si64((__m64 *)&inptr[24]);
+        }
         inptr += RGB_PIXELSIZE * 8;
       }
       mmB = mmA;