Mon Oct 8 20:27:50 CEST 2001 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / mono-endian.h
1 #ifndef _MONO_METADATA_ENDIAN_H_
2 #define _MONO_METADATA_ENDIAN_H_ 1
3
4 #include <glib.h>
5
6 typedef union {
7         guint32 ival;
8         float fval;
9 } mono_rfloat;
10
11 typedef union {
12         guint64 ival;
13         double fval;
14 } mono_rdouble;
15
16 #if NO_UNALIGNED_ACCESS
17
18 #define read16(x) (mono_read16 ((x)))
19 #define read32(x) (mono_read32 ((x)))
20 #define read64(x) (mono_read64 ((x)))
21
22 #else
23
24 #define read16(x) GUINT16_FROM_LE (*((guint16 *) (x)))
25 #define read32(x) GUINT32_FROM_LE (*((guint32 *) (x)))
26 #define read64(x) GUINT64_FROM_LE (*((guint64 *) (x)))
27
28 #endif
29
30 #define readr4(x,dest)  \
31         do {    \
32                 mono_rfloat mf; \
33                 mf.ival = read32 ((x)); \
34                 *(dest) = mf.fval;      \
35         } while (0)
36
37 #define readr8(x,dest)  \
38         do {    \
39                 mono_rdouble mf;        \
40                 mf.ival = read64 ((x)); \
41                 *(dest) = mf.fval;      \
42         } while (0)
43
44 #endif /* _MONO_METADATA_ENDIAN_H_ */