diff -rupN --no-dereference netgen-6.2.2007/libsrc/core/taskmanager.cpp netgen-6.2.2007-new/libsrc/core/taskmanager.cpp
--- netgen-6.2.2007/libsrc/core/taskmanager.cpp 2020-07-23 20:51:48.000000000 +0200
+++ netgen-6.2.2007-new/libsrc/core/taskmanager.cpp 2020-07-23 23:12:18.056198572 +0200
@@ -212,14 +212,22 @@ namespace ngcore
;
}
+#if defined(__i386__) || defined(__x86_64__)
static size_t calibrate_init_tsc = __rdtsc();
+#else
+ static size_t calibrate_init_tsc = clock();
+#endif
typedef std::chrono::system_clock TClock;
static TClock::time_point calibrate_init_clock = TClock::now();
void TaskManager :: StopWorkers()
{
done = true;
+#if defined(__i386__) || defined(__x86_64__)
double delta_tsc = __rdtsc()-calibrate_init_tsc;
+#else
+ double delta_tsc = clock()-calibrate_init_tsc;
+#endif
double delta_sec = std::chrono::duration<double>(TClock::now()-calibrate_init_clock).count();
double frequ = (delta_sec != 0) ? delta_tsc/delta_sec : 2.7e9;
@@ -411,8 +419,10 @@ namespace ngcore
for (int j = 0; j < num_nodes; j++)
if (workers_on_node[j])
{
+#if defined(__i386__) || defined(__x86_64__)
while (complete[j] != jobnr)
- _mm_pause();
+ _mm_pause();;
+#endif
}
func = nullptr;
diff -rupN --no-dereference netgen-6.2.2007/libsrc/core/utils.cpp netgen-6.2.2007-new/libsrc/core/utils.cpp
--- netgen-6.2.2007/libsrc/core/utils.cpp 2020-07-23 20:51:48.000000000 +0200
+++ netgen-6.2.2007-new/libsrc/core/utils.cpp 2020-07-23 23:12:18.056198572 +0200
@@ -35,6 +35,7 @@ namespace ngcore
double seconds_per_tick = [] () noexcept
{
+#if defined(__i386__) || defined(__x86_64__)
auto tick_start = GetTimeCounter();
double tstart = WallTime();
double tend = WallTime()+0.001;
@@ -46,6 +47,9 @@ namespace ngcore
tend = WallTime();
return (tend-tstart)/static_cast<double>(tick_end-tick_start);
+#else
+ return 1. / CLOCKS_PER_SEC;
+#endif
}();
const std::chrono::time_point<TClock> wall_time_start = TClock::now();
diff -rupN --no-dereference netgen-6.2.2007/libsrc/core/utils.hpp netgen-6.2.2007-new/libsrc/core/utils.hpp
--- netgen-6.2.2007/libsrc/core/utils.hpp 2020-07-23 20:51:48.000000000 +0200
+++ netgen-6.2.2007-new/libsrc/core/utils.hpp 2020-07-23 23:12:18.056198572 +0200
@@ -11,7 +11,11 @@
#ifdef WIN32
#include <intrin.h> // for __rdtsc() CPU time step counter
#else
-#include <x86intrin.h> // for __rdtsc() CPU time step counter
+#if defined(__i386__) || defined(__x86_64__)
+# include <x86intrin.h> // for __rdtsc() CPU time step counter
+#else
+# include <ctime>
+#endif
#endif // WIN32
#include "ngcore_api.hpp" // for NGCORE_API
@@ -52,7 +56,11 @@ namespace ngcore
inline TTimePoint GetTimeCounter() noexcept
{
+#if defined(__i386__) || defined(__x86_64__)
return TTimePoint(__rdtsc());
+#else
+ return TTimePoint(clock());
+#endif
}
template <class T>
@@ -161,7 +169,9 @@ namespace ngcore
while (!m.compare_exchange_weak(should, true))
{
should = false;
+#if defined(__i386__) || defined(__x86_64__)
_mm_pause();
+#endif
}
}
void unlock()
diff -rupN --no-dereference netgen-6.2.2007/libsrc/general/ngsimd.hpp netgen-6.2.2007-new/libsrc/general/ngsimd.hpp
--- netgen-6.2.2007/libsrc/general/ngsimd.hpp 2020-07-23 20:51:48.000000000 +0200
+++ netgen-6.2.2007-new/libsrc/general/ngsimd.hpp 2020-07-23 23:12:18.057198572 +0200
@@ -6,7 +6,9 @@
/* Date: 25. Mar. 16 */
/**************************************************************************/
-#include <immintrin.h>
+#if defined(__i386__) || defined(__x86_64__)
+# include <immintrin.h>
+#endif
#include <tuple>
#include <ostream>
#include <stdexcept>