home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Main.bin / typedefs.h < prev    next >
C/C++ Source or Header  |  1998-09-15  |  3KB  |  76 lines

  1. /*
  2.  * @(#)typedefs.h    1.16 98/07/01
  3.  *
  4.  * Copyright 1995-1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  * 
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. #ifndef    _TYPEDEFS_H_
  16. #define    _TYPEDEFS_H_
  17.  
  18. #include "typedefs_md.h"    /* for int64_t */
  19.  
  20. /*
  21.  * Macros to deal with the JavaVM's stack alignment. Many machines
  22.  * require doublewords to be double aligned.  This union is used by
  23.  * code in math.h as a more portable way do alingnment on machines
  24.  * that require it.  This union and the macros that use it came from
  25.  * Netscape.
  26.  */
  27.  
  28. typedef union Java8Str {
  29.     int32_t x[2];
  30.     double d;
  31.     int64_t l;
  32.     void *p;
  33. } Java8;
  34.  
  35.  
  36. #ifdef HAVE_ALIGNED_LONGLONGS
  37. #define GET_INT64(_t,_addr) ( ((_t).x[0] = ((int32_t*)(_addr))[0]), \
  38.                               ((_t).x[1] = ((int32_t*)(_addr))[1]), \
  39.                               (_t).l )
  40. #define SET_INT64(_t, _addr, _v) ( (_t).l = (_v),                    \
  41.                                    ((int32_t*)(_addr))[0] = (_t).x[0], \
  42.                                    ((int32_t*)(_addr))[1] = (_t).x[1] )
  43. #else
  44. #define GET_INT64(_t,_addr) (*(int64_t*)(_addr))
  45. #define SET_INT64(_t, _addr, _v) (*(int64_t*)(_addr) = (_v))
  46. #endif
  47.  
  48. /* If double's must be aligned on doubleword boundaries then define this */
  49. #ifdef HAVE_ALIGNED_DOUBLES
  50. #define GET_DOUBLE(_t,_addr) ( ((_t).x[0] = ((int32_t*)(_addr))[0]), \
  51.                                ((_t).x[1] = ((int32_t*)(_addr))[1]), \
  52.                                (_t).d )
  53. #define SET_DOUBLE(_t, _addr, _v) ( (_t).d = (_v),                    \
  54.                                     ((int32_t*)(_addr))[0] = (_t).x[0], \
  55.                                     ((int32_t*)(_addr))[1] = (_t).x[1] )
  56. #else
  57. #define GET_DOUBLE(_t,_addr) (*(double*)(_addr))
  58. #define SET_DOUBLE(_t, _addr, _v) (*(double*)(_addr) = (_v))
  59. #endif
  60.  
  61. /* If pointers are 64bits then define this */
  62. #ifdef HAVE_64BIT_POINTERS
  63. #define GET_HANDLE(_t,_addr) ( ((_t).x[0] = ((int32_t*)(_addr))[0]), \
  64.                                ((_t).x[1] = ((int32_t*)(_addr))[1]), \
  65.                                (_t).p )
  66. #define SET_HANDLE(_t, _addr, _v) ( (_t).p = (_v),                    \
  67.                                     ((int32_t*)(_addr))[0] = (_t).x[0], \
  68.                                     ((int32_t*)(_addr))[1] = (_t).x[1] )
  69. #else
  70. #define GET_HANDLE(_t,_addr) (*(JHandle*)(_addr))
  71. #define SET_HANDLE(_t, _addr, _v) (*(JHandle*)(_addr) = (_v))
  72. #endif
  73.  
  74.  
  75. #endif    /* !_TYPEDEFS_H_ */
  76.