template_blas_asum.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef TEMPLATE_BLAS_ASUM_HEADER
00036 #define TEMPLATE_BLAS_ASUM_HEADER
00037
00038
00039 template<class Treal>
00040 Treal template_blas_asum(const integer *n, const Treal *dx, const integer *incx)
00041 {
00042
00043 integer i__1, i__2;
00044 Treal ret_val, d__1, d__2, d__3, d__4, d__5, d__6;
00045
00046 integer i__, m;
00047 Treal dtemp;
00048 integer nincx, mp1;
00049
00050
00051
00052
00053
00054 --dx;
00055
00056 ret_val = 0.;
00057 dtemp = 0.;
00058 if (*n <= 0 || *incx <= 0) {
00059 return ret_val;
00060 }
00061 if (*incx == 1) {
00062 goto L20;
00063 }
00064
00065 nincx = *n * *incx;
00066 i__1 = nincx;
00067 i__2 = *incx;
00068 for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
00069 dtemp += (d__1 = dx[i__], absMACRO(d__1));
00070
00071 }
00072 ret_val = dtemp;
00073 return ret_val;
00074
00075
00076 L20:
00077 m = *n % 6;
00078 if (m == 0) {
00079 goto L40;
00080 }
00081 i__2 = m;
00082 for (i__ = 1; i__ <= i__2; ++i__) {
00083 dtemp += (d__1 = dx[i__], absMACRO(d__1));
00084
00085 }
00086 if (*n < 6) {
00087 goto L60;
00088 }
00089 L40:
00090 mp1 = m + 1;
00091 i__2 = *n;
00092 for (i__ = mp1; i__ <= i__2; i__ += 6) {
00093 dtemp = dtemp + (d__1 = dx[i__], absMACRO(d__1)) + (d__2 = dx[i__ + 1],
00094 absMACRO(d__2)) + (d__3 = dx[i__ + 2], absMACRO(d__3)) + (d__4 = dx[i__
00095 + 3], absMACRO(d__4)) + (d__5 = dx[i__ + 4], absMACRO(d__5)) + (d__6 =
00096 dx[i__ + 5], absMACRO(d__6));
00097
00098 }
00099 L60:
00100 ret_val = dtemp;
00101 return ret_val;
00102 }
00103
00104 #endif