spatialGradient: Change ordering of vector loads
authorSeon-Wook Park <seon.wook@swook.net>
Mon, 29 Jun 2015 14:50:05 +0000 (23:50 +0900)
committerSeon-Wook Park <seon.wook@swook.net>
Mon, 29 Jun 2015 14:50:05 +0000 (23:50 +0900)
modules/imgproc/src/spatialgradient.cpp

index d53b4fd..178e20c 100644 (file)
@@ -207,21 +207,6 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
             v_int16x8 v_s3p1 = v_reinterpret_as_s16(v_up1);
             v_int16x8 v_s3p2 = v_reinterpret_as_s16(v_up2);
 
-            // Load fourth row for 3x3 Sobel filter
-            v_um = v_load(&m_src[j-1]);
-            v_un = v_load(&m_src[j]);
-            v_up = v_load(&m_src[j+1]);
-
-            v_expand(v_um, v_um1, v_um2);
-            v_expand(v_un, v_un1, v_un2);
-            v_expand(v_up, v_up1, v_up2);
-            v_int16x8 v_s4m1 = v_reinterpret_as_s16(v_um1);
-            v_int16x8 v_s4m2 = v_reinterpret_as_s16(v_um2);
-            v_int16x8 v_s4n1 = v_reinterpret_as_s16(v_un1);
-            v_int16x8 v_s4n2 = v_reinterpret_as_s16(v_un2);
-            v_int16x8 v_s4p1 = v_reinterpret_as_s16(v_up1);
-            v_int16x8 v_s4p2 = v_reinterpret_as_s16(v_up2);
-
             // dx & dy for rows 1, 2, 3
             v_int16x8 v_sdx1, v_sdy1;
             spatialGradientKernel<v_int16x8>( v_sdx1, v_sdy1,
@@ -241,6 +226,21 @@ void spatialGradient( InputArray _src, OutputArray _dx, OutputArray _dy,
             v_store(&c_dy[j],   v_sdy1);
             v_store(&c_dy[j+8], v_sdy2);
 
+            // Load fourth row for 3x3 Sobel filter
+            v_um = v_load(&m_src[j-1]);
+            v_un = v_load(&m_src[j]);
+            v_up = v_load(&m_src[j+1]);
+
+            v_expand(v_um, v_um1, v_um2);
+            v_expand(v_un, v_un1, v_un2);
+            v_expand(v_up, v_up1, v_up2);
+            v_int16x8 v_s4m1 = v_reinterpret_as_s16(v_um1);
+            v_int16x8 v_s4m2 = v_reinterpret_as_s16(v_um2);
+            v_int16x8 v_s4n1 = v_reinterpret_as_s16(v_un1);
+            v_int16x8 v_s4n2 = v_reinterpret_as_s16(v_un2);
+            v_int16x8 v_s4p1 = v_reinterpret_as_s16(v_up1);
+            v_int16x8 v_s4p2 = v_reinterpret_as_s16(v_up2);
+
             // dx & dy for rows 2, 3, 4
             spatialGradientKernel<v_int16x8>( v_sdx1, v_sdy1,
                                               v_s2m1, v_s2n1, v_s2p1,