\r
#define _EFI_INT_SIZE_OF(n) ((sizeof (n) + sizeof (UINTN) - 1) &~(sizeof (UINTN) - 1))\r
\r
-#if defined(__GNUC__)\r
+#if defined(__CC_ARM)\r
+//\r
+// RVCT ARM variable argument list support.\r
+//\r
+\r
+///\r
+/// Variable used to traverse the list of arguments. This type can vary by \r
+/// implementation and could be an array or structure. \r
+///\r
+#ifdef __APCS_ADSABI\r
+ typedef int *va_list[1];\r
+ #define VA_LIST va_list\r
+#else\r
+ typedef struct __va_list { void *__ap; } va_list;\r
+ #define VA_LIST va_list\r
+#endif\r
+\r
+#define VA_START(Marker, Parameter) __va_start(Marker, Parameter)\r
+\r
+#define VA_ARG(Marker, TYPE) __va_arg(Marker, TYPE)\r
+\r
+#define VA_END(Marker) ((void)0)\r
+\r
+#define VA_COPY(Dest, Start) __va_copy (Dest, Start)\r
+\r
+#elif defined(__GNUC__)\r
//\r
// Use GCC built-in macros for variable argument lists.\r
//\r
\r
#define VA_END(Marker) __builtin_va_end (Marker)\r
\r
+#define VA_COPY(Dest, Start) __builtin_va_copy (Dest, Start)\r
+\r
#else\r
\r
//\r
#define VA_START(ap, v) (ap = (VA_LIST) & (v) + _EFI_INT_SIZE_OF (v))\r
#define VA_ARG(ap, t) (*(t *) ((ap += _EFI_INT_SIZE_OF (t)) - _EFI_INT_SIZE_OF (t)))\r
#define VA_END(ap) (ap = (VA_LIST) 0)\r
+#define VA_COPY(dest, src) ((void)((dest) = (src)))\r
\r
#endif\r
\r