reduce add_weighted instantiates for tiny build
authorVladislav Vinogradov <vlad.vinogradov@itseez.com>
Wed, 4 Mar 2015 11:57:18 +0000 (14:57 +0300)
committerVladislav Vinogradov <vlad.vinogradov@itseez.com>
Wed, 6 May 2015 14:13:59 +0000 (17:13 +0300)
modules/gpu/src/cuda/element_operations.cu
modules/gpu/src/element_operations.cpp

index f606f0c..e277d82 100644 (file)
@@ -2397,6 +2397,7 @@ namespace arithm
     }
 
     template void addWeighted<uchar, uchar, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<uchar, uchar, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<uchar, uchar, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<uchar, uchar, short>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2451,9 +2452,10 @@ namespace arithm
     template void addWeighted<uchar, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<uchar, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<uchar, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
-
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<schar, schar, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<schar, schar, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<schar, schar, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2501,9 +2503,10 @@ namespace arithm
     template void addWeighted<schar, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<schar, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<schar, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
-
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<ushort, ushort, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<ushort, ushort, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<ushort, ushort, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2543,9 +2546,10 @@ namespace arithm
     template void addWeighted<ushort, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<ushort, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<ushort, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
-
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<short, short, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<short, short, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<short, short, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2577,9 +2581,10 @@ namespace arithm
     template void addWeighted<short, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<short, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<short, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
-
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<int, int, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<int, int, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<int, int, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2603,15 +2608,18 @@ namespace arithm
     template void addWeighted<int, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<int, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<int, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
-
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<float, float, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, float, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, float, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, float, short>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, float, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
     template void addWeighted<float, float, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<float, float, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
 
     template void addWeighted<float, double, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2621,9 +2629,11 @@ namespace arithm
     template void addWeighted<float, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<float, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 
 
 
+#ifndef OPENCV_TINY_GPU_MODULE
     template void addWeighted<double, double, uchar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<double, double, schar>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<double, double, ushort>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
@@ -2631,6 +2641,7 @@ namespace arithm
     template void addWeighted<double, double, int>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<double, double, float>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
     template void addWeighted<double, double, double>(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#endif
 }
 
 #endif /* CUDA_DISABLER */
