Fix non-x86 builds
I've just reverted some code what it was in 5.5 by wrapping new x86
specific bits with #if's, e.g.:
- CPUID is x86 specific
- mwait is x86 specific
Change-Id: I6cefae34282c777c7340daf3f934d2a11742502e
Signed-off-by: Jeremy Newton <Jeremy.Newton@amd.com>
[ROCm/ROCR-Runtime commit: 132a19e9c3]
This commit is contained in:
@@ -127,7 +127,12 @@ target_include_directories( ${CORE_RUNTIME_TARGET}
|
||||
|
||||
|
||||
## ------------------------- Linux Compiler and Linker options -------------------------
|
||||
set ( HSA_CXX_FLAGS ${HSA_COMMON_CXX_FLAGS} -fexceptions -fno-rtti -fvisibility=hidden -Wno-error=missing-braces -Wno-error=sign-compare -Wno-sign-compare -Wno-write-strings -Wno-conversion-null -fno-math-errno -fno-threadsafe-statics -fmerge-all-constants -fms-extensions -Wno-error=comment -Wno-comment -Wno-error=pointer-arith -Wno-pointer-arith -Wno-error=unused-variable -Wno-error=unused-function -mmwaitx )
|
||||
set ( HSA_CXX_FLAGS ${HSA_COMMON_CXX_FLAGS} -fexceptions -fno-rtti -fvisibility=hidden -Wno-error=missing-braces -Wno-error=sign-compare -Wno-sign-compare -Wno-write-strings -Wno-conversion-null -fno-math-errno -fno-threadsafe-statics -fmerge-all-constants -fms-extensions -Wno-error=comment -Wno-comment -Wno-error=pointer-arith -Wno-pointer-arith -Wno-error=unused-variable -Wno-error=unused-function )
|
||||
|
||||
## Extra x86 specific settings
|
||||
if ( CMAKE_SYSTEM_PROCESSOR MATCHES "i?86|x86_64|amd64|AMD64" )
|
||||
set ( HSA_CXX_FLAGS ${HSA_CXX_FLAGS} -mmwaitx )
|
||||
endif()
|
||||
|
||||
## Extra image settings - audit!
|
||||
set ( HSA_CXX_FLAGS ${HSA_CXX_FLAGS} -Wno-deprecated-declarations )
|
||||
|
||||
@@ -42,9 +42,11 @@
|
||||
|
||||
#include "core/inc/default_signal.h"
|
||||
#include "core/util/timer.h"
|
||||
#include <mwaitxintrin.h>
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
#include <mwaitxintrin.h>
|
||||
#define MWAITX_ECX_TIMER_ENABLE 0x2 // BIT(1)
|
||||
#endif
|
||||
|
||||
namespace rocr {
|
||||
namespace core {
|
||||
@@ -103,7 +105,9 @@ hsa_signal_value_t BusyWaitSignal::WaitRelaxed(hsa_signal_condition_t condition,
|
||||
timer::duration_from_seconds<timer::fast_clock::duration>(
|
||||
double(timeout) / double(hsa_freq));
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (g_use_mwaitx) _mm_monitorx(const_cast<int64_t*>(&signal_.value), 0, 0);
|
||||
#endif
|
||||
|
||||
while (true) {
|
||||
if (!IsValid()) return 0;
|
||||
@@ -138,11 +142,13 @@ hsa_signal_value_t BusyWaitSignal::WaitRelaxed(hsa_signal_condition_t condition,
|
||||
return hsa_signal_value_t(value);
|
||||
}
|
||||
|
||||
if (time - start_time > kMaxElapsed)
|
||||
if (time - start_time > kMaxElapsed) {
|
||||
os::uSleep(20);
|
||||
else if (g_use_mwaitx) {
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
} else if (g_use_mwaitx) {
|
||||
_mm_mwaitx(0, 60000, MWAITX_ECX_TIMER_ENABLE); // 60000 ~20us on a 1.5Ghz CPU
|
||||
_mm_monitorx(const_cast<int64_t*>(&signal_.value), 0, 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,9 +44,11 @@
|
||||
#include "core/inc/runtime.h"
|
||||
#include "core/util/timer.h"
|
||||
#include "core/util/locks.h"
|
||||
#include <mwaitxintrin.h>
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
#include <mwaitxintrin.h>
|
||||
#define MWAITX_ECX_TIMER_ENABLE 0x2 // BIT(1)
|
||||
#endif
|
||||
|
||||
namespace rocr {
|
||||
namespace core {
|
||||
@@ -172,7 +174,10 @@ hsa_signal_value_t InterruptSignal::WaitRelaxed(
|
||||
double(timeout) / double(hsa_freq));
|
||||
|
||||
bool condition_met = false;
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (g_use_mwaitx) _mm_monitorx(const_cast<int64_t*>(&signal_.value), 0, 0);
|
||||
#endif
|
||||
|
||||
while (true) {
|
||||
if (!IsValid()) return 0;
|
||||
@@ -208,19 +213,23 @@ hsa_signal_value_t InterruptSignal::WaitRelaxed(
|
||||
}
|
||||
|
||||
if (wait_hint == HSA_WAIT_STATE_ACTIVE) {
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (g_use_mwaitx) {
|
||||
_mm_mwaitx(0, 0, 0);
|
||||
_mm_monitorx(const_cast<int64_t*>(&signal_.value), 0, 0);
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
if (time - start_time < kMaxElapsed) {
|
||||
// os::uSleep(20);
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (g_use_mwaitx) {
|
||||
_mm_mwaitx(0, 60000, MWAITX_ECX_TIMER_ENABLE);
|
||||
_mm_monitorx(const_cast<int64_t*>(&signal_.value), 0, 0);
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,9 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include "core/inc/runtime.h"
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
#include <cpuid.h>
|
||||
#endif
|
||||
|
||||
namespace rocr {
|
||||
namespace os {
|
||||
@@ -693,8 +695,8 @@ uint64_t SystemClockFrequency() {
|
||||
}
|
||||
|
||||
bool ParseCpuID(cpuid_t* cpuinfo) {
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
uint32_t eax, ebx, ecx, edx, max_eax = 0;
|
||||
|
||||
memset(cpuinfo, 0, sizeof(*cpuinfo));
|
||||
|
||||
/* Make sure current CPU supports at least EAX 4 */
|
||||
@@ -713,6 +715,9 @@ bool ParseCpuID(cpuid_t* cpuinfo) {
|
||||
}
|
||||
}
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace os
|
||||
|
||||
Viittaa uudesa ongelmassa
Block a user