|
@@ -6,7 +6,9 @@
|
|
|
#include "OpenClInternal.h"
|
|
|
#include "OpenClCode.h"
|
|
|
|
|
|
+#ifdef WITH_ASMJIT
|
|
|
#include <asmjit/asmjit.h>
|
|
|
+#endif // WITH_ASMJIT
|
|
|
|
|
|
#include <map>
|
|
|
|
|
@@ -44,6 +46,7 @@ static const std::map<mnd::GeneratorType, std::string> typeNames =
|
|
|
{ mnd::GeneratorType::DOUBLE_DOUBLE, "double double" },
|
|
|
{ mnd::GeneratorType::DOUBLE_DOUBLE_AVX, "double double AVX" },
|
|
|
{ mnd::GeneratorType::DOUBLE_DOUBLE_AVX_FMA, "double double AVX+FMA" },
|
|
|
+ { mnd::GeneratorType::DOUBLE_DOUBLE_NEON, "double double NEON" },
|
|
|
{ mnd::GeneratorType::QUAD_DOUBLE, "quad double" },
|
|
|
{ mnd::GeneratorType::FLOAT128, "float128" },
|
|
|
{ mnd::GeneratorType::FLOAT256, "float256" },
|
|
@@ -112,8 +115,10 @@ bool MandelDevice::supportsDouble(void) const
|
|
|
}
|
|
|
|
|
|
|
|
|
-MandelContext::MandelContext(void) :
|
|
|
- jitRuntime{ std::make_unique<asmjit::JitRuntime>() }
|
|
|
+MandelContext::MandelContext(void)
|
|
|
+#ifdef WITH_ASMJIT
|
|
|
+ : jitRuntime{ std::make_unique<asmjit::JitRuntime>() }
|
|
|
+#endif // WITH_ASMJIT
|
|
|
{
|
|
|
|
|
|
#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86)
|
|
@@ -151,8 +156,10 @@ MandelContext::MandelContext(void) :
|
|
|
if (cpuInfo.hasNeon()) {
|
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::ARM_NEON, true>>();
|
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::ARM_NEON, true>>();
|
|
|
+ auto ddb = std::make_unique<CpuGenerator<mnd::DoubleDouble, mnd::ARM_NEON, true>>();
|
|
|
cpuGenerators.insert({ GeneratorType::FLOAT_NEON, std::move(fl) });
|
|
|
cpuGenerators.insert({ GeneratorType::DOUBLE_NEON, std::move(db) });
|
|
|
+ cpuGenerators.insert({ GeneratorType::DOUBLE_DOUBLE_NEON, std::move(ddb) });
|
|
|
}
|
|
|
#endif
|
|
|
{
|
|
@@ -218,6 +225,7 @@ std::unique_ptr<mnd::AdaptiveGenerator> MandelContext::createAdaptiveGenerator(v
|
|
|
if (cpuInfo.hasNeon()) {
|
|
|
floatGen = getCpuGenerator(GeneratorType::FLOAT_NEON);
|
|
|
doubleGen = getCpuGenerator(GeneratorType::DOUBLE_NEON);
|
|
|
+ doubleDoubleGen = getCpuGenerator(GeneratorType::DOUBLE_DOUBLE_NEON);
|
|
|
}
|
|
|
|
|
|
if (!devices.empty()) {
|