//\r
// Make sure we are useing the correct packing rules per EFI specification\r
//\r
+#ifndef __GNUC__\r
#pragma pack()\r
-\r
+#endif\r
\r
#if _MSC_EXTENSIONS \r
\r
#endif\r
\r
\r
-#if (__STDC_VERSION__ < 199901L)\r
+#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
//\r
// No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
//\r
//\r
// Processor specific defines\r
//\r
-#define MAX_BIT 0x8000000000000000\r
-#define MAX_2_BITS 0xC000000000000000\r
+#define MAX_BIT 0x8000000000000000ULL\r
+#define MAX_2_BITS 0xC000000000000000ULL\r
\r
//\r
-// Maximum legal Itanium-based address\r
+// Maximum legal X64 address\r
//\r
-#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF\r
+#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFFULL\r
+\r
+//\r
+// The stack alignment required for X64\r
+//\r
+#define CPU_STACK_ALIGNMENT 16\r
\r
//\r
// Modifier to ensure that all protocol member functions and EFI intrinsics\r
#elif __GNUC__\r
///\r
/// Define the standard calling convention reguardless of optimization level.\r
- /// efidecl is an extension to GCC that supports the differnece between x64\r
- /// GCC ABI and x64 Microsoft* ABI. EFI is closer to the Microsoft* ABI and\r
- /// EFIAPI makes sure the right ABI is used for public interfaces. \r
- /// eficecl is a work in progress and we do not yet have the compiler\r
+ /// The GCC support assumes a GCC compiler that supports the EFI ABI. The EFI\r
+ /// ABI is much closer to the x64 Microsoft* ABI than standard x64 (x86-64) \r
+ /// GCC ABI. Thus a standard x64 (x86-64) GCC compiler can not be used for \r
+ /// x64. Warning the assembly code in the MDE x64 does not follow the correct \r
+ /// ABI for the standard x64 (x86-64) GCC.\r
///\r
- #define EFIAPI __attribute__((efidecl)) \r
+ #define EFIAPI \r
#else\r
+ ///\r
+ /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI\r
+ /// is the standard. \r
+ ///\r
#define EFIAPI \r
#endif\r
\r