archSimsolaris.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* archSimsparc.h - simsparc specific header */
  2. /* Copyright 1993-95 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,13mar01,sn   SPR 73723 - define supported toolchains
  7. 01c,29jul98,ms   added WV_INSTRUMENTATION
  8. 01b,16dec96,yp   va_start now passes LASTARG to builtin_next_arg
  9. 01a,07jun95,ism  derived from simsparc
  10. */
  11.  /* XXX -- change all h files sparc to solaris */
  12. #ifndef __INCarchSimsparch
  13. #define __INCarchSimsparch
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #define _ARCH_SUPPORTS_GCC
  18. #define WV_INSTRUMENTATION
  19. #define _ALLOC_ALIGN_SIZE 8 /* 8-byte alignment */
  20. #define _STACK_ALIGN_SIZE 8 /* 8-byte alignment */
  21. #define _DYNAMIC_BUS_SIZING FALSE /* no dynamic bus sizing */
  22. /* defines for stdarg.h */
  23. /* Amount of space required in an argument list for an arg of type TYPE.
  24.    TYPE may alternatively be an expression whose type is used.  */
  25. #define __va_rounded_size(TYPE)  
  26.   (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
  27. #if     CPU==SIMSPARCSOLARIS
  28. #ifdef  __GNUC__
  29. #ifndef __sparc__
  30. #define __sparc__
  31. #endif  /* __sparc__ */
  32. #endif  /* __GNUC__ */
  33. #endif  /* CPU==SIMSPARCSOLARIS */
  34. #ifndef __sparc__
  35. #define _ARCH_va_start(AP, LASTARG)                                     
  36.  (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
  37. #else
  38. #define _ARCH_va_start(AP, LASTARG)                                     
  39.   (__builtin_saveregs (), AP = ((char *) __builtin_next_arg (LASTARG)))
  40. #endif
  41. #define _ARCH_va_end(AP)
  42. /* Avoid errors if compiling GCC v2 with GCC v1.  */
  43. #if __GNUC__ == 1
  44. #define __extension__
  45. #endif
  46. /* RECORD_TYPE args passed using the C calling convention are
  47.    passed by invisible reference.  ??? RECORD_TYPE args passed
  48.    in the stack are made to be word-aligned; for an aggregate that is
  49.    not word-aligned, we advance the pointer to the first non-reg slot.  */
  50. #define _ARCH_va_arg(pvar,TYPE)
  51. __extension__
  52. ({ TYPE __va_temp;
  53.    ((__builtin_classify_type (__va_temp) >= 12)
  54.     ? ((pvar) += __va_rounded_size (TYPE *),
  55.        **(TYPE **) ((pvar) - __va_rounded_size (TYPE *)))
  56.     : __va_rounded_size (TYPE) == 8
  57.     ? ({ union {TYPE d; int i[2];} u;
  58.  u.i[0] = ((int *) (pvar))[0];
  59.  u.i[1] = ((int *) (pvar))[1];
  60.  (pvar) += 8;
  61.  u.d; })
  62.     : ((pvar) += __va_rounded_size (TYPE),
  63.        *((TYPE *) ((pvar) - __va_rounded_size (TYPE)))));})
  64. #ifdef __cplusplus
  65. }
  66. #endif
  67. #endif /* __INCarchSimsparch */