[Libreoffice-commits] core.git: 5 commits - include/opencl opencl/source sc/source
Tor Lillqvist
tml at collabora.com
Fri Feb 6 00:05:32 PST 2015
include/opencl/openclwrapper.hxx | 6
opencl/source/openclwrapper.cxx | 58 +
sc/source/core/opencl/formulagroupcl.cxx | 186 ++-
sc/source/core/opencl/op_addin.cxx | 16
sc/source/core/opencl/op_financial.cxx | 601 -----------
sc/source/core/opencl/op_logical.cxx | 12
sc/source/core/opencl/op_math.cxx | 233 ----
sc/source/core/opencl/op_statistical.cxx | 1680 -------------------------------
sc/source/core/opencl/opbase.cxx | 87 -
sc/source/core/opencl/opbase.hxx | 7
10 files changed, 186 insertions(+), 2700 deletions(-)
New commits:
commit 641835ec3234da3744a4ea3c15ff3c4e3aef1528
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Feb 6 02:32:15 2015 +0200
Report errors from clRelease*() APIs
Change-Id: Id30afe5bf954e26515bf8cca6f1ee8bc018fb835
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index d508141..9804c72 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1062,7 +1062,9 @@ public:
{
if (mpClmem2)
{
- clReleaseMemObject(mpClmem2);
+ cl_int err;
+ err = clReleaseMemObject(mpClmem2);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
mpClmem2 = NULL;
}
}
@@ -1571,7 +1573,8 @@ public:
SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
if (mpClmem2)
{
- clReleaseMemObject(mpClmem2);
+ err = clReleaseMemObject(mpClmem2);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
mpClmem2 = NULL;
}
mpClmem2 = clCreateBuffer(kEnv.mpkContext,
@@ -1592,7 +1595,9 @@ public:
{
if (mpClmem2)
{
- clReleaseMemObject(mpClmem2);
+ cl_int err;
+ err = clReleaseMemObject(mpClmem2);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
mpClmem2 = NULL;
}
}
@@ -2314,10 +2319,14 @@ public:
global_work_size, local_work_size, 0, NULL, NULL);
if (CL_SUCCESS != err)
throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
+
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
throw OpenCLError("clFinish", err, __FILE__, __LINE__);
- clReleaseKernel(redKernel);
+
+ err = clReleaseKernel(redKernel);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseKernel failed: " << ::opencl::errorString(err));
+
// Pass mpClmem2 to the "real" kernel
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&mpClmem2);
@@ -2431,7 +2440,9 @@ public:
{
if (mpClmem2)
{
- clReleaseMemObject(mpClmem2);
+ cl_int err;
+ err = clReleaseMemObject(mpClmem2);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
mpClmem2 = NULL;
}
}
@@ -3597,13 +3608,16 @@ DynamicKernel::DynamicKernel( const FormulaTreeNodeRef& r, int nResultSize ) :
DynamicKernel::~DynamicKernel()
{
+ cl_int err;
if (mpResClmem)
{
- clReleaseMemObject(mpResClmem);
+ err = clReleaseMemObject(mpResClmem);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
}
if (mpKernel)
{
- clReleaseKernel(mpKernel);
+ err = clReleaseKernel(mpKernel);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseKernel failed: " << ::opencl::errorString(err));
}
// mpProgram is not going to be released here -- it's cached.
}
@@ -3706,7 +3720,8 @@ void DynamicKernel::CreateKernel()
if (lastSecondProgram)
{
- clReleaseProgram(lastSecondProgram);
+ err = clReleaseProgram(lastSecondProgram);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseProgram failed: " << ::opencl::errorString(err));
}
if (::opencl::buildProgramFromBinary("",
&::opencl::gpuEnv, KernelHash.c_str(), 0))
diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx
index 671987e..ac97249 100644
--- a/sc/source/core/opencl/opbase.cxx
+++ b/sc/source/core/opencl/opbase.cxx
@@ -107,7 +107,9 @@ VectorRef::~VectorRef()
{
if (mpClmem)
{
- clReleaseMemObject(mpClmem);
+ cl_int err;
+ err = clReleaseMemObject(mpClmem);
+ SAL_WARN_IF(err != CL_SUCCESS, "sc.opencl", "clReleaseMemObject failed: " << ::opencl::errorString(err));
}
}
commit e0f78c7faf6a9d1fd30944d77a3f93102a652939
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Feb 6 02:12:30 2015 +0200
Unmap the host buffer only after done accessing it
Most likely 64c479e9da02f724e1870649c99fac92f5f27cd3 accidentally made the
code unmap the host buffer before it is accessed, but the code continued to
work by accident in many (most?) cases. Either because in the case of OpenCL
devices that share memory with the CPU, the host buffer *is* the OpenCL
buffer, so even if the host buffer is "unmapped", it still exists. In the
case of GPU device with separate memory, using the host buffer after unmapping
corresponds simply to a case of use after free of a heap-allocated buffer,
which often happens to work.
Found by code reading.
Change-Id: I9e2b4574077a267938702c0f81c4b1cba9c9a183
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 381fb1d..d508141 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -3965,13 +3965,6 @@ public:
mpResBuf = NULL;
return;
}
-
- err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpCLResBuf, mpResBuf, 0, NULL, NULL);
- if (err != CL_SUCCESS)
- {
- SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
- mpResBuf = NULL;
- }
}
bool pushResultToDocument( ScDocument& rDoc, const ScAddress& rTopPos )
@@ -3980,6 +3973,20 @@ public:
return false;
rDoc.SetFormulaResults(rTopPos, mpResBuf, mnGroupLength);
+
+ // Obtain cl context
+ ::opencl::KernelEnv kEnv;
+ ::opencl::setKernelEnv(&kEnv);
+
+ cl_int err;
+ err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpCLResBuf, mpResBuf, 0, NULL, NULL);
+
+ if (err != CL_SUCCESS)
+ {
+ SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
+ return false;
+ }
+
return true;
}
};
commit 6a2576150b5152244dc3f8c31b745fa634b31a47
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Feb 6 00:15:04 2015 +0200
Improve OpenCL error messages
Add the name of the function that failed to the OpenCLError class. Log OpenCL
failure in a couple of more places (where OpenCLError is not thrown). Print
OpenCL errors symbolically instead of numerically where applicable.
Change-Id: I60f910e9ea7b75af7ec506553d7a73ad99ba4366
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 18aed00..381fb1d 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -169,7 +169,7 @@ size_t VectorRef::Marshal( cl_kernel k, int argno, int, cl_program )
szHostBuffer,
pHostBuffer, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem << " size " << szHostBuffer << " using host buffer " << pHostBuffer);
}
else
@@ -181,24 +181,28 @@ size_t VectorRef::Marshal( cl_kernel k, int argno, int, cl_program )
(cl_mem_flags)CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
szHostBuffer, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem << " size " << szHostBuffer);
double* pNanBuffer = (double*)clEnqueueMapBuffer(
kEnv.mpkCmdQueue, mpClmem, CL_TRUE, CL_MAP_WRITE, 0,
szHostBuffer, 0, NULL, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
+
for (size_t i = 0; i < szHostBuffer / sizeof(double); i++)
pNanBuffer[i] = NAN;
err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem,
pNanBuffer, 0, NULL, NULL);
+ // FIXME: Is it intentional to not throw an OpenCLError even if the clEnqueueUnmapMemObject() fails?
+ if (CL_SUCCESS != err)
+ SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
}
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&mpClmem);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
@@ -257,7 +261,7 @@ public:
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_uint: " << hashCode);
cl_int err = clSetKernelArg(k, argno, sizeof(cl_uint), (void*)&hashCode);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
};
@@ -307,7 +311,7 @@ public:
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": double: " << tmp);
cl_int err = clSetKernelArg(k, argno, sizeof(double), (void*)&tmp);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
};
@@ -347,7 +351,7 @@ public:
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": double: " << tmp);
cl_int err = clSetKernelArg(k, argno, sizeof(double), (void*)&tmp);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
};
@@ -707,7 +711,7 @@ threefry2x32 (threefry2x32_ctr_t in, threefry2x32_key_t k)\n\
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_int: " << seed);
cl_int err = clSetKernelArg(k, argno, sizeof(cl_int), (void*)&seed);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
};
@@ -767,14 +771,14 @@ size_t DynamicKernelStringArgument::Marshal( cl_kernel k, int argno, int, cl_pro
(cl_mem_flags)CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
szHostBuffer, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem << " size " << szHostBuffer);
pHashBuffer = (cl_uint*)clEnqueueMapBuffer(
kEnv.mpkCmdQueue, mpClmem, CL_TRUE, CL_MAP_WRITE, 0,
szHostBuffer, 0, NULL, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
for (size_t i = 0; i < nStrings; i++)
{
@@ -798,14 +802,14 @@ size_t DynamicKernelStringArgument::Marshal( cl_kernel k, int argno, int, cl_pro
(cl_mem_flags)CL_MEM_READ_ONLY | CL_MEM_ALLOC_HOST_PTR,
szHostBuffer, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem << " size " << szHostBuffer);
pHashBuffer = (cl_uint*)clEnqueueMapBuffer(
kEnv.mpkCmdQueue, mpClmem, CL_TRUE, CL_MAP_WRITE, 0,
szHostBuffer, 0, NULL, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
for (size_t i = 0; i < szHostBuffer / sizeof(cl_int); i++)
pHashBuffer[i] = 0;
@@ -813,12 +817,12 @@ size_t DynamicKernelStringArgument::Marshal( cl_kernel k, int argno, int, cl_pro
err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem,
pHashBuffer, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueUnmapMemObject", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&mpClmem);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
@@ -1449,7 +1453,7 @@ public:
CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
sizeof(double) * w, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << sizeof(double) << "*" << w << "=" << (sizeof(double)*w));
// reproduce the reduction function name
@@ -1460,7 +1464,7 @@ public:
kernelName = Base::GetName() + "_sum_reduction";
cl_kernel redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
// set kernel arg of reduction kernel
// TODO(Wei Wei): use unique name for kernel
cl_mem buf = Base::GetCLBuffer();
@@ -1468,22 +1472,22 @@ public:
err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
(void*)&buf);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), (void*)&mpClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
err = clSetKernelArg(redKernel, 2, sizeof(cl_int), (void*)&nInput);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
err = clSetKernelArg(redKernel, 3, sizeof(cl_int), (void*)&nCurWindowSize);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
// set work group size and execute
size_t global_work_size[] = { 256, (size_t)w };
@@ -1492,10 +1496,10 @@ public:
err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, NULL,
global_work_size, local_work_size, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clFinish", err, __FILE__, __LINE__);
if (dynamic_cast<OpAverage*>(mpCodeGen.get()))
{
/*average need more reduction kernel for count computing*/
@@ -1506,40 +1510,40 @@ public:
sizeof(double) * w, 0, NULL, NULL,
&err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
for (int i = 0; i < w; i++)
pAllBuffer[i] = resbuf[i];
err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, NULL, NULL);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueUnmapMemObject", err, __FILE__, __LINE__);
kernelName = Base::GetName() + "_count_reduction";
redKernel = clCreateKernel(mpProgram, kernelName.c_str(), &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
// set kernel arg of reduction kernel
buf = Base::GetCLBuffer();
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 0 << ": cl_mem: " << buf);
err = clSetKernelArg(redKernel, 0, sizeof(cl_mem),
(void*)&buf);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 1 << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(redKernel, 1, sizeof(cl_mem), (void*)&mpClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 2 << ": cl_int: " << nInput);
err = clSetKernelArg(redKernel, 2, sizeof(cl_int), (void*)&nInput);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << 3 << ": cl_int: " << nCurWindowSize);
err = clSetKernelArg(redKernel, 3, sizeof(cl_int), (void*)&nCurWindowSize);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
// set work group size and execute
size_t global_work_size1[] = { 256, (size_t)w };
@@ -1548,20 +1552,23 @@ public:
err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, NULL,
global_work_size1, local_work_size1, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clFinish", err, __FILE__, __LINE__);
resbuf = (double*)clEnqueueMapBuffer(kEnv.mpkCmdQueue,
mpClmem2,
CL_TRUE, CL_MAP_READ, 0,
sizeof(double) * w, 0, NULL, NULL,
&err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueMapBuffer", err, __FILE__, __LINE__);
for (int i = 0; i < w; i++)
pAllBuffer[i + w] = resbuf[i];
err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpClmem2, resbuf, 0, NULL, NULL);
+ // FIXME: Is it intentional to not throw an OpenCLError even if the clEnqueueUnmapMemObject() fails?
+ if (CL_SUCCESS != err)
+ SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
if (mpClmem2)
{
clReleaseMemObject(mpClmem2);
@@ -1571,14 +1578,14 @@ public:
(cl_mem_flags)CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
w * sizeof(double) * 2, pAllBuffer.get(), &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << w << "*" << sizeof(double) << "=" << (w*sizeof(double)) << " copying host buffer " << pAllBuffer.get());
}
// set kernel arg
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&(mpClmem2));
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
return 1;
}
~ParallelReductionVectorRef()
@@ -2192,13 +2199,13 @@ public:
pClmem2 = clCreateBuffer(kEnv.mpkContext, CL_MEM_READ_WRITE,
sizeof(double) * nVectorWidth, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << pClmem2 << " size " << sizeof(double) << "*" << nVectorWidth << "=" << (sizeof(double)*nVectorWidth));
std::string kernelName = "GeoMean_reduction";
cl_kernel redKernel = clCreateKernel(pProgram, kernelName.c_str(), &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
// set kernel arg of reduction kernel
for (size_t j = 0; j < vclmem.size(); j++)
{
@@ -2207,12 +2214,12 @@ public:
vclmem[j] ? sizeof(cl_mem) : sizeof(double),
(void*)&vclmem[j]);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
}
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << vclmem.size() << ": cl_mem: " << pClmem2);
err = clSetKernelArg(redKernel, vclmem.size(), sizeof(cl_mem), (void*)&pClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
// set work group size and execute
size_t global_work_size[] = { 256, (size_t)nVectorWidth };
@@ -2221,16 +2228,16 @@ public:
err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, NULL,
global_work_size, local_work_size, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clFinish", err, __FILE__, __LINE__);
// Pass pClmem2 to the "real" kernel
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << pClmem2);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&pClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
}
}
if (OpSumIfs* OpSumCodeGen = dynamic_cast<OpSumIfs*>(mpCodeGen.get()))
@@ -2263,13 +2270,13 @@ public:
mpClmem2 = clCreateBuffer(kEnv.mpkContext, CL_MEM_READ_WRITE,
sizeof(double) * nVectorWidth, NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpClmem2 << " size " << sizeof(double) << "*" << nVectorWidth << "=" << (sizeof(double)*nVectorWidth));
std::string kernelName = mvSubArguments[0]->GetName() + "_SumIfs_reduction";
cl_kernel redKernel = clCreateKernel(pProgram, kernelName.c_str(), &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
// set kernel arg of reduction kernel
for (size_t j = 0; j < vclmem.size(); j++)
@@ -2283,22 +2290,22 @@ public:
vclmem[j].mCLMem ? (void*)&vclmem[j].mCLMem :
(void*)&vclmem[j].mConst);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
}
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << vclmem.size() << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(redKernel, vclmem.size(), sizeof(cl_mem), (void*)&mpClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << (vclmem.size() + 1) << ": cl_int: " << nInput);
err = clSetKernelArg(redKernel, vclmem.size() + 1, sizeof(cl_int), (void*)&nInput);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Kernel " << redKernel << " arg " << (vclmem.size() + 2) << ": cl_int: " << nCurWindowSize);
err = clSetKernelArg(redKernel, vclmem.size() + 2, sizeof(cl_int), (void*)&nCurWindowSize);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
// set work group size and execute
size_t global_work_size[] = { 256, (size_t)nVectorWidth };
size_t local_work_size[] = { 256, 1 };
@@ -2306,16 +2313,16 @@ public:
err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, redKernel, 2, NULL,
global_work_size, local_work_size, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clFinish", err, __FILE__, __LINE__);
clReleaseKernel(redKernel);
// Pass mpClmem2 to the "real" kernel
SAL_INFO("sc.opencl", "Kernel " << k << " arg " << argno << ": cl_mem: " << mpClmem2);
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void*)&mpClmem2);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
}
}
return i;
@@ -3712,7 +3719,7 @@ void DynamicKernel::CreateKernel()
mpProgram = clCreateProgramWithSource(kEnv.mpkContext, 1,
&src, NULL, &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateProgramWithSource", err, __FILE__, __LINE__);
err = clBuildProgram(mpProgram, 1,
::opencl::gpuEnv.mpArryDevsID, "", NULL, NULL);
if (err != CL_SUCCESS)
@@ -3729,7 +3736,7 @@ void DynamicKernel::CreateKernel()
e != CL_SUCCESS, "sc.opencl",
"after CL_BUILD_PROGRAM_FAILURE,"
" clGetProgramBuildInfo(CL_PROGRAM_BUILD_STATUS)"
- " fails with " << e);
+ " fails with " << ::opencl::errorString(e));
if (e == CL_SUCCESS)
{
size_t n;
@@ -3740,7 +3747,7 @@ void DynamicKernel::CreateKernel()
e != CL_SUCCESS || n == 0, "sc.opencl",
"after CL_BUILD_PROGRAM_FAILURE,"
" clGetProgramBuildInfo(CL_PROGRAM_BUILD_LOG)"
- " fails with " << e << ", n=" << n);
+ " fails with " << ::opencl::errorString(e) << ", n=" << n);
if (e == CL_SUCCESS && n != 0)
{
std::vector<char> log(n);
@@ -3751,7 +3758,7 @@ void DynamicKernel::CreateKernel()
e != CL_SUCCESS || n == 0, "sc.opencl",
"after CL_BUILD_PROGRAM_FAILURE,"
" clGetProgramBuildInfo("
- "CL_PROGRAM_BUILD_LOG) fails with " << e);
+ "CL_PROGRAM_BUILD_LOG) fails with " << ::opencl::errorString(e));
if (e == CL_SUCCESS)
SAL_WARN(
"sc.opencl",
@@ -3761,7 +3768,7 @@ void DynamicKernel::CreateKernel()
}
}
#endif
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clBuildProgram", err, __FILE__, __LINE__);
}
// Generate binary out of compiled kernel.
::opencl::generatBinFromKernelSource(mpProgram,
@@ -3774,7 +3781,7 @@ void DynamicKernel::CreateKernel()
}
mpKernel = clCreateKernel(mpProgram, kname.c_str(), &err);
if (err != CL_SUCCESS)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateKernel", err, __FILE__, __LINE__);
}
void DynamicKernel::Launch( size_t nr )
@@ -3788,13 +3795,13 @@ void DynamicKernel::Launch( size_t nr )
(cl_mem_flags)CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR,
nr * sizeof(double), NULL, &err);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clCreateBuffer", err, __FILE__, __LINE__);
SAL_INFO("sc.opencl", "Created buffer " << mpResClmem << " size " << nr << "*" << sizeof(double) << "=" << (nr*sizeof(double)));
SAL_INFO("sc.opencl", "Kernel " << mpKernel << " arg " << 0 << ": cl_mem: " << mpResClmem);
err = clSetKernelArg(mpKernel, 0, sizeof(cl_mem), (void*)&mpResClmem);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clSetKernelArg", err, __FILE__, __LINE__);
// The rest of buffers
mSyms.Marshal(mpKernel, nr, mpProgram);
size_t global_work_size[] = { nr };
@@ -3802,10 +3809,10 @@ void DynamicKernel::Launch( size_t nr )
err = clEnqueueNDRangeKernel(kEnv.mpkCmdQueue, mpKernel, 1, NULL,
global_work_size, NULL, 0, NULL, NULL);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clEnqueueNDRangeKernel", err, __FILE__, __LINE__);
err = clFlush(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
- throw OpenCLError(err, __FILE__, __LINE__);
+ throw OpenCLError("clFlush", err, __FILE__, __LINE__);
}
// Symbol lookup. If there is no such symbol created, allocate one
@@ -3954,7 +3961,7 @@ public:
if (err != CL_SUCCESS)
{
- SAL_WARN("sc.opencl", "Dynamic formula compiler: OpenCL error: " << err);
+ SAL_WARN("sc.opencl", "clEnqueueMapBuffer failed:: " << ::opencl::errorString(err));
mpResBuf = NULL;
return;
}
@@ -3962,7 +3969,7 @@ public:
err = clEnqueueUnmapMemObject(kEnv.mpkCmdQueue, mpCLResBuf, mpResBuf, 0, NULL, NULL);
if (err != CL_SUCCESS)
{
- SAL_WARN("sc.opencl", "Dynamic formula compiler: OpenCL error: " << err);
+ SAL_WARN("sc.opencl", "clEnqueueUnmapMemObject failed: " << ::opencl::errorString(err));
mpResBuf = NULL;
}
}
@@ -4023,7 +4030,7 @@ public:
}
catch (const OpenCLError& oce)
{
- SAL_WARN("sc.opencl", "Dynamic formula compiler: OpenCL error: " << oce.mError << " at " << oce.mFile << ":" << oce.mLineNumber);
+ SAL_WARN("sc.opencl", "Dynamic formula compiler: OpenCL error from " << oce.mFunction << ": " << ::opencl::errorString(oce.mError) << " at " << oce.mFile << ":" << oce.mLineNumber);
return CLInterpreterResult();
}
catch (const Unhandled& uh)
@@ -4088,6 +4095,9 @@ bool waitForResults()
::opencl::setKernelEnv(&kEnv);
cl_int err = clFinish(kEnv.mpkCmdQueue);
+ if (err != CL_SUCCESS)
+ SAL_WARN("sc.opencl", "clFinish failed: " << ::opencl::errorString(err));
+
return err == CL_SUCCESS;
}
diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx
index 1c24c12..671987e 100644
--- a/sc/source/core/opencl/opbase.cxx
+++ b/sc/source/core/opencl/opbase.cxx
@@ -19,10 +19,14 @@ UnhandledToken::UnhandledToken(
formula::FormulaToken* t, const char* m, const std::string& fn, int ln ) :
mToken(t), mMessage(m), mFile(fn), mLineNumber(ln) {}
-OpenCLError::OpenCLError( cl_int err, const std::string& fn, int ln ) :
- mError(err), mFile(fn), mLineNumber(ln)
+OpenCLError::OpenCLError( const std::string function, cl_int error, const std::string& file, int line ) :
+ mFunction(function), mError(error), mFile(file), mLineNumber(line)
{
- SAL_INFO("sc.opencl", "OpenCL error: " << ::opencl::errorString(mError));
+ // Not sure if this SAL_INFO() is useful; the place in
+ // CLInterpreterContext::launchKernel() where OpenCLError is
+ // caught already uses SAL_WARN() to display it.
+
+ // SAL_INFO("sc.opencl", "OpenCL error: " << ::opencl::errorString(mError));
}
Unhandled::Unhandled( const std::string& fn, int ln ) :
diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx
index b4c4493..5c7228d 100644
--- a/sc/source/core/opencl/opbase.hxx
+++ b/sc/source/core/opencl/opbase.hxx
@@ -42,8 +42,9 @@ public:
class OpenCLError
{
public:
- OpenCLError( cl_int err, const std::string& fn, int ln );
+ OpenCLError( const std::string function, cl_int error, const std::string& file, int line );
+ std::string mFunction;
cl_int mError;
std::string mFile;
int mLineNumber;
commit 43617f14485b79609079c55c872ac088e231db3c
Author: Tor Lillqvist <tml at collabora.com>
Date: Thu Feb 5 23:42:30 2015 +0200
Move OpenCLError::strerror() from sc to opencl, and rename to errorString()
There is nothing Calc-specific in this function, and surely it will be good to
output OpenCL errors symbolically also in the opencl module.
Change-Id: Ibe7d0d036f24dd87e06b8290224e1033dda0f3d1
diff --git a/include/opencl/openclwrapper.hxx b/include/opencl/openclwrapper.hxx
index 9fde5d6..75ecbc8 100644
--- a/include/opencl/openclwrapper.hxx
+++ b/include/opencl/openclwrapper.hxx
@@ -79,6 +79,12 @@ OPENCL_DLLPUBLIC void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId
*/
OPENCL_DLLPUBLIC void setOpenCLCmdQueuePosition( int nPos );
+/**
+ * Return a textual representation of an OpenCL error code.
+ * (Currently the symbolic name sans the CL_ prefix.)
+ */
+OPENCL_DLLPUBLIC const char* errorString(cl_int nError);
+
}
#endif
diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx
index db53a04..658e275 100644
--- a/opencl/source/openclwrapper.cxx
+++ b/opencl/source/openclwrapper.cxx
@@ -854,6 +854,64 @@ void setOpenCLCmdQueuePosition( int nPos )
gpuEnv.mnCmdQueuePos = nPos;
}
+const char* errorString(cl_int nError)
+{
+#define CASE(val) case CL_##val: return #val
+ switch (nError)
+ {
+ CASE(SUCCESS);
+ CASE(DEVICE_NOT_FOUND);
+ CASE(DEVICE_NOT_AVAILABLE);
+ CASE(COMPILER_NOT_AVAILABLE);
+ CASE(MEM_OBJECT_ALLOCATION_FAILURE);
+ CASE(OUT_OF_RESOURCES);
+ CASE(OUT_OF_HOST_MEMORY);
+ CASE(PROFILING_INFO_NOT_AVAILABLE);
+ CASE(MEM_COPY_OVERLAP);
+ CASE(IMAGE_FORMAT_MISMATCH);
+ CASE(IMAGE_FORMAT_NOT_SUPPORTED);
+ CASE(BUILD_PROGRAM_FAILURE);
+ CASE(MAP_FAILURE);
+ CASE(INVALID_VALUE);
+ CASE(INVALID_DEVICE_TYPE);
+ CASE(INVALID_PLATFORM);
+ CASE(INVALID_DEVICE);
+ CASE(INVALID_CONTEXT);
+ CASE(INVALID_QUEUE_PROPERTIES);
+ CASE(INVALID_COMMAND_QUEUE);
+ CASE(INVALID_HOST_PTR);
+ CASE(INVALID_MEM_OBJECT);
+ CASE(INVALID_IMAGE_FORMAT_DESCRIPTOR);
+ CASE(INVALID_IMAGE_SIZE);
+ CASE(INVALID_SAMPLER);
+ CASE(INVALID_BINARY);
+ CASE(INVALID_BUILD_OPTIONS);
+ CASE(INVALID_PROGRAM);
+ CASE(INVALID_PROGRAM_EXECUTABLE);
+ CASE(INVALID_KERNEL_NAME);
+ CASE(INVALID_KERNEL_DEFINITION);
+ CASE(INVALID_KERNEL);
+ CASE(INVALID_ARG_INDEX);
+ CASE(INVALID_ARG_VALUE);
+ CASE(INVALID_ARG_SIZE);
+ CASE(INVALID_KERNEL_ARGS);
+ CASE(INVALID_WORK_DIMENSION);
+ CASE(INVALID_WORK_GROUP_SIZE);
+ CASE(INVALID_WORK_ITEM_SIZE);
+ CASE(INVALID_GLOBAL_OFFSET);
+ CASE(INVALID_EVENT_WAIT_LIST);
+ CASE(INVALID_EVENT);
+ CASE(INVALID_OPERATION);
+ CASE(INVALID_GL_OBJECT);
+ CASE(INVALID_BUFFER_SIZE);
+ CASE(INVALID_MIP_LEVEL);
+ CASE(INVALID_GLOBAL_WORK_SIZE);
+ default:
+ return "Unknown OpenCL error code";
+ }
+#undef CASE
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx
index bf3f8d8..1c24c12 100644
--- a/sc/source/core/opencl/opbase.cxx
+++ b/sc/source/core/opencl/opbase.cxx
@@ -7,6 +7,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <opencl/openclwrapper.hxx>
+
#include "opbase.hxx"
using namespace formula;
@@ -20,65 +22,7 @@ UnhandledToken::UnhandledToken(
OpenCLError::OpenCLError( cl_int err, const std::string& fn, int ln ) :
mError(err), mFile(fn), mLineNumber(ln)
{
- SAL_INFO("sc.opencl", "OpenCLError:" << mError << ": " << strerror(mError));
-}
-
-const char* OpenCLError::strerror( cl_int i ) const
-{
-#define CASE(val) case val: return #val
- switch (i)
- {
- CASE(CL_SUCCESS);
- CASE(CL_DEVICE_NOT_FOUND);
- CASE(CL_DEVICE_NOT_AVAILABLE);
- CASE(CL_COMPILER_NOT_AVAILABLE);
- CASE(CL_MEM_OBJECT_ALLOCATION_FAILURE);
- CASE(CL_OUT_OF_RESOURCES);
- CASE(CL_OUT_OF_HOST_MEMORY);
- CASE(CL_PROFILING_INFO_NOT_AVAILABLE);
- CASE(CL_MEM_COPY_OVERLAP);
- CASE(CL_IMAGE_FORMAT_MISMATCH);
- CASE(CL_IMAGE_FORMAT_NOT_SUPPORTED);
- CASE(CL_BUILD_PROGRAM_FAILURE);
- CASE(CL_MAP_FAILURE);
- CASE(CL_INVALID_VALUE);
- CASE(CL_INVALID_DEVICE_TYPE);
- CASE(CL_INVALID_PLATFORM);
- CASE(CL_INVALID_DEVICE);
- CASE(CL_INVALID_CONTEXT);
- CASE(CL_INVALID_QUEUE_PROPERTIES);
- CASE(CL_INVALID_COMMAND_QUEUE);
- CASE(CL_INVALID_HOST_PTR);
- CASE(CL_INVALID_MEM_OBJECT);
- CASE(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR);
- CASE(CL_INVALID_IMAGE_SIZE);
- CASE(CL_INVALID_SAMPLER);
- CASE(CL_INVALID_BINARY);
- CASE(CL_INVALID_BUILD_OPTIONS);
- CASE(CL_INVALID_PROGRAM);
- CASE(CL_INVALID_PROGRAM_EXECUTABLE);
- CASE(CL_INVALID_KERNEL_NAME);
- CASE(CL_INVALID_KERNEL_DEFINITION);
- CASE(CL_INVALID_KERNEL);
- CASE(CL_INVALID_ARG_INDEX);
- CASE(CL_INVALID_ARG_VALUE);
- CASE(CL_INVALID_ARG_SIZE);
- CASE(CL_INVALID_KERNEL_ARGS);
- CASE(CL_INVALID_WORK_DIMENSION);
- CASE(CL_INVALID_WORK_GROUP_SIZE);
- CASE(CL_INVALID_WORK_ITEM_SIZE);
- CASE(CL_INVALID_GLOBAL_OFFSET);
- CASE(CL_INVALID_EVENT_WAIT_LIST);
- CASE(CL_INVALID_EVENT);
- CASE(CL_INVALID_OPERATION);
- CASE(CL_INVALID_GL_OBJECT);
- CASE(CL_INVALID_BUFFER_SIZE);
- CASE(CL_INVALID_MIP_LEVEL);
- CASE(CL_INVALID_GLOBAL_WORK_SIZE);
- default:
- return "Unknown OpenCL error code";
- }
-#undef CASE
+ SAL_INFO("sc.opencl", "OpenCL error: " << ::opencl::errorString(mError));
}
Unhandled::Unhandled( const std::string& fn, int ln ) :
diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx
index 866d7dd..b4c4493 100644
--- a/sc/source/core/opencl/opbase.hxx
+++ b/sc/source/core/opencl/opbase.hxx
@@ -41,9 +41,6 @@ public:
/// Failed in marshaling
class OpenCLError
{
-private:
- const char* strerror( cl_int i ) const;
-
public:
OpenCLError( cl_int err, const std::string& fn, int ln );
commit 7d7076446efa50a4a4997289272934bd35fa4d58
Author: Tor Lillqvist <tml at collabora.com>
Date: Thu Feb 5 22:57:26 2015 +0200
The ISNAN ifdefs can go away
ISNAN was defined unconditionally since long, and even the original authors of
this stuff started removing those conditionals last summer.
for F in `git grep -l ISNAN sc`; do unifdef -DISNAN -B -o $F $F; done
Change-Id: I61df4066d0ecc23b6ce26bac8f3fbdfaf4aceac4
diff --git a/sc/source/core/opencl/op_addin.cxx b/sc/source/core/opencl/op_addin.cxx
index e3e5787..3bb7c60 100644
--- a/sc/source/core/opencl/op_addin.cxx
+++ b/sc/source/core/opencl/op_addin.cxx
@@ -50,17 +50,13 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
{
const formula::SingleVectorRefToken*tmpCurSVR0 =
static_cast<const formula::SingleVectorRefToken *>(tmpCur0);
-#ifdef ISNAN
ss << " if (gid0 < " << tmpCurSVR0->GetArrayLength() << ")\n";
ss << " {\n";
-#endif
ss << " x = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (isNan(x))\n";
ss << " x = 0.0;\n";
ss << " }\n";
-#endif
}
else if(tmpCur0->GetType() == formula::svDouble)
{
@@ -86,17 +82,13 @@ void OpBesselj::GenSlidingWindowFunction(std::stringstream &ss,
{
const formula::SingleVectorRefToken*tmpCurSVR1 =
static_cast<const formula::SingleVectorRefToken *>(tmpCur1);
-#ifdef ISNAN
ss << " if (gid0 < " << tmpCurSVR1->GetArrayLength() << ")\n";
ss << " {\n";
-#endif
ss << " N = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (isNan(N))\n";
ss << " N = 0.0;\n";
ss << " }\n";
-#endif
}
else if(tmpCur1->GetType() == formula::svDouble)
{
@@ -220,25 +212,18 @@ void OpGestep::GenSlidingWindowFunction(
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken& rSVR =
dynamic_cast< const formula::SingleVectorRefToken& >(*pCur);
ss << " if (gid0 < " << rSVR.GetArrayLength() << ")\n";
ss << " {\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -255,7 +240,6 @@ void OpGestep::GenSlidingWindowFunction(
ss << "tmp"<<i<<" ="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
}
-#endif
}
ss << " tmp =tmp0 >= tmp1 ? 1 : 0;\n";
ss << " return tmp;\n";
diff --git a/sc/source/core/opencl/op_financial.cxx b/sc/source/core/opencl/op_financial.cxx
index 2c249fa..2e3c59f 100644
--- a/sc/source/core/opencl/op_financial.cxx
+++ b/sc/source/core/opencl/op_financial.cxx
@@ -41,7 +41,6 @@ void RRI::GenSlidingWindowFunction(
ss << " double fv;\n";
ss << " double pv;\n";
ss << " double nper;\n";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -65,34 +64,27 @@ void RRI::GenSlidingWindowFunction(
ss<< " int buffer_fv_len = ";
ss<< tmpCurDVR2->GetArrayLength();
ss << ";\n";
-#endif
-#ifdef ISNAN
ss<<" if(gid0>=buffer_nper_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" nper = 0;\n\telse \n";
-#endif
ss<<" nper = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n";
-#ifdef ISNAN
ss<<" if(gid0>=buffer_pv_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" pv = 0;\n\telse \n";
-#endif
ss<<" pv = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n";
-#ifdef ISNAN
ss<<" if(gid0>=buffer_pv_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" fv = 0;\n\telse \n";
-#endif
ss<<" fv = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n";
@@ -124,25 +116,17 @@ vSubArguments)
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss <<" temp="<<vSubArguments[i]->GenSlidingWindowDeclRef();
@@ -159,10 +143,6 @@ vSubArguments)
);
ss <<";\n";
}
-#else
- ss <<" tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef();
- ss <<";\n";
-#endif
}
ss<<"if(tmp1==0)\n\t";
ss<<"\treturn 0;\n\t";
@@ -190,7 +170,6 @@ void OpDollarde::GenSlidingWindowFunction(
ss << "double fInt = " << GetBottom() <<";\n\t";
ss << "double dollar;\n\t";
ss << "double fFrac;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -203,22 +182,17 @@ void OpDollarde::GenSlidingWindowFunction(
ss<< "int buffer_frac_len = ";
ss<< tmpCurDVR1->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss<<"if((gid0)>=buffer_dollar_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"dollar = 0;\n\telse \n\t\t";
-#endif
ss<<"dollar = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if((gid0)>=buffer_frac_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"fFrac = 0;\n\telse \n\t\t";
-#endif
ss<<"fFrac = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -247,7 +221,6 @@ void OpDollarfr::GenSlidingWindowFunction(std::stringstream &ss,
ss << "double fInt = " << GetBottom() <<";\n\t";
ss << "double dollar;\n\t";
ss << "double fFrac;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -260,22 +233,17 @@ void OpDollarfr::GenSlidingWindowFunction(std::stringstream &ss,
ss<< "int buffer_frac_len = ";
ss<< tmpCurDVR1->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss<<"if((gid0)>=buffer_dollar_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"dollar = 0;\n\telse \n\t\t";
-#endif
ss<<"dollar = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if((gid0)>=buffer_frac_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"fFrac = 0;\n\telse \n\t\t";
-#endif
ss<<"fFrac = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -321,19 +289,14 @@ void OpDISC::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -350,10 +313,6 @@ void OpDISC::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " int nNullDate = 693594;\n";
ss << " tmp = 1.0 - arg2 / arg3;\n";
@@ -401,19 +360,14 @@ void OpINTRATE::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -430,10 +384,6 @@ void OpINTRATE::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " int nNullDate = GetNullDate();\n";
ss << " tmp = arg3 * pow(arg2,-1) - 1.0;\n";
@@ -476,7 +426,6 @@ void OpFV::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if(pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if(gid0 >= " << pSVR->GetArrayLength() << " || isNan(";
@@ -484,7 +433,6 @@ void OpFV::GenSlidingWindowFunction(std::stringstream& ss,
ss << "))\n";
ss << " arg" << j << " = " <<GetBottom() << ";\n";
ss << " else\n";
-#endif
ss << " arg" << j << " = ";
ss << vSubArguments[j]->GenSlidingWindowDeclRef();
ss << ";\n";
@@ -529,7 +477,6 @@ void OpIPMT::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if(pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if(gid0 >= " << pSVR->GetArrayLength() << " || isNan(";
@@ -537,7 +484,6 @@ void OpIPMT::GenSlidingWindowFunction(std::stringstream& ss,
ss << "))\n";
ss << " arg" << j << " = " <<GetBottom() << ";\n";
ss << " else\n";
-#endif
ss << " arg" << j << " = ";
ss << vSubArguments[j]->GenSlidingWindowDeclRef();
ss << ";\n";
@@ -596,19 +542,14 @@ void OpISPMT::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -625,10 +566,6 @@ void OpISPMT::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " tmp = arg3 * arg0 * ( arg1 - arg2) * pow(arg2, -1);\n";
ss << " return tmp;\n";
@@ -658,19 +595,14 @@ void OpDuration::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -687,10 +619,6 @@ void OpDuration::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " tmp = log(arg2 * pow( arg1,-1)) / log(arg0 + 1.0);\n";
ss << " return tmp;\n";
@@ -737,7 +665,6 @@ void OpDuration_ADD::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if(pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if(gid0 >= " << pSVR->GetArrayLength() << " || isNan(";
@@ -745,7 +672,6 @@ void OpDuration_ADD::GenSlidingWindowFunction(std::stringstream& ss,
ss << "))\n";
ss << " arg" << j << " = " <<GetBottom() << ";\n";
ss << " else\n";
-#endif
ss << " arg" << j << " = ";
ss << vSubArguments[j]->GenSlidingWindowDeclRef();
ss << ";\n";
@@ -798,19 +724,14 @@ void OpMDuration::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -827,10 +748,6 @@ void OpMDuration::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " int nNullDate = 693594;\n";
ss << " tmp = GetDuration_new( nNullDate, (int)arg0, (int)arg1, arg2,";
@@ -860,24 +777,16 @@ void Fvschedule::GenSlidingWindowFunction(
ss << "int gid0 = get_global_id(0);\n\t";
ss << "double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ";\n\t";
-#ifdef ISNAN
ss << "if (isNan(arg0))\n\t\t";
ss << "arg0 = 0;\n\t";
-#endif
ss << "double arg1;\n\t";
ss << "int arrayLength = " << pCurDVR->GetArrayLength() << ";\n\t";
-#ifdef ISNAN
ss << "for (int i = 0; i + gid0 < arrayLength &&";
ss << " i < " << nCurWindowSize << "; i++){\n\t\t";
-#else
- ss << "for (int i = 0; i < " << nCurWindowSize << "; i++){\n\t\t";
-#endif
ss << "arg1 = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n\t\t\t";
-#ifdef ISNAN
ss << "if (isNan(arg1))\n\t\t\t\t";
ss << "arg1 = 0;\n\t\t\t";
-#endif
ss << "tmp *= arg1 + 1.0;\n\t\t";
ss << "}\n\t";
ss << "return (double)tmp * arg0";
@@ -905,15 +814,12 @@ vSubArguments)
ss << " int gid0 = get_global_id(0);\n";
ss << " double fRate,fVal;\n";
ss << " int nStartPer,nEndPer,nNumPeriods,nPayType;\n";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
FormulaToken *tmpCur1 = vSubArguments[1]->GetFormulaToken();
FormulaToken *tmpCur2 = vSubArguments[2]->GetFormulaToken();
FormulaToken *tmpCur3 = vSubArguments[3]->GetFormulaToken();
FormulaToken *tmpCur4 = vSubArguments[4]->GetFormulaToken();
FormulaToken *tmpCur5 = vSubArguments[5]->GetFormulaToken();
-#endif
-#ifdef ISNAN
if(tmpCur0->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
@@ -923,10 +829,8 @@ vSubArguments)
ss <<"))\n";
ss <<" fRate = 0;\n else\n";
}
-#endif
ss <<" fRate = "<<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur1->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR1= static_cast<const
@@ -936,11 +840,9 @@ vSubArguments)
ss <<"))\n";
ss <<" nNumPeriods = 0;\n else\n";
}
-#endif
ss <<" nNumPeriods = (int)";
ss <<vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur2->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR2= static_cast<const
@@ -950,10 +852,8 @@ vSubArguments)
ss <<"))\n";
ss <<" fVal = 0;\n else\n";
}
-#endif
ss <<" fVal = "<<vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur3->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR3= static_cast<const
@@ -963,11 +863,9 @@ vSubArguments)
ss <<"))\n";
ss <<" nStartPer = 0;\n else\n";
}
-#endif
ss <<" nStartPer = (int)";
ss <<vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur4->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR4= static_cast<const
@@ -977,12 +875,10 @@ vSubArguments)
ss <<"))\n";
ss <<" nEndPer = 0;\n else\n";
}
-#endif
ss <<" nEndPer = (int)";
ss <<vSubArguments[4]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur5->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR5= static_cast<const
@@ -992,7 +888,6 @@ vSubArguments)
ss <<"))\n";
ss <<" nPayType = 0;\n else\n";
}
-#endif
ss <<" nPayType = (int)"<<vSubArguments[5]->GenSlidingWindowDeclRef();
ss <<";\n";
ss <<" double fRmz;\n";
@@ -1041,7 +936,6 @@ void IRR::GenSlidingWindowFunction(std::stringstream &ss,
ss << " double nCount = 0.0;\n";
if (pSur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pSur);
ss << " if (gid0 >= " << pSVR->GetArrayLength() << ")\n";
@@ -1049,15 +943,12 @@ void IRR::GenSlidingWindowFunction(std::stringstream &ss,
ss << " if (isNan(fSchaetzwert))\n";
ss << " x = 0.1;\n";
ss << " else\n";
-#endif
}
else if (pSur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " if (isNan(fSchaetzwert))\n";
ss << " x = 0.1;\n";
ss << " else\n";
-#endif
}
ss << " x = fSchaetzwert;\n";
ss << " unsigned short nItCount = 0;\n";
@@ -1072,148 +963,96 @@ void IRR::GenSlidingWindowFunction(std::stringstream &ss,
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << " for ( ";
if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "i = gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << " /2*2; i++){\n";
-#else
- ss << "i = gid0; i < " << nCurWindowSize << " /2*2; i++)\n";
-#endif
ss << " arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
ss << " i++;;\n";
ss << " arg1 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (!isNan(arg0)){\n";
-#endif
ss << " fZaehler += arg0 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg0/pow(1.0+x,nCount+1.0);\n";
ss << " nCount += 1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " if (!isNan(arg1)){\n";
-#endif
ss << " fZaehler += arg1 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg1/pow(1.0+x,nCount+1.0);\n";
ss << " nCount += 1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " }\n";
ss << "if(i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << ") ;{\n";
-#else
- ss << " i < " << nCurWindowSize << "){\n";
-#endif
}
else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "; i < " << pDVR->GetArrayLength();
ss << " && i < (gid0+" << nCurWindowSize << " )/2*2; i++){\n";
-#else
- ss << "; i < gid0+" << nCurWindowSize << " /2*2; i++)\n";
-#endif
ss << " arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (!isNan(arg0)){\n";
-#endif
ss << " fZaehler += arg0 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg0/pow(1.0+x,nCount+1.0);\n";
ss << " nCount += 1;\n";
-#ifdef ISNAN
ss << " }\n";
-#endif
ss << " i++;\n";
ss << " arg1 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (!isNan(arg1)){\n";
-#endif
ss << " fZaehler += arg1 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg1/pow(1.0+x,nCount+1.0);\n";
ss << " nCount+=1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " }\n";
ss << " if(i < " << pDVR->GetArrayLength();
ss << " && i < gid0+" << nCurWindowSize << "){\n";
-#else
- ss << " i < " << nCurWindowSize << "){\n";
-#endif
}
else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
-#ifdef ISNAN
ss << " ; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << " /2*2; i++){\n";
-#else
- ss << "; i < " << nCurWindowSize << " /2*2; i++)\n";
-#endif
ss << " arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
ss << " i++;;\n";
ss << " arg1 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (!isNan(arg0)){\n";
-#endif
ss << " fZaehler += arg0 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg0/pow(1.0+x,nCount+1.0);\n";
ss << " nCount += 1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " if (!isNan(arg1)){\n";
-#endif
ss << " fZaehler += arg1 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg1/pow(1.0+x,nCount+1.0);\n";
ss << " nCount+=1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " }\n";
ss << " if(i + gid0 < " << pDVR->GetArrayLength() << " &&";
ss << " i < " << nCurWindowSize << "){\n";
-#else
- ss << " i < " << nCurWindowSize << "){\n";
-#endif
} else {
-#ifdef ISNAN
ss << "; i < " << nCurWindowSize << " /2*2; i++){\n";
-#else
- ss << "; i < " << nCurWindowSize << " /2*2; i++)\n";
-#endif
ss << " arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
ss << " i++;;\n";
ss << " arg1 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (!isNan(arg0)){\n";
-#endif
ss << " fZaehler += arg0 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg0/pow(1.0+x,nCount+1.0);\n";
ss << " nCount += 1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " if (!isNan(arg1)){\n";
-#endif
ss << " fZaehler += arg1 / pow(1.0 + x, nCount);\n";
ss << " fNenner+=-1*nCount*arg1/pow(1.0+x,nCount+1.0);\n";
ss << " nCount+=1;\n";
ss << " }\n";
-#ifdef ISNAN
ss << " }\n";
ss << "if(i<" << nCurWindowSize << "){\n";
-#else
- ss << " i < " << nCurWindowSize << "){\n";
-#endif
}
ss << " arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
-#ifdef ISNAN
ss << " if (isNan(arg0))\n";
ss << " continue;\n";
-#endif
ss << " fZaehler += arg0 / pow(1.0+x, nCount);\n";
ss << " fNenner += -nCount * arg0 / pow(1.0+x,nCount+1.0);\n";
ss << " nCount+=1;\n";
@@ -1363,7 +1202,6 @@ void PriceMat::GenSlidingWindowFunction(
ss <<"double rate;\n\t";
ss <<"double yield;\n\t";
ss <<"int nBase;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -1401,58 +1239,45 @@ void PriceMat::GenSlidingWindowFunction(
ss<< "int buffer_base_len = ";
ss<< tmpCurDVR5->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss<<"if(gid0>=buffer_settle_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"settle = 0;\n\telse \n\t\t";
-#endif
ss<<"settle = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_mat_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"mat = 0;\n\telse \n\t\t";
-#endif
ss<<"mat = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_issue_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"issue = 0;\n\telse \n\t\t";
-#endif
ss<<"issue = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_rate_len || isNan(";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"rate = 0;\n\telse \n\t\t";
-#endif
ss<<"rate = ";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_yield_len || isNan(";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"yield = 0;\n\telse \n\t\t";
-#endif
ss<<"yield = ";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_base_len || isNan(";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"nBase = 0;\n\telse \n\t\t";
-#endif
ss<<"nBase = ";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -1485,7 +1310,6 @@ void OpSYD::GenSlidingWindowFunction(std::stringstream &ss,
ss << " double salvage;\n";
ss << " double life;\n";
ss << " double period;\n";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -1516,41 +1340,32 @@ void OpSYD::GenSlidingWindowFunction(std::stringstream &ss,
ss << " int buffer_period_len = ";
ss << tmpCurDVR3->GetArrayLength();
ss << ";\n";
-#endif
-#ifdef ISNAN
ss <<" if(gid0>=buffer_cost_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" cost = 0;\n\telse \n";
-#endif
ss <<" cost = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0>=buffer_salvage_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" salvage = 0;\n\telse \n";
-#endif
ss <<" salvage = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0>=buffer_life_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" life = 0;\n\telse \n";
-#endif
ss <<" life = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0>=buffer_period_len || isNan(";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" period = 0;\n\telse \n";
-#endif
ss <<" period = ";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<";\n";
@@ -1598,7 +1413,6 @@ void MIRR::GenSlidingWindowFunction(
ss << ";\n\t";
ss << "int argLen1 = " << pSVR1->GetArrayLength() << ";\n\t";
ss << "int argLen2 = " << pSVR2->GetArrayLength() << ";\n\t";
-#ifdef ISNAN
ss << "if (gid0 >= argLen1)\n\t\t";
ss << "arg1 = 0.0;\n\t";
ss << "if (gid0 >= argLen2)\n\t\t";
@@ -1607,7 +1421,6 @@ void MIRR::GenSlidingWindowFunction(
ss << "arg1 = 0.0;\n\t";
ss << "if (isNan(arg2))\n\t\t";
ss << "arg2 = 0.0;\n\t";
-#endif
ss << "double invest = arg1 + 1.0;\n\t";
ss << "double reinvest = arg2 + 1.0;\n\t";
ss << "double NPV_invest = 0.0;\n\t";
@@ -1616,18 +1429,12 @@ void MIRR::GenSlidingWindowFunction(
ss << "double Pow_reinvest = 1.0;\n\t";
ss << "int nCount = 0;\n\t";
ss << "int arrayLength = " << pCurDVR->GetArrayLength() << ";\n\t";
-#ifdef ISNAN
ss << "for (int i = 0; i + gid0 < arrayLength &&";
ss << " i < " << nCurWindowSize << "; i++){\n\t\t";
-#else
- ss << "for (int i = 0; i < " << nCurWindowSize << "; i++){\n\t\t";
-#endif
ss << "arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ";\n\t\t";
-#ifdef ISNAN
ss << "if (isNan(arg0))\n\t\t\t";
ss << "continue;\n\t\t";
-#endif
ss << "if (arg0 > 0.0)\n\t\t\t";
ss << "NPV_reinvest += arg0 * Pow_reinvest;\n\t\t";
ss << "else if (arg0 < 0.0)\n\t\t\t";
@@ -1665,19 +1472,14 @@ void OpEffective::GenSlidingWindowFunction(std::stringstream& ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << " {\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -1694,10 +1496,6 @@ void OpEffective::GenSlidingWindowFunction(std::stringstream& ss,
ss << " arg" << i << " = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
}
-#else
- ss << " arg" << i;
- ss << vSubArguments[i]->GenSlidingWindowDeclRef() << ";\n";
-#endif
}
ss << " tmp = pow(1.0 + arg0 * pow(arg1, -1), arg1)-1.0;\n";
ss << " return tmp;\n";
@@ -1734,7 +1532,6 @@ void OpTbilleq::GenSlidingWindowFunction(
ss << "double tmp001;\n\t";
ss << "double tmp002;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -1758,34 +1555,27 @@ void OpTbilleq::GenSlidingWindowFunction(
ss<< "int buffer_tmp002_len = ";
ss<< tmpCurDVR2->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp000_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp000 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp000 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp001_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp001 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp001 = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp002_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp002 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp002 = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -1818,15 +1608,12 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss << " int gid0 = get_global_id(0);\n";
ss << " double fRate,fVal;\n";
ss << " int nStartPer,nEndPer,nNumPeriods,nPayType;\n";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
FormulaToken *tmpCur1 = vSubArguments[1]->GetFormulaToken();
FormulaToken *tmpCur2 = vSubArguments[2]->GetFormulaToken();
FormulaToken *tmpCur3 = vSubArguments[3]->GetFormulaToken();
FormulaToken *tmpCur4 = vSubArguments[4]->GetFormulaToken();
FormulaToken *tmpCur5 = vSubArguments[5]->GetFormulaToken();
-#endif
-#ifdef ISNAN
if(tmpCur0->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
@@ -1836,10 +1623,8 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" fRate = 0;\n else\n";
}
-#endif
ss <<" fRate = "<<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur1->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR1= static_cast<const
@@ -1849,11 +1634,9 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" nNumPeriods = 0;\n else\n";
}
-#endif
ss <<" nNumPeriods = (int)";
ss <<vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur2->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR2= static_cast<const
@@ -1863,10 +1646,8 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" fVal = 0;\n else\n";
}
-#endif
ss <<" fVal = "<<vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur3->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR3= static_cast<const
@@ -1876,11 +1657,9 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" nStartPer = 0;\n else\n";
}
-#endif
ss <<" nStartPer = (int)";
ss <<vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur4->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR4= static_cast<const
@@ -1890,12 +1669,10 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" nEndPer = 0;\n else\n";
}
-#endif
ss <<" nEndPer = (int)";
ss <<vSubArguments[4]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
if(tmpCur5->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken*tmpCurDVR5= static_cast<const
@@ -1905,7 +1682,6 @@ void OpCumprinc::GenSlidingWindowFunction(std::stringstream &ss,
ss <<"))\n";
ss <<" nPayType = 0;\n else\n";
}
-#endif
ss <<" nPayType = (int)";
ss <<vSubArguments[5]->GenSlidingWindowDeclRef();
ss <<";\n";
@@ -1959,7 +1735,6 @@ void OpAccrint::GenSlidingWindowFunction(
ss << " int nStartDate,nEndDate,mode,freq;\n";
ss << " int nDays1stYear=0;\n";
ss << " double fVal,fRate;\n";
-#ifdef ISNAN
FormulaToken* tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -1996,58 +1771,45 @@ void OpAccrint::GenSlidingWindowFunction(
ss<< " int buffer_nMode_len = ";
ss<< tmpCurDVR6->GetArrayLength();
ss << ";\n";
-#endif
-#ifdef ISNAN
ss<<" if(gid0 >= buffer_nIssue_len || isNan(";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" nStartDate = 0;\n else\n";
-#endif
ss <<" nStartDate=(int)";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0 >= buffer_nSettle_len || isNan(";
ss <<vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" nEndDate = 0;\n else\n";
-#endif
ss <<" nEndDate=(int)";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss << ";\n";
-#ifdef ISNAN
ss <<" if(gid0 >= buffer_fRate_len || isNan(";
ss <<vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" fRate = 0;\n else\n";
-#endif
ss <<" fRate=";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0 >= buffer_fVal_len || isNan(";
ss <<vSubArguments[4]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" fVal = 0;\n else\n";
-#endif
ss <<" fVal=";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0 >= buffer_nFreq_len || isNan(";
ss <<vSubArguments[5]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" freq = 0;\n else\n";
-#endif
ss <<" freq= (int)";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss <<";\n";
-#ifdef ISNAN
ss <<" if(gid0 >= buffer_nMode_len || isNan(";
ss <<vSubArguments[6]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" mode = 0;\n else\n";
-#endif
ss <<" mode = (int)";
ss << vSubArguments[6]->GenSlidingWindowDeclRef();
ss <<";\n";
@@ -2086,7 +1848,6 @@ void OpAccrintm::GenSlidingWindowFunction(
ss << "double tmp = " << GetBottom() <<";\n\t";
ss << "int nStartDate,nEndDate,mode;\n\t";
ss << "double fRate,fVal;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -2124,50 +1885,39 @@ void OpAccrintm::GenSlidingWindowFunction(
ss<< "int buffer_nMode_len = ";
ss<< tmpCurDVR4->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss <<"if(gid0 >= buffer_nIssue_len || isNan(";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<"))\n\t\t";
ss <<"nStartDate = 0;\n\telse\n\t\t";
-#endif
ss << "nStartDate=(int)";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n\t";
-#ifdef ISNAN
ss <<"if(gid0 >= buffer_nSettle_len || isNan(";
ss <<vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<"))\n\t\t";
ss <<"nEndDate = 0;\n\telse\n\t\t";
-#endif
ss << "nEndDate=(int)";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss << ";\n\t";
-#ifdef ISNAN
ss <<"if(gid0 >= buffer_fRate_len || isNan(";
ss <<vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<"))\n\t\t";
ss <<"fRate = 0;\n\telse\n\t\t";
-#endif
ss << "fRate=";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<";\n\t";
-#ifdef ISNAN
ss <<"if(gid0 >= buffer_fVal_len || isNan(";
ss <<vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<"))\n\t\t";
ss <<"fVal = 0;\n\telse\n\t\t";
-#endif
ss << "fVal=";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss << ";\n\t";
-#ifdef ISNAN
ss <<"if(gid0 >= buffer_nMode_len || isNan(";
ss <<vSubArguments[4]->GenSlidingWindowDeclRef();
ss <<"))\n\t\t";
ss <<"mode = 0;\n\telse\n\t\t";
-#endif
ss << "mode = (int)";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss << ";\n\t";
@@ -2231,7 +1981,6 @@ void OpYield::GenSlidingWindowFunction(
ss << "double tmp005;\n\t";
ss << "double tmp006;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -2287,74 +2036,59 @@ void OpYield::GenSlidingWindowFunction(
ss<< "int buffer_tmp006_len = ";
ss<< tmpCurDVR6->GetArrayLength();
ss << ";\n\t";
-#endif
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp000_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp000 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp000 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp001_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp001 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp001 = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp002_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp002 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp002 = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp003_len || isNan(";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp003 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp003 = ";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp004_len || isNan(";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp004 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp004 = ";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp005_len || isNan(";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp005 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp005 = ";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp006_len || isNan(";
ss << vSubArguments[6]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp006 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp006 = ";
ss << vSubArguments[6]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -2383,7 +2117,6 @@ void OpSLN::GenSlidingWindowFunction(std::stringstream &ss,
ss << " double rest;\n";
ss << " double dauer;\n";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0=
static_cast<const formula::SingleVectorRefToken *>(tmpCur0);
@@ -2402,31 +2135,24 @@ void OpSLN::GenSlidingWindowFunction(std::stringstream &ss,
ss<< " int buffer_dauer_len = ";
ss<< tmpCurDVR2->GetArrayLength();
ss << ";\n";
-#endif
-#ifdef ISNAN
ss<<" if(gid0>=buffer_wert_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" wert = 0;\n\telse \n";
-#endif
ss<<" wert = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n";
-#ifdef ISNAN
ss<<" if(gid0>=buffer_rest_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" rest = 0;\n\telse \n";
-#endif
ss<<" rest = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n";
-#ifdef ISNAN
ss<<" if(gid0>=buffer_dauer_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n";
ss<<" dauer = 0;\n\telse \n";
-#endif
ss<<" dauer = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n";
@@ -2470,7 +2196,6 @@ void OpYieldmat::GenSlidingWindowFunction(
ss << "double tmp004;\n\t";
ss << "double tmp005;\n\t";
-#ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= static_cast<const
formula::SingleVectorRefToken *>(tmpCur0);
@@ -2519,64 +2244,50 @@ void OpYieldmat::GenSlidingWindowFunction(
ss<< tmpCurDVR5->GetArrayLength();
ss << ";\n\t";
-#endif
-
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp000_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp000 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp000 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp001_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp001 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp001 = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp002_len || isNan(";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp002 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp002 = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp003_len || isNan(";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp003 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp003 = ";
ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp004_len || isNan(";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp004 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp004 = ";
ss << vSubArguments[4]->GenSlidingWindowDeclRef();
ss<<";\n\t";
-#ifdef ISNAN
ss<<"if(gid0>=buffer_tmp005_len || isNan(";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t";
ss<<"tmp005 = 0;\n\telse \n\t\t";
-#endif
ss<<"tmp005 = ";
ss << vSubArguments[5]->GenSlidingWindowDeclRef();
ss<<";\n\t";
@@ -2613,25 +2324,17 @@ void OpPMT::GenSlidingWindowFunction(std::stringstream &ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << "if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss <<" temp="<<vSubArguments[i]->GenSlidingWindowDeclRef();
@@ -2648,11 +2351,6 @@ void OpPMT::GenSlidingWindowFunction(std::stringstream &ss,
);
ss <<";\n";
}
-#else
- ss <<" tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef();
- ss <<";\n";
-
-#endif
}
ss<<" if(tmp0==0.0)\n";
ss<<" return -(tmp2+tmp3)/tmp1;\n";
@@ -2694,57 +2392,33 @@ void OpNPV::GenSlidingWindowFunction(std::stringstream &ss,
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << " for (int i = ";
if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << "; i++){\n";
-#else
- ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
-#endif
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
-#ifdef ISNAN
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
else {
-#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
ss << "nCount += 1;\n";
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " double temp=";
@@ -2776,12 +2450,6 @@ void OpNPV::GenSlidingWindowFunction(std::stringstream &ss,
ss << " tmp +=temp/ temp1;\n";
ss << " nCount += 1;\n";
}
-#else
- ss << "tmp +="<<vSubArguments[i]->GenSlidingWindowDeclRef();
- ss <<" / pow(1.0f+ arg0 ,";
- ss <<" (double)nCount );\n";
- ss << " nCount += 1;\n";
-#endif
}
ss << " return tmp;\n";
ss << "}";
@@ -2851,25 +2519,17 @@ void OpPrice::GenSlidingWindowFunction(std::stringstream &ss,
assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -2887,11 +2547,6 @@ void OpPrice::GenSlidingWindowFunction(std::stringstream &ss,
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
}
-#else
- ss << " tmp"<<i<<"=";
- ss<<vSubArguments[i]->GenSlidingWindowDeclRef();
- ss <<";\n";
-#endif
}
ss << " if(tmp4*tmp5 == 0) return NAN;\n";
ss << " tmp = getPrice_(tmp0,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6);\n";
@@ -2947,56 +2602,32 @@ void OpOddlprice::GenSlidingWindowFunction(std::stringstream &ss,
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << " for (int i = ";
if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << "; i++){\n";
-#else
- ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
-#endif
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
-#ifdef ISNAN
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
else {
-#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -3015,10 +2646,6 @@ void OpOddlprice::GenSlidingWindowFunction(std::stringstream &ss,
ss <<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
}
-#else
- ss << " tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef();
- ss <<";\n";
-#endif
}
ss <<" int nNullDate = GetNullDate();\n";
ss <<" tmp = GetOddlprice(nNullDate,tmp0,tmp1,";
@@ -3074,56 +2701,32 @@ void OpOddlyield::GenSlidingWindowFunction(std::stringstream &ss,
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << " for (int i = ";
if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << "; i++){\n";
-#else
- ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
-#ifdef ISNAN
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
-#endif
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
-#ifdef ISNAN
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
else {
-#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
-#else
- ss << "0; i < "<< nCurWindowSize << "; i++)\n";
-#endif
}
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
-#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
static_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
-#else
-#endif
}
else if (pCur->GetType() == formula::svDouble)
{
-#ifdef ISNAN
ss << "{\n";
-#endif
}
else
{
-#ifdef ISNAN
-#endif
}
-#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
@@ -3142,10 +2745,6 @@ void OpOddlyield::GenSlidingWindowFunction(std::stringstream &ss,
ss <<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
}
-#else
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list