@ -359,7 +359,7 @@ struct KernelCore::Impl {
static inline thread_local u8 host_thread_id = UINT8_MAX ;
static inline thread_local u8 host_thread_id = UINT8_MAX ;
/// Sets the host thread ID for the caller.
/// Sets the host thread ID for the caller.
LTO_NOINLINE u32 SetHostThreadId ( std : : size_t core_id ) {
u32 SetHostThreadId ( std : : size_t core_id ) {
// This should only be called during core init.
// This should only be called during core init.
ASSERT ( host_thread_id = = UINT8_MAX ) ;
ASSERT ( host_thread_id = = UINT8_MAX ) ;
@ -370,17 +370,16 @@ struct KernelCore::Impl {
}
}
/// Gets the host thread ID for the caller
/// Gets the host thread ID for the caller
LTO_NOINLINE u32 GetHostThreadId ( ) const {
u32 GetHostThreadId ( ) const {
return host_thread_id ;
return host_thread_id ;
}
}
// Gets the dummy KThread for the caller, allocating a new one if this is the first time
// Gets the dummy KThread for the caller, allocating a new one if this is the first time
LTO_NOINLINE KThread * GetHostDummyThread ( KThread * existing_thread ) {
const auto initialize { [ ] ( KThread * thread ) LTO_NOINLINE {
KThread * GetHostDummyThread ( KThread * existing_thread ) {
const auto initialize { [ ] ( KThread * thread ) {
ASSERT ( KThread : : InitializeDummyThread ( thread , nullptr ) . IsSuccess ( ) ) ;
ASSERT ( KThread : : InitializeDummyThread ( thread , nullptr ) . IsSuccess ( ) ) ;
return thread ;
return thread ;
} } ;
} } ;
thread_local KThread raw_thread { system . Kernel ( ) } ;
thread_local KThread raw_thread { system . Kernel ( ) } ;
thread_local KThread * thread = existing_thread ? existing_thread : initialize ( & raw_thread ) ;
thread_local KThread * thread = existing_thread ? existing_thread : initialize ( & raw_thread ) ;
return thread ;
return thread ;
@ -410,11 +409,11 @@ struct KernelCore::Impl {
static inline thread_local bool is_phantom_mode_for_singlecore { false } ;
static inline thread_local bool is_phantom_mode_for_singlecore { false } ;
LTO_NOINLINE bool IsPhantomModeForSingleCore ( ) const {
bool IsPhantomModeForSingleCore ( ) const {
return is_phantom_mode_for_singlecore ;
return is_phantom_mode_for_singlecore ;
}
}
LTO_NOINLINE void SetIsPhantomModeForSingleCore ( bool value ) {
void SetIsPhantomModeForSingleCore ( bool value ) {
ASSERT ( ! is_multicore ) ;
ASSERT ( ! is_multicore ) ;
is_phantom_mode_for_singlecore = value ;
is_phantom_mode_for_singlecore = value ;
}
}
@ -425,14 +424,14 @@ struct KernelCore::Impl {
static inline thread_local KThread * current_thread { nullptr } ;
static inline thread_local KThread * current_thread { nullptr } ;
LTO_NOINLINE KThread * GetCurrentEmuThread ( ) {
KThread * GetCurrentEmuThread ( ) {
if ( ! current_thread ) {
if ( ! current_thread ) {
current_thread = GetHostDummyThread ( nullptr ) ;
current_thread = GetHostDummyThread ( nullptr ) ;
}
}
return current_thread ;
return current_thread ;
}
}
LTO_NOINLINE void SetCurrentEmuThread ( KThread * thread ) {
void SetCurrentEmuThread ( KThread * thread ) {
current_thread = thread ;
current_thread = thread ;
}
}