On Fri, 18 Sep 2009 15:23:40 -0700
"Sean Hefty" <[email protected]> wrote:

> >Rough hack.  Does windows have stdint.h, byteswap.h, and endian.h?
> 
> If not, adding the headers with the needed definitions is trivial.
> 
> >+/* 16bit */
> >+#if __BYTE_ORDER == __LITTLE_ENDIAN
> >+#define CL_NTOH16( x )              (uint16_t)(             \
> >+                    (((uint16_t)(x) & 0x00FF) << 8) |               \
> >+                    (((uint16_t)(x) & 0xFF00) >> 8) )
> >+#else
> >+#define CL_NTOH16( x )      (x)
> >+#endif
> >+#define CL_HTON16                           CL_NTOH16
> >+
> >+/* 32bit */
> >+#if __BYTE_ORDER == __LITTLE_ENDIAN
> >+#define CL_NTOH32( x )              (uint32_t)(                     \
> >+                    (((uint32_t)(x) & 0x000000FF) << 24) |  \
> >+                    (((uint32_t)(x) & 0x0000FF00) << 8) |   \
> >+                    (((uint32_t)(x) & 0x00FF0000) >> 8) |   \
> >+                    (((uint32_t)(x) & 0xFF000000) >> 24) )
> >+#else
> >+#define CL_NTOH32( x )              (x)
> >+#endif
> >+#define CL_HTON32   CL_NTOH32
> >+
> >+/* 64bit */
> >+#if __BYTE_ORDER == __LITTLE_ENDIAN
> >+#define CL_NTOH64( x )              (uint64_t)(
> \
> >+                    (((uint64_t)(x) & 0x00000000000000FFULL) << 56) |
> \
> >+                    (((uint64_t)(x) & 0x000000000000FF00ULL) << 40) |
> \
> >+                    (((uint64_t)(x) & 0x0000000000FF0000ULL) << 24) |
> \
> >+                    (((uint64_t)(x) & 0x00000000FF000000ULL) << 8 ) |
> \
> >+                    (((uint64_t)(x) & 0x000000FF00000000ULL) >> 8 ) |
> \
> >+                    (((uint64_t)(x) & 0x0000FF0000000000ULL) >> 24) |
> \
> >+                    (((uint64_t)(x) & 0x00FF000000000000ULL) >> 40) |
> \
> >+                    (((uint64_t)(x) & 0xFF00000000000000ULL) >> 56) )
> >+#else
> >+#define CL_NTOH64( x )              (x)
> >+#endif
> >+#define CL_HTON64                           CL_NTOH64
> >+
> >+#if __BYTE_ORDER == __LITTLE_ENDIAN
> >+#define cl_ntoh16(x)        bswap_16(x)
> >+#define cl_hton16(x)        bswap_16(x)
> >+#define cl_ntoh32(x)        bswap_32(x)
> >+#define cl_hton32(x)        bswap_32(x)
> >+#define cl_ntoh64(x)        (uint64_t)bswap_64(x)
> >+#define cl_hton64(x)        (uint64_t)bswap_64(x)
> >+#else                               /* Big Endian */
> >+#define cl_ntoh16(x)        (x)
> >+#define cl_hton16(x)        (x)
> >+#define cl_ntoh32(x)        (x)
> >+#define cl_hton32(x)        (x)
> >+#define cl_ntoh64(x)        (x)
> >+#define cl_hton64(x)        (x)
> >+#endif
> 
> Why the different defines for cl_noth and CL_NTOH?

One is for static defines CL_NTOH and the other is for variables at run time.  
I found this code in Linux.

__bswap_constant_16
__bswap_constant_32
__bswap_constant_64

Which does the same thing, but I am not sure if they are universal or not as 
they are in <bits/byteswap.h> rather than byteswap.h

Ira

-- 
Ira Weiny
Math Programmer/Computer Scientist
Lawrence Livermore National Lab
925-423-8008
[email protected]
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to