index 354d614..fa98520 100644 (file)
@@ -3007,6 +3007,466 @@ namespace arithm
 void cv::gpu::addWeighted(const GpuMat& src1, double alpha, const GpuMat& src2, double beta, double gamma, GpuMat& dst, int ddepth, Stream& stream)
 {
     typedef void (*func_t)(PtrStepSzb src1, double alpha, PtrStepSzb src2, double beta, double gamma, PtrStepSzb dst, cudaStream_t stream);
+#ifdef OPENCV_TINY_GPU_MODULE
+    static const func_t funcs[7][7][7] =
+    {
+        {
+            {
+                arithm::addWeighted<unsigned char, unsigned char, unsigned char >,
+                0/*arithm::addWeighted<unsigned char, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, unsigned char, short >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned char, int   >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned char, float >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned char, double>*/
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, signed char, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, signed char, short >*/,
+                0/*arithm::addWeighted<unsigned char, signed char, int   >*/,
+                0/*arithm::addWeighted<unsigned char, signed char, float >*/,
+                0/*arithm::addWeighted<unsigned char, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, short >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, int   >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, float >*/,
+                0/*arithm::addWeighted<unsigned char, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, short, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, short, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, short, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, short, short >*/,
+                0/*arithm::addWeighted<unsigned char, short, int   >*/,
+                0/*arithm::addWeighted<unsigned char, short, float >*/,
+                0/*arithm::addWeighted<unsigned char, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, int, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, int, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, int, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, int, short >*/,
+                0/*arithm::addWeighted<unsigned char, int, int   >*/,
+                0/*arithm::addWeighted<unsigned char, int, float >*/,
+                0/*arithm::addWeighted<unsigned char, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, float, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, float, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, float, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, float, short >*/,
+                0/*arithm::addWeighted<unsigned char, float, int   >*/,
+                0/*arithm::addWeighted<unsigned char, float, float >*/,
+                0/*arithm::addWeighted<unsigned char, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned char, double, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned char, double, signed char >*/,
+                0/*arithm::addWeighted<unsigned char, double, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned char, double, short >*/,
+                0/*arithm::addWeighted<unsigned char, double, int   >*/,
+                0/*arithm::addWeighted<unsigned char, double, float >*/,
+                0/*arithm::addWeighted<unsigned char, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<signed char, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<signed char, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, unsigned char, short >*/,
+                0/*arithm::addWeighted<signed char, unsigned char, int   >*/,
+                0/*arithm::addWeighted<signed char, unsigned char, float >*/,
+                0/*arithm::addWeighted<signed char, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, signed char, signed char >*/,
+                0/*arithm::addWeighted<signed char, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, signed char, short >*/,
+                0/*arithm::addWeighted<signed char, signed char, int   >*/,
+                0/*arithm::addWeighted<signed char, signed char, float >*/,
+                0/*arithm::addWeighted<signed char, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<signed char, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, unsigned short, short >*/,
+                0/*arithm::addWeighted<signed char, unsigned short, int   >*/,
+                0/*arithm::addWeighted<signed char, unsigned short, float >*/,
+                0/*arithm::addWeighted<signed char, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, short, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, short, signed char >*/,
+                0/*arithm::addWeighted<signed char, short, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, short, short >*/,
+                0/*arithm::addWeighted<signed char, short, int   >*/,
+                0/*arithm::addWeighted<signed char, short, float >*/,
+                0/*arithm::addWeighted<signed char, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, int, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, int, signed char >*/,
+                0/*arithm::addWeighted<signed char, int, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, int, short >*/,
+                0/*arithm::addWeighted<signed char, int, int   >*/,
+                0/*arithm::addWeighted<signed char, int, float >*/,
+                0/*arithm::addWeighted<signed char, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, float, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, float, signed char >*/,
+                0/*arithm::addWeighted<signed char, float, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, float, short >*/,
+                0/*arithm::addWeighted<signed char, float, int   >*/,
+                0/*arithm::addWeighted<signed char, float, float >*/,
+                0/*arithm::addWeighted<signed char, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<signed char, double, unsigned char >*/,
+                0/*arithm::addWeighted<signed char, double, signed char >*/,
+                0/*arithm::addWeighted<signed char, double, unsigned short>*/,
+                0/*arithm::addWeighted<signed char, double, short >*/,
+                0/*arithm::addWeighted<signed char, double, int   >*/,
+                0/*arithm::addWeighted<signed char, double, float >*/,
+                0/*arithm::addWeighted<signed char, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<unsigned short, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, short >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, int   >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, float >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, signed char, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, signed char, short >*/,
+                0/*arithm::addWeighted<unsigned short, signed char, int   >*/,
+                0/*arithm::addWeighted<unsigned short, signed char, float >*/,
+                0/*arithm::addWeighted<unsigned short, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, short >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, int   >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, float >*/,
+                0/*arithm::addWeighted<unsigned short, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, short, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, short, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, short, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, short, short >*/,
+                0/*arithm::addWeighted<unsigned short, short, int   >*/,
+                0/*arithm::addWeighted<unsigned short, short, float >*/,
+                0/*arithm::addWeighted<unsigned short, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, int, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, int, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, int, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, int, short >*/,
+                0/*arithm::addWeighted<unsigned short, int, int   >*/,
+                0/*arithm::addWeighted<unsigned short, int, float >*/,
+                0/*arithm::addWeighted<unsigned short, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, float, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, float, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, float, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, float, short >*/,
+                0/*arithm::addWeighted<unsigned short, float, int   >*/,
+                0/*arithm::addWeighted<unsigned short, float, float >*/,
+                0/*arithm::addWeighted<unsigned short, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<unsigned short, double, unsigned char >*/,
+                0/*arithm::addWeighted<unsigned short, double, signed char >*/,
+                0/*arithm::addWeighted<unsigned short, double, unsigned short>*/,
+                0/*arithm::addWeighted<unsigned short, double, short >*/,
+                0/*arithm::addWeighted<unsigned short, double, int   >*/,
+                0/*arithm::addWeighted<unsigned short, double, float >*/,
+                0/*arithm::addWeighted<unsigned short, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<short, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<short, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<short, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<short, unsigned char, short >*/,
+                0/*arithm::addWeighted<short, unsigned char, int   >*/,
+                0/*arithm::addWeighted<short, unsigned char, float >*/,
+                0/*arithm::addWeighted<short, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<short, signed char, signed char >*/,
+                0/*arithm::addWeighted<short, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<short, signed char, short >*/,
+                0/*arithm::addWeighted<short, signed char, int   >*/,
+                0/*arithm::addWeighted<short, signed char, float >*/,
+                0/*arithm::addWeighted<short, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<short, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<short, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<short, unsigned short, short >*/,
+                0/*arithm::addWeighted<short, unsigned short, int   >*/,
+                0/*arithm::addWeighted<short, unsigned short, float >*/,
+                0/*arithm::addWeighted<short, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, short, unsigned char >*/,
+                0/*arithm::addWeighted<short, short, signed char >*/,
+                0/*arithm::addWeighted<short, short, unsigned short>*/,
+                0/*arithm::addWeighted<short, short, short >*/,
+                0/*arithm::addWeighted<short, short, int   >*/,
+                0/*arithm::addWeighted<short, short, float >*/,
+                0/*arithm::addWeighted<short, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, int, unsigned char >*/,
+                0/*arithm::addWeighted<short, int, signed char >*/,
+                0/*arithm::addWeighted<short, int, unsigned short>*/,
+                0/*arithm::addWeighted<short, int, short >*/,
+                0/*arithm::addWeighted<short, int, int   >*/,
+                0/*arithm::addWeighted<short, int, float >*/,
+                0/*arithm::addWeighted<short, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, float, unsigned char >*/,
+                0/*arithm::addWeighted<short, float, signed char >*/,
+                0/*arithm::addWeighted<short, float, unsigned short>*/,
+                0/*arithm::addWeighted<short, float, short >*/,
+                0/*arithm::addWeighted<short, float, int   >*/,
+                0/*arithm::addWeighted<short, float, float >*/,
+                0/*arithm::addWeighted<short, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<short, double, unsigned char >*/,
+                0/*arithm::addWeighted<short, double, signed char >*/,
+                0/*arithm::addWeighted<short, double, unsigned short>*/,
+                0/*arithm::addWeighted<short, double, short >*/,
+                0/*arithm::addWeighted<short, double, int   >*/,
+                0/*arithm::addWeighted<short, double, float >*/,
+                0/*arithm::addWeighted<short, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<int, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<int, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<int, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<int, unsigned char, short >*/,
+                0/*arithm::addWeighted<int, unsigned char, int   >*/,
+                0/*arithm::addWeighted<int, unsigned char, float >*/,
+                0/*arithm::addWeighted<int, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<int, signed char, signed char >*/,
+                0/*arithm::addWeighted<int, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<int, signed char, short >*/,
+                0/*arithm::addWeighted<int, signed char, int   >*/,
+                0/*arithm::addWeighted<int, signed char, float >*/,
+                0/*arithm::addWeighted<int, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<int, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<int, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<int, unsigned short, short >*/,
+                0/*arithm::addWeighted<int, unsigned short, int   >*/,
+                0/*arithm::addWeighted<int, unsigned short, float >*/,
+                0/*arithm::addWeighted<int, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, short, unsigned char >*/,
+                0/*arithm::addWeighted<int, short, signed char >*/,
+                0/*arithm::addWeighted<int, short, unsigned short>*/,
+                0/*arithm::addWeighted<int, short, short >*/,
+                0/*arithm::addWeighted<int, short, int   >*/,
+                0/*arithm::addWeighted<int, short, float >*/,
+                0/*arithm::addWeighted<int, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, int, unsigned char >*/,
+                0/*arithm::addWeighted<int, int, signed char >*/,
+                0/*arithm::addWeighted<int, int, unsigned short>*/,
+                0/*arithm::addWeighted<int, int, short >*/,
+                0/*arithm::addWeighted<int, int, int   >*/,
+                0/*arithm::addWeighted<int, int, float >*/,
+                0/*arithm::addWeighted<int, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, float, unsigned char >*/,
+                0/*arithm::addWeighted<int, float, signed char >*/,
+                0/*arithm::addWeighted<int, float, unsigned short>*/,
+                0/*arithm::addWeighted<int, float, short >*/,
+                0/*arithm::addWeighted<int, float, int   >*/,
+                0/*arithm::addWeighted<int, float, float >*/,
+                0/*arithm::addWeighted<int, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<int, double, unsigned char >*/,
+                0/*arithm::addWeighted<int, double, signed char >*/,
+                0/*arithm::addWeighted<int, double, unsigned short>*/,
+                0/*arithm::addWeighted<int, double, short >*/,
+                0/*arithm::addWeighted<int, double, int   >*/,
+                0/*arithm::addWeighted<int, double, float >*/,
+                0/*arithm::addWeighted<int, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<float, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<float, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<float, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<float, unsigned char, short >*/,
+                0/*arithm::addWeighted<float, unsigned char, int   >*/,
+                0/*arithm::addWeighted<float, unsigned char, float >*/,
+                0/*arithm::addWeighted<float, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<float, signed char, signed char >*/,
+                0/*arithm::addWeighted<float, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<float, signed char, short >*/,
+                0/*arithm::addWeighted<float, signed char, int   >*/,
+                0/*arithm::addWeighted<float, signed char, float >*/,
+                0/*arithm::addWeighted<float, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<float, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<float, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<float, unsigned short, short >*/,
+                0/*arithm::addWeighted<float, unsigned short, int   >*/,
+                0/*arithm::addWeighted<float, unsigned short, float >*/,
+                0/*arithm::addWeighted<float, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, short, unsigned char >*/,
+                0/*arithm::addWeighted<float, short, signed char >*/,
+                0/*arithm::addWeighted<float, short, unsigned short>*/,
+                0/*arithm::addWeighted<float, short, short >*/,
+                0/*arithm::addWeighted<float, short, int   >*/,
+                0/*arithm::addWeighted<float, short, float >*/,
+                0/*arithm::addWeighted<float, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, int, unsigned char >*/,
+                0/*arithm::addWeighted<float, int, signed char >*/,
+                0/*arithm::addWeighted<float, int, unsigned short>*/,
+                0/*arithm::addWeighted<float, int, short >*/,
+                0/*arithm::addWeighted<float, int, int   >*/,
+                0/*arithm::addWeighted<float, int, float >*/,
+                0/*arithm::addWeighted<float, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, float, unsigned char >*/,
+                0/*arithm::addWeighted<float, float, signed char >*/,
+                0/*arithm::addWeighted<float, float, unsigned short>*/,
+                0/*arithm::addWeighted<float, float, short >*/,
+                0/*arithm::addWeighted<float, float, int   >*/,
+                arithm::addWeighted<float, float, float >,
+                0/*arithm::addWeighted<float, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<float, double, unsigned char >*/,
+                0/*arithm::addWeighted<float, double, signed char >*/,
+                0/*arithm::addWeighted<float, double, unsigned short>*/,
+                0/*arithm::addWeighted<float, double, short >*/,
+                0/*arithm::addWeighted<float, double, int   >*/,
+                0/*arithm::addWeighted<float, double, float >*/,
+                0/*arithm::addWeighted<float, double, double>*/,
+            }
+        },
+        {
+            {
+                0/*arithm::addWeighted<double, unsigned char, unsigned char >*/,
+                0/*arithm::addWeighted<double, unsigned char, signed char >*/,
+                0/*arithm::addWeighted<double, unsigned char, unsigned short>*/,
+                0/*arithm::addWeighted<double, unsigned char, short >*/,
+                0/*arithm::addWeighted<double, unsigned char, int   >*/,
+                0/*arithm::addWeighted<double, unsigned char, float >*/,
+                0/*arithm::addWeighted<double, unsigned char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, signed char, unsigned char >*/,
+                0/*arithm::addWeighted<double, signed char, signed char >*/,
+                0/*arithm::addWeighted<double, signed char, unsigned short>*/,
+                0/*arithm::addWeighted<double, signed char, short >*/,
+                0/*arithm::addWeighted<double, signed char, int   >*/,
+                0/*arithm::addWeighted<double, signed char, float >*/,
+                0/*arithm::addWeighted<double, signed char, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, unsigned short, unsigned char >*/,
+                0/*arithm::addWeighted<double, unsigned short, signed char >*/,
+                0/*arithm::addWeighted<double, unsigned short, unsigned short>*/,
+                0/*arithm::addWeighted<double, unsigned short, short >*/,
+                0/*arithm::addWeighted<double, unsigned short, int   >*/,
+                0/*arithm::addWeighted<double, unsigned short, float >*/,
+                0/*arithm::addWeighted<double, unsigned short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, short, unsigned char >*/,
+                0/*arithm::addWeighted<double, short, signed char >*/,
+                0/*arithm::addWeighted<double, short, unsigned short>*/,
+                0/*arithm::addWeighted<double, short, short >*/,
+                0/*arithm::addWeighted<double, short, int   >*/,
+                0/*arithm::addWeighted<double, short, float >*/,
+                0/*arithm::addWeighted<double, short, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, int, unsigned char >*/,
+                0/*arithm::addWeighted<double, int, signed char >*/,
+                0/*arithm::addWeighted<double, int, unsigned short>*/,
+                0/*arithm::addWeighted<double, int, short >*/,
+                0/*arithm::addWeighted<double, int, int   >*/,
+                0/*arithm::addWeighted<double, int, float >*/,
+                0/*arithm::addWeighted<double, int, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, float, unsigned char >*/,
+                0/*arithm::addWeighted<double, float, signed char >*/,
+                0/*arithm::addWeighted<double, float, unsigned short>*/,
+                0/*arithm::addWeighted<double, float, short >*/,
+                0/*arithm::addWeighted<double, float, int   >*/,
+                0/*arithm::addWeighted<double, float, float >*/,
+                0/*arithm::addWeighted<double, float, double>*/,
+            },
+            {
+                0/*arithm::addWeighted<double, double, unsigned char >*/,
+                0/*arithm::addWeighted<double, double, signed char >*/,
+                0/*arithm::addWeighted<double, double, unsigned short>*/,
+                0/*arithm::addWeighted<double, double, short >*/,
+                0/*arithm::addWeighted<double, double, int   >*/,
+                0/*arithm::addWeighted<double, double, float >*/,
+                0/*arithm::addWeighted<double, double, double>*/,
+            }
+        }
+    };
+#else
     static const func_t funcs[7][7][7] =
     {
         {
@@ -3465,6 +3925,7 @@ void cv::gpu::addWeighted(const GpuMat& src1, double alpha, const GpuMat& src2,
             }
         }
     };
+#endif
 
     int sdepth1 = src1.depth();
     int sdepth2 = src2.depth();