From a04104cb19c1322a3cf0bb11c0ce2988ed5a8b1f Mon Sep 17 00:00:00 2001 From: Heinz-Bernd Eggenstein <heinz-bernd.eggenstein@aei.mpg.de> Date: Fri, 13 Jul 2012 16:03:14 +0200 Subject: [PATCH] Bug #1649: wrong results for transform lengths > 2^24 Prevent integer overruns for long transforms in Taylor approx of sin cos. Still to do: check all uses of mad24 etc in generated code where overruns could occur as well --- src/fft_kernelstring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fft_kernelstring.cpp b/src/fft_kernelstring.cpp index 4f21738..1577c18 100644 --- a/src/fft_kernelstring.cpp +++ b/src/fft_kernelstring.cpp @@ -1120,7 +1120,7 @@ insertSinCosCalcTaylor3(string & kernel_string, cl_fft_plan *plan, int num, int logDenom++; } - kernel_string += string(" int k = (ang_index << ") + num2str(plan->logN2) + string(" + ") + num2str(denom / 2) + string(") >> ") + num2str(logDenom) + string(";\n"); + kernel_string += string(" int k = (ang_index + ") + num2str( 1 <<(logDenom - plan->logN2 -1) ) + string(") >> ") + num2str(logDenom - plan->logN2) +string( ";\n"); // get cos/sin of grid point from LUT -- GitLab