Author: post
Date: 2012-11-07 18:59:24 +0100 (Wed, 07 Nov 2012)
New Revision: 4307

Modified:
   trunk/plugins/dcp/dcp-avx.c
   trunk/plugins/dcp/dcp-sse2.c
   trunk/plugins/dcp/dcp-sse4.c
Log:
Utilize the amazing fact that sqrt(x) = x * (1 / sqrt(x))

Modified: trunk/plugins/dcp/dcp-avx.c
===================================================================
--- trunk/plugins/dcp/dcp-avx.c 2012-10-29 18:28:05 UTC (rev 4306)
+++ trunk/plugins/dcp/dcp-avx.c 2012-11-07 17:59:24 UTC (rev 4307)
@@ -818,9 +818,9 @@
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);
-                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(r)), contr_base)), contr_base);
-                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(g)), contr_base)), contr_base);
-                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(b)), contr_base)), contr_base);
+                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(r, _mm_rsqrt_ps(r)), contr_base)), contr_base);
+                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(g, _mm_rsqrt_ps(g)), contr_base)), contr_base);
+                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(b, _mm_rsqrt_ps(b)), contr_base)), contr_base);
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);

Modified: trunk/plugins/dcp/dcp-sse2.c
===================================================================
--- trunk/plugins/dcp/dcp-sse2.c        2012-10-29 18:28:05 UTC (rev 4306)
+++ trunk/plugins/dcp/dcp-sse2.c        2012-11-07 17:59:24 UTC (rev 4307)
@@ -863,9 +863,9 @@
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);
-                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(r)), contr_base)), contr_base);
-                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(g)), contr_base)), contr_base);
-                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(b)), contr_base)), contr_base);
+                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(r,_mm_rsqrt_ps(r)), contr_base)), contr_base);
+                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(g,_mm_rsqrt_ps(g)), contr_base)), contr_base);
+                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(b,_mm_rsqrt_ps(b)), contr_base)), contr_base);
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);

Modified: trunk/plugins/dcp/dcp-sse4.c
===================================================================
--- trunk/plugins/dcp/dcp-sse4.c        2012-10-29 18:28:05 UTC (rev 4306)
+++ trunk/plugins/dcp/dcp-sse4.c        2012-11-07 17:59:24 UTC (rev 4307)
@@ -536,9 +536,9 @@
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);
-                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(r)), contr_base)), contr_base);
-                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(g)), contr_base)), contr_base);
-                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_rcp_ps(_mm_rsqrt_ps(b)), contr_base)), contr_base);
+                               r = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(r,_mm_rsqrt_ps(r)), contr_base)), contr_base);
+                               g = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(g,_mm_rsqrt_ps(g)), contr_base)), contr_base);
+                               b = _mm_add_ps(_mm_mul_ps(contrast, 
_mm_sub_ps(_mm_mul_ps(b,_mm_rsqrt_ps(b)), contr_base)), contr_base);
                                r = _mm_max_ps(r, min_val);
                                g = _mm_max_ps(g, min_val);
                                b = _mm_max_ps(b, min_val);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to