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:
Jeremy Newton
2023-06-30 00:09:07 -04:00
vanhempi e80bd7f5b0
commit b3f22fef0a
4 muutettua tiedostoa jossa 31 lisäystä ja 6 poistoa
@@ -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