diff options
Diffstat (limited to 'MdePkg/Library/BaseLib/Ia32/GccInline.c')
-rw-r--r-- | MdePkg/Library/BaseLib/Ia32/GccInline.c | 168 |
1 files changed, 81 insertions, 87 deletions
diff --git a/MdePkg/Library/BaseLib/Ia32/GccInline.c b/MdePkg/Library/BaseLib/Ia32/GccInline.c index 68d56754d2b8..6227c64ca8f7 100644 --- a/MdePkg/Library/BaseLib/Ia32/GccInline.c +++ b/MdePkg/Library/BaseLib/Ia32/GccInline.c @@ -1,15 +1,9 @@ /** @file GCC inline implementation of BaseLib processor specific functions. - - Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> - 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 - http://opensource.org/licenses/bsd-license.php. - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> + Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -32,7 +26,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"); } @@ -65,7 +59,7 @@ EFIAPI DisableInterrupts ( VOID ) -{ +{ __asm__ __volatile__ ("cli"::: "memory"); } @@ -128,13 +122,13 @@ AsmReadMsr64 ( ) { UINT64 Data; - + __asm__ __volatile__ ( "rdmsr" : "=A" (Data) // %0 : "c" (Index) // %1 ); - + return Data; } @@ -168,7 +162,7 @@ AsmWriteMsr64 ( : "c" (Index), "A" (Value) ); - + return Value; } @@ -191,13 +185,13 @@ AsmReadEflags ( ) { UINTN Eflags; - + __asm__ __volatile__ ( "pushfl \n\t" "popl %0 " : "=r" (Eflags) ); - + return Eflags; } @@ -220,12 +214,12 @@ AsmReadCr0 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "movl %%cr0,%0" + "movl %%cr0,%0" : "=a" (Data) ); - + return Data; } @@ -247,12 +241,12 @@ AsmReadCr2 ( ) { UINTN Data; - + __asm__ __volatile__ ( - "movl %%cr2, %0" + "movl %%cr2, %0" : "=r" (Data) ); - + return Data; } @@ -273,12 +267,12 @@ AsmReadCr3 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%cr3, %0" : "=r" (Data) ); - + return Data; } @@ -300,12 +294,12 @@ AsmReadCr4 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%cr4, %0" : "=a" (Data) ); - + return Data; } @@ -431,12 +425,12 @@ AsmReadDr0 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr0, %0" : "=r" (Data) ); - + return Data; } @@ -458,12 +452,12 @@ AsmReadDr1 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr1, %0" : "=r" (Data) ); - + return Data; } @@ -485,12 +479,12 @@ AsmReadDr2 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr2, %0" : "=r" (Data) ); - + return Data; } @@ -512,12 +506,12 @@ AsmReadDr3 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr3, %0" : "=r" (Data) ); - + return Data; } @@ -539,12 +533,12 @@ AsmReadDr4 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr4, %0" : "=r" (Data) ); - + return Data; } @@ -566,12 +560,12 @@ AsmReadDr5 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr5, %0" : "=r" (Data) ); - + return Data; } @@ -593,12 +587,12 @@ AsmReadDr6 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr6, %0" : "=r" (Data) ); - + return Data; } @@ -620,12 +614,12 @@ AsmReadDr7 ( ) { UINTN Data; - + __asm__ __volatile__ ( "movl %%dr7, %0" : "=r" (Data) ); - + return Data; } @@ -854,12 +848,12 @@ AsmReadCs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%cs, %0" :"=a" (Data) ); - + return Data; } @@ -880,12 +874,12 @@ AsmReadDs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%ds, %0" :"=a" (Data) ); - + return Data; } @@ -906,12 +900,12 @@ AsmReadEs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%es, %0" :"=a" (Data) ); - + return Data; } @@ -932,12 +926,12 @@ AsmReadFs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%fs, %0" :"=a" (Data) ); - + return Data; } @@ -958,12 +952,12 @@ AsmReadGs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%gs, %0" :"=a" (Data) ); - + return Data; } @@ -984,12 +978,12 @@ AsmReadSs ( ) { UINT16 Data; - + __asm__ __volatile__ ( "mov %%ds, %0" :"=a" (Data) ); - + return Data; } @@ -1010,12 +1004,12 @@ AsmReadTr ( ) { UINT16 Data; - + __asm__ __volatile__ ( "str %0" : "=a" (Data) ); - + return Data; } @@ -1062,7 +1056,7 @@ InternalX86WriteGdtr ( : : "m" (*Gdtr) ); - + } @@ -1127,12 +1121,12 @@ AsmReadLdtr ( ) { UINT16 Data; - + __asm__ __volatile__ ( "sldt %0" : "=g" (Data) // %0 ); - + return Data; } @@ -1180,7 +1174,7 @@ InternalX86FxSave ( "fxsave %0" : : "m" (*Buffer) // %0 - ); + ); } @@ -1233,7 +1227,7 @@ AsmReadMm0 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1263,7 +1257,7 @@ AsmReadMm1 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1293,7 +1287,7 @@ AsmReadMm2 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1323,7 +1317,7 @@ AsmReadMm3 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1353,7 +1347,7 @@ AsmReadMm4 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1383,7 +1377,7 @@ AsmReadMm5 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1413,7 +1407,7 @@ AsmReadMm6 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1443,7 +1437,7 @@ AsmReadMm7 ( "pop %%edx \n\t" : "=A" (Data) // %0 ); - + return Data; } @@ -1465,7 +1459,7 @@ AsmWriteMm0 ( { __asm__ __volatile__ ( "movq %0, %%mm0" // %0 - : + : : "m" (Value) ); } @@ -1488,7 +1482,7 @@ AsmWriteMm1 ( { __asm__ __volatile__ ( "movq %0, %%mm1" // %0 - : + : : "m" (Value) ); } @@ -1511,7 +1505,7 @@ AsmWriteMm2 ( { __asm__ __volatile__ ( "movq %0, %%mm2" // %0 - : + : : "m" (Value) ); } @@ -1534,7 +1528,7 @@ AsmWriteMm3 ( { __asm__ __volatile__ ( "movq %0, %%mm3" // %0 - : + : : "m" (Value) ); } @@ -1557,7 +1551,7 @@ AsmWriteMm4 ( { __asm__ __volatile__ ( "movq %0, %%mm4" // %0 - : + : : "m" (Value) ); } @@ -1580,7 +1574,7 @@ AsmWriteMm5 ( { __asm__ __volatile__ ( "movq %0, %%mm5" // %0 - : + : : "m" (Value) ); } @@ -1603,7 +1597,7 @@ AsmWriteMm6 ( { __asm__ __volatile__ ( "movq %0, %%mm6" // %0 - : + : : "m" (Value) ); } @@ -1626,7 +1620,7 @@ AsmWriteMm7 ( { __asm__ __volatile__ ( "movq %0, %%mm7" // %0 - : + : : "m" (Value) ); } @@ -1648,13 +1642,13 @@ AsmReadTsc ( ) { UINT64 Data; - + __asm__ __volatile__ ( "rdtsc" : "=A" (Data) ); - - return Data; + + return Data; } @@ -1676,14 +1670,14 @@ AsmReadPmc ( ) { UINT64 Data; - + __asm__ __volatile__ ( "rdpmc" : "=A" (Data) : "c" (Index) ); - - return Data; + + return Data; } @@ -1720,7 +1714,7 @@ AsmInvd ( ) { __asm__ __volatile__ ("invd":::"memory"); - + } @@ -1748,7 +1742,7 @@ AsmFlushCacheLine ( UINT32 RegEdx; // - // If the CPU does not support CLFLUSH instruction, + // If the CPU does not support CLFLUSH instruction, // then promote flush range to flush entire cache. // AsmCpuid (0x01, NULL, NULL, NULL, &RegEdx); @@ -1760,11 +1754,11 @@ AsmFlushCacheLine ( __asm__ __volatile__ ( "clflush (%0)" - : "+a" (LinearAddress) - : + : "+a" (LinearAddress) + : : "memory" ); - + return LinearAddress; } |