Kaydet (Commit) 9558470f authored tarafından fengzeng's avatar fengzeng Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: implemented for TRUNC

AMLOEXT-84FIX

Change-Id: I7beda717815da9287aaf7f449c8dfa93bde66f9c
Signed-off-by: 's avatarhaochen <haochen@multicorewareinc.com>
Signed-off-by: 's avatarI-Jui (Ray) Sung <ray@multicorewareinc.com>
üst e8d98085
...@@ -1297,6 +1297,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments( ...@@ -1297,6 +1297,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(
mvSubArguments.push_back(SoPHelper(ts, mvSubArguments.push_back(SoPHelper(ts,
ft->Children[i], new OpMod)); ft->Children[i], new OpMod));
break; break;
case ocTrunc:
mvSubArguments.push_back(SoPHelper(ts,
ft->Children[i], new OpTrunc));
break;
case ocExternal: case ocExternal:
if ( !(pChild->GetExternal().compareTo(OUString( if ( !(pChild->GetExternal().compareTo(OUString(
"com.sun.star.sheet.addin.Analysis.getEffect")))) "com.sun.star.sheet.addin.Analysis.getEffect"))))
......
...@@ -1217,7 +1217,84 @@ void OpOdd::GenSlidingWindowFunction( ...@@ -1217,7 +1217,84 @@ void OpOdd::GenSlidingWindowFunction(
ss << " return tmp;\n"; ss << " return tmp;\n";
ss << "}"; ss << "}";
} }
void OpTrunc::GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments)
{
ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"(";
for (unsigned i = 0; i < vSubArguments.size(); i++)
{
if (i)
ss << ",";
vSubArguments[i]->GenSlidingWindowDecl(ss);
}
ss << ")\n";
ss << "{\n";
ss << " int gid0=get_global_id(0);\n";
ss << " double arg[2];\n";
for( unsigned i=0; i < vSubArguments.size(); ++i)
{
FormulaToken *tmpCur = vSubArguments[i]->GetFormulaToken();
assert(tmpCur);
if(ocPush == vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
if(tmpCur->GetType() == formula::svDoubleVectorRef)
{
const formula::DoubleVectorRefToken* tmpCurDVR =
dynamic_cast<
const formula::DoubleVectorRefToken *>(tmpCur);
ss << " int i = 0;\n";
ss << " arg["<<i<<"] = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
#ifdef ISNAN
ss << " if(isNan(arg["<<i;
ss << "])||(gid0>=";
ss << tmpCurDVR->GetArrayLength();
ss << "))\n";
ss << " arg["<<i;
ss << "] = 0;\n";
#endif
}
else if(tmpCur->GetType() == formula::svSingleVectorRef)
{
const formula::SingleVectorRefToken* tmpCurDVR=
dynamic_cast<
const formula::SingleVectorRefToken *>(tmpCur);
ss << " arg["<<i<<"] = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
#ifdef ISNAN
ss << " if(isNan(arg["<<i;
ss << "])||(gid0>=";
ss << tmpCurDVR->GetArrayLength();
ss << "))\n";
ss << " arg["<<i;
ss << "] = 0;\n";
#endif
}
else if(tmpCur->GetType() == formula::svDouble)
{
ss << " arg["<<i<<"] = ";
ss << tmpCur->GetDouble() << ";\n";
}
}
else
{
ss << " arg["<<i<<"] = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
}
}
ss << " int n = (int)arg[1];\n";
ss << " int nn = 1;\n";
ss << " for(int i=0; i<n; ++i)\n";
ss << " nn *= 10;\n";
ss << " n = (int)(arg[0] * nn);\n";
ss << " arg[0] = (double)n / nn;\n";
ss << " return arg[0];\n";
ss << "}";
}
void OpFloor::GenSlidingWindowFunction( void OpFloor::GenSlidingWindowFunction(
std::stringstream &ss, const std::string sSymName, std::stringstream &ss, const std::string sSymName,
SubArguments &vSubArguments) SubArguments &vSubArguments)
......
...@@ -132,6 +132,14 @@ public: ...@@ -132,6 +132,14 @@ public:
virtual std::string GetBottom(void) { return "0.0"; } virtual std::string GetBottom(void) { return "0.0"; }
virtual std::string BinFuncName(void) const { return "ScASinH"; } virtual std::string BinFuncName(void) const { return "ScASinH"; }
}; };
class OpTrunc: public Normal
{
public:
virtual void GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments);
virtual std::string BinFuncName(void) const { return "Trunc"; }
};
class OpArcTan:public Normal{ class OpArcTan:public Normal{
public: public:
virtual void GenSlidingWindowFunction(std::stringstream &ss, virtual void GenSlidingWindowFunction(std::stringstream &ss,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment