X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseLib%2FX64%2FGccInline.c;h=1a69d152b45af8acf4b848ae020135f630a58ebe;hp=3d175ee9314e82e4eaf1669ae9602abd62111904;hb=9095d37b8fe5bfc3d02adad6ba7fd7359ebc0107;hpb=d1102dba7210b95e41d06c2338a22ba6af248645 diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c b/MdePkg/Library/BaseLib/X64/GccInline.c index 3d175ee931..1a69d152b4 100644 --- a/MdePkg/Library/BaseLib/X64/GccInline.c +++ b/MdePkg/Library/BaseLib/X64/GccInline.c @@ -1,8 +1,8 @@ /** @file GCC inline implementation of BaseLib processor specific functions. - - Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
- Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ + Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -33,7 +33,7 @@ MemoryFence ( ) { // This is a little bit of overkill and it is more about the compiler that it is - // actually processor synchronization. This is like the _ReadWriteBarrier + // actually processor synchronization. This is like the _ReadWriteBarrier // Microsoft specific intrinsic __asm__ __volatile__ ("":::"memory"); } @@ -66,7 +66,7 @@ EFIAPI DisableInterrupts ( VOID ) -{ +{ __asm__ __volatile__ ("cli"::: "memory"); } @@ -130,14 +130,14 @@ AsmReadMsr64 ( { UINT32 LowData; UINT32 HighData; - + __asm__ __volatile__ ( "rdmsr" : "=a" (LowData), // %0 "=d" (HighData) // %1 : "c" (Index) // %2 ); - + return (((UINT64)HighData) << 32) | LowData; } @@ -170,7 +170,7 @@ AsmWriteMsr64 ( LowData = (UINT32)(Value); HighData = (UINT32)(Value >> 32); - + __asm__ __volatile__ ( "wrmsr" : @@ -178,7 +178,7 @@ AsmWriteMsr64 ( "a" (LowData), "d" (HighData) ); - + return Value; } @@ -201,13 +201,13 @@ AsmReadEflags ( ) { UINTN Eflags; - + __asm__ __volatile__ ( "pushfq \n\t" "pop %0 " : "=r" (Eflags) // %0 ); - + return Eflags; } @@ -230,12 +230,12 @@ AsmReadCr0 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "mov %%cr0,%0" + "mov %%cr0,%0" : "=r" (Data) // %0 ); - + return Data; } @@ -257,12 +257,12 @@ AsmReadCr2 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "mov %%cr2, %0" + "mov %%cr2, %0" : "=r" (Data) // %0 ); - + return Data; } @@ -283,12 +283,12 @@ AsmReadCr3 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "mov %%cr3, %0" + "mov %%cr3, %0" : "=r" (Data) // %0 ); - + return Data; } @@ -310,12 +310,12 @@ AsmReadCr4 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "mov %%cr4, %0" + "mov %%cr4, %0" : "=r" (Data) // %0 ); - + return Data; } @@ -441,12 +441,12 @@ AsmReadDr0 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr0, %0" : "=r" (Data) ); - + return Data; } @@ -468,12 +468,12 @@ AsmReadDr1 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr1, %0" : "=r" (Data) ); - + return Data; } @@ -495,12 +495,12 @@ AsmReadDr2 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr2, %0" : "=r" (Data) ); - + return Data; } @@ -522,12 +522,12 @@ AsmReadDr3 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr3, %0" : "=r" (Data) ); - + return Data; } @@ -549,12 +549,12 @@ AsmReadDr4 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr4, %0" : "=r" (Data) ); - + return Data; } @@ -576,12 +576,12 @@ AsmReadDr5 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr5, %0" : "=r" (Data) ); - + return Data; } @@ -603,12 +603,12 @@ AsmReadDr6 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr6, %0" : "=r" (Data) ); - + return Data; } @@ -630,12 +630,12 @@ AsmReadDr7 ( ) { UINTN Data; - + __asm__ __volatile__ ( "mov %%dr7, %0" : "=r" (Data) ); - + return Data; } @@ -864,12 +864,12 @@ AsmReadCs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%cs, %0" :"=a" (Data) ); - + return Data; } @@ -890,12 +890,12 @@ AsmReadDs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%ds, %0" :"=a" (Data) ); - + return Data; } @@ -916,12 +916,12 @@ AsmReadEs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%es, %0" :"=a" (Data) ); - + return Data; } @@ -942,12 +942,12 @@ AsmReadFs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%fs, %0" :"=a" (Data) ); - + return Data; } @@ -968,12 +968,12 @@ AsmReadGs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%gs, %0" :"=a" (Data) ); - + return Data; } @@ -994,12 +994,12 @@ AsmReadSs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%ds, %0" :"=a" (Data) ); - + return Data; } @@ -1020,12 +1020,12 @@ AsmReadTr ( ) { UINT16 Data; - + __asm__ __volatile__ ( "str %0" : "=r" (Data) ); - + return Data; } @@ -1072,7 +1072,7 @@ InternalX86WriteGdtr ( : : "m" (*Gdtr) ); - + } @@ -1137,12 +1137,12 @@ AsmReadLdtr ( ) { UINT16 Data; - + __asm__ __volatile__ ( "sldt %0" : "=g" (Data) // %0 ); - + return Data; } @@ -1190,7 +1190,7 @@ InternalX86FxSave ( "fxsave %0" : : "m" (*Buffer) // %0 - ); + ); } @@ -1239,7 +1239,7 @@ AsmReadMm0 ( "movd %%mm0, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1265,7 +1265,7 @@ AsmReadMm1 ( "movd %%mm1, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1291,7 +1291,7 @@ AsmReadMm2 ( "movd %%mm2, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1317,7 +1317,7 @@ AsmReadMm3 ( "movd %%mm3, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1343,7 +1343,7 @@ AsmReadMm4 ( "movd %%mm4, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1369,7 +1369,7 @@ AsmReadMm5 ( "movd %%mm5, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1395,7 +1395,7 @@ AsmReadMm6 ( "movd %%mm6, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1421,7 +1421,7 @@ AsmReadMm7 ( "movd %%mm7, %0 \n\t" : "=r" (Data) // %0 ); - + return Data; } @@ -1443,7 +1443,7 @@ AsmWriteMm0 ( { __asm__ __volatile__ ( "movd %0, %%mm0" // %0 - : + : : "m" (Value) ); } @@ -1466,7 +1466,7 @@ AsmWriteMm1 ( { __asm__ __volatile__ ( "movd %0, %%mm1" // %0 - : + : : "m" (Value) ); } @@ -1489,7 +1489,7 @@ AsmWriteMm2 ( { __asm__ __volatile__ ( "movd %0, %%mm2" // %0 - : + : : "m" (Value) ); } @@ -1512,7 +1512,7 @@ AsmWriteMm3 ( { __asm__ __volatile__ ( "movd %0, %%mm3" // %0 - : + : : "m" (Value) ); } @@ -1535,7 +1535,7 @@ AsmWriteMm4 ( { __asm__ __volatile__ ( "movd %0, %%mm4" // %0 - : + : : "m" (Value) ); } @@ -1558,7 +1558,7 @@ AsmWriteMm5 ( { __asm__ __volatile__ ( "movd %0, %%mm5" // %0 - : + : : "m" (Value) ); } @@ -1581,7 +1581,7 @@ AsmWriteMm6 ( { __asm__ __volatile__ ( "movd %0, %%mm6" // %0 - : + : : "m" (Value) ); } @@ -1604,7 +1604,7 @@ AsmWriteMm7 ( { __asm__ __volatile__ ( "movd %0, %%mm7" // %0 - : + : : "m" (Value) ); } @@ -1627,14 +1627,14 @@ AsmReadTsc ( { UINT32 LowData; UINT32 HiData; - + __asm__ __volatile__ ( "rdtsc" : "=a" (LowData), "=d" (HiData) ); - - return (((UINT64)HiData) << 32) | LowData; + + return (((UINT64)HiData) << 32) | LowData; } @@ -1657,15 +1657,15 @@ AsmReadPmc ( { UINT32 LowData; UINT32 HiData; - + __asm__ __volatile__ ( "rdpmc" : "=a" (LowData), "=d" (HiData) : "c" (Index) ); - - return (((UINT64)HiData) << 32) | LowData; + + return (((UINT64)HiData) << 32) | LowData; } @@ -1700,7 +1700,7 @@ AsmMonitor ( "c" (Ecx), "d" (Edx) ); - + return Eax; } @@ -1728,12 +1728,12 @@ AsmMwait ( { __asm__ __volatile__ ( "mwait" - : + : : "a" (Eax), "c" (Ecx) ); - - return Eax; + + return Eax; } @@ -1768,7 +1768,7 @@ AsmInvd ( ) { __asm__ __volatile__ ("invd":::"memory"); - + } @@ -1796,10 +1796,10 @@ AsmFlushCacheLine ( __asm__ __volatile__ ( "clflush (%0)" : - : "r" (LinearAddress) + : "r" (LinearAddress) : "memory" ); - + return LinearAddress; }