CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
endif
+ifdef MAX_STACK_ALLOC
+CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
+endif
+
#
# Architecture dependent settings
#
if (incx < 0) x -= (lenx - 1) * incx;
if (incy < 0) y -= (leny - 1) * incy;
+#ifdef MAX_STACK_ALLOC
+ int stack_alloc_size = m + n;
+ if(stack_alloc_size < 128)
+ //dgemv_n.S require a 128 bytes buffer
+ stack_alloc_size = 128;
+ if(stack_alloc_size > MAX_STACK_ALLOC / sizeof(FLOAT))
+ stack_alloc_size = 0;
+ FLOAT stack_buffer[stack_alloc_size];
+ buffer = stack_alloc_size ? stack_buffer : (FLOAT *)blas_memory_alloc(1);
+#else
buffer = (FLOAT *)blas_memory_alloc(1);
+#endif
#ifdef SMP
}
#endif
- blas_memory_free(buffer);
+#ifdef MAX_STACK_ALLOC
+ if(!stack_alloc_size)
+#endif
+ blas_memory_free(buffer);
FUNCTION_PROFILE_END(1, m * n + m + n, 2 * m * n);
if (incy < 0) y -= (n - 1) * incy;
if (incx < 0) x -= (m - 1) * incx;
+#ifdef MAX_STACK_ALLOC
+ int stack_alloc_size = m;
+ if(stack_alloc_size > MAX_STACK_ALLOC / sizeof(FLOAT))
+ stack_alloc_size = 0;
+ FLOAT stack_buffer[stack_alloc_size];
+ buffer = stack_alloc_size ? stack_buffer : (FLOAT *)blas_memory_alloc(1);
+#else
buffer = (FLOAT *)blas_memory_alloc(1);
+#endif
#ifdef SMPTEST
nthreads = num_cpu_avail(2);
}
#endif
- blas_memory_free(buffer);
+#ifdef MAX_STACK_ALLOC
+ if(!stack_alloc_size)
+#endif
+ blas_memory_free(buffer);
FUNCTION_PROFILE_END(1, m * n + m + n, 2 * m * n);
if ( n < 1 ) return(0);
xbuffer = buffer;
- ytemp = buffer + NBMAX;
+ ytemp = buffer + (m < NBMAX ? m : NBMAX);
n0 = n / NBMAX;
n1 = (n % NBMAX) >> 2 ;