X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=ntoskrnl%2Finclude%2Finternal%2Famd64%2Fintrin_i.h;h=97072c3fd94444a613eca7bc7142b53d52087516;hp=bbfaff7e251938601ee108d44b35226bb688b026;hb=HEAD;hpb=f44e914e80a6b0890e1e7c0abe4568f070a8f8cf diff --git a/ntoskrnl/include/internal/amd64/intrin_i.h b/ntoskrnl/include/internal/amd64/intrin_i.h index bbfaff7e251..07b73fac030 100644 --- a/ntoskrnl/include/internal/amd64/intrin_i.h +++ b/ntoskrnl/include/internal/amd64/intrin_i.h @@ -1,22 +1,22 @@ #ifndef _INTRIN_INTERNAL_ #define _INTRIN_INTERNAL_ -VOID FORCEINLINE +VOID KeSetCurrentIrql(KIRQL Irql) { __writecr8(Irql); } -PKGDTENTRY64 FORCEINLINE +PKGDTENTRY64 KiGetGdtEntry(PVOID pGdt, USHORT Selector) { return (PKGDTENTRY64)((ULONG64)pGdt + (Selector & ~RPL_MASK)); } -PVOID FORCEINLINE +PVOID KiGetGdtDescriptorBase(PKGDTENTRY Entry) { return (PVOID)((ULONG64)Entry->BaseLow | @@ -25,8 +25,8 @@ KiGetGdtDescriptorBase(PKGDTENTRY Entry) (ULONG64)Entry->BaseUpper << 32); } -VOID FORCEINLINE +VOID KiSetGdtDescriptorBase(PKGDTENTRY Entry, ULONG64 Base) { Entry->BaseLow = Base & 0xffff; @@ -35,16 +35,16 @@ KiSetGdtDescriptorBase(PKGDTENTRY Entry, ULONG64 Base) Entry->BaseUpper = Base >> 32; } -VOID FORCEINLINE +VOID KiSetGdtDescriptorLimit(PKGDTENTRY Entry, ULONG Limit) { Entry->LimitLow = Limit & 0xffff; Entry->Bits.LimitHigh = Limit >> 16; } -VOID FORCEINLINE +VOID KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Size, UCHAR Type, UCHAR Dpl) { KiSetGdtDescriptorBase(Entry, Base); @@ -81,16 +81,6 @@ static __inline__ __attribute__((always_inline)) void __sldt(void *Destination) __asm__ __volatile__("sldt %0" : : "m"(*(short*)Destination) : "memory"); } -static __inline__ __attribute__((always_inline)) void __ldmxcsr(unsigned long *Source) -{ - __asm__ __volatile__("ldmxcsr %0" : : "m"(*Source)); -} - -static __inline__ __attribute__((always_inline)) void __stmxcsr(unsigned long *Destination) -{ - __asm__ __volatile__("stmxcsr %0" : : "m"(*Destination) : "memory"); -} - static __inline__ __attribute__((always_inline)) void __ltr(unsigned short Source) { __asm__ __volatile__("ltr %0" : : "rm"(Source)); @@ -101,6 +91,10 @@ static __inline__ __attribute__((always_inline)) void __str(unsigned short *Dest __asm__ __volatile__("str %0" : : "m"(*Destination) : "memory"); } +static __inline__ __attribute__((always_inline)) void __swapgs(void) +{ + __asm__ __volatile__("swapgs" : : : "memory"); +} #elif defined(_MSC_VER) @@ -116,6 +110,7 @@ void __ltr(unsigned short Source); void __str(unsigned short *Destination); +void __swapgs(void); #else #error Unknown compiler for inline assembler