virtual ~Context_base() = 0;
protected:
+ friend Cpu_number &__cpu_of(const void *);
Mword _state;
+ Cpu_number _cpu;
};
-//---------------------------------------------------------------------------
-INTERFACE [mp]:
-
-EXTENSION class Context_base
-{
-protected:
- friend unsigned &__cpu_of(const void *);
- unsigned _cpu;
-};
-
-//---------------------------------------------------------------------------
-IMPLEMENTATION [!mp]:
-
-inline
-void set_cpu_of(const void *ptr, unsigned cpu)
-{ (void)ptr; (void)cpu; }
-
-inline
-unsigned cpu_of(const void *)
-{ return 0; }
-
-inline
-unsigned current_cpu()
-{ return 0; }
//---------------------------------------------------------------------------
IMPLEMENTATION:
Context *current()
{ return context_of((void *)Proc::stack_pointer()); }
-//---------------------------------------------------------------------------
-IMPLEMENTATION [mp]:
-
-#include "config.h"
-
inline NEEDS ["config.h"]
-unsigned &__cpu_of(const void *ptr)
+Cpu_number &__cpu_of(const void *ptr)
{ return reinterpret_cast<Context_base*>(context_of(ptr))->_cpu; }
inline NEEDS [__cpu_of]
-void set_cpu_of(const void *ptr, unsigned cpu)
+void set_cpu_of(const void *ptr, Cpu_number cpu)
{ __cpu_of(ptr) = cpu; }
inline NEEDS [__cpu_of]
-unsigned cpu_of(const void *ptr)
+Cpu_number cpu_of(const void *ptr)
{ return __cpu_of(ptr); }
+//---------------------------------------------------------------------------
+IMPLEMENTATION [!mp]:
+
+inline
+Cpu_number current_cpu()
+{ return Cpu_number::boot_cpu(); }
+
+//---------------------------------------------------------------------------
+IMPLEMENTATION [mp]:
+
inline NEEDS [current, cpu_of]
-unsigned current_cpu()
+Cpu_number current_cpu()
{ return cpu_of(current()); }