diff --git a/sdk/xtdk/amd64/arfuncs.h b/sdk/xtdk/amd64/arfuncs.h index 6ac7a03..4cbe691 100644 --- a/sdk/xtdk/amd64/arfuncs.h +++ b/sdk/xtdk/amd64/arfuncs.h @@ -108,4 +108,8 @@ VOID ArWriteModelSpecificRegister(IN ULONG Register, IN ULONGLONG Value); +XTCDECL +VOID +ArYieldProcessor(); + #endif /* __XTDK_AMD64_ARFUNCS_H */ diff --git a/sdk/xtdk/i686/arfuncs.h b/sdk/xtdk/i686/arfuncs.h index 603240d..dbb2611 100644 --- a/sdk/xtdk/i686/arfuncs.h +++ b/sdk/xtdk/i686/arfuncs.h @@ -104,4 +104,8 @@ VOID ArWriteModelSpecificRegister(IN ULONG Register, IN ULONGLONG Value); +XTCDECL +VOID +ArYieldProcessor(); + #endif /* __XTDK_I686_ARFUNCS_H */ diff --git a/xtoskrnl/ar/amd64/cpufunc.c b/xtoskrnl/ar/amd64/cpufunc.c index 81a45aa..8698e13 100644 --- a/xtoskrnl/ar/amd64/cpufunc.c +++ b/xtoskrnl/ar/amd64/cpufunc.c @@ -592,3 +592,20 @@ ArWriteModelSpecificRegister(IN ULONG Register, "a" (Low), "d" (High)); } + +/** + * Yields a current thread running on the processor. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +ArYieldProcessor() +{ + asm volatile("pause" + : + : + : "memory"); +} diff --git a/xtoskrnl/ar/i686/cpufunc.c b/xtoskrnl/ar/i686/cpufunc.c index 76b83ac..a3c82ee 100644 --- a/xtoskrnl/ar/i686/cpufunc.c +++ b/xtoskrnl/ar/i686/cpufunc.c @@ -551,3 +551,20 @@ ArWriteModelSpecificRegister(IN ULONG Register, : "c" (Register), "A" (Value)); } + +/** + * Yields a current thread running on the processor. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +ArYieldProcessor() +{ + asm volatile("pause" + : + : + : "memory"); +}