25 #include "epicsEndian.h"
42 #if EPICS_BYTE_ORDER != EPICS_ENDIAN_BIG || EPICS_FLOAT_WORD_ORDER != EPICS_BYTE_ORDER
43 # if ! defined ( EPICS_CONVERSION_REQUIRED )
44 # define EPICS_CONVERSION_REQUIRED
54 inline void WireGet < epicsFloat64 > (
55 const epicsUInt8 * pWireSrc, epicsFloat64 & dst )
64 # if EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE
65 WireGet ( pWireSrc, tmp._u[1] );
66 WireGet ( pWireSrc + 4, tmp._u[0] );
67 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG
68 WireGet ( pWireSrc, tmp._u[0] );
69 WireGet ( pWireSrc + 4, tmp._u[1] );
71 # error unsupported floating point word order
76 #if defined ( __GNUC__ ) && ( __GNUC__ == 4 && __GNUC_MINOR__ <= 0 )
78 inline void WireGet < epicsOldString > (
81 memcpy ( dst, pWireSrc,
sizeof ( dst ) );
87 memcpy ( dst, pWireSrc,
sizeof ( dst ) );
92 inline void WireSet < epicsFloat64 > (
93 const epicsFloat64 & src, epicsUInt8 * pWireDst )
103 # if EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE
104 WireSet ( tmp._u[1], pWireDst );
105 WireSet ( tmp._u[0], pWireDst + 4 );
106 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG
107 WireSet ( tmp._u[0], pWireDst );
108 WireSet ( tmp._u[1], pWireDst + 4 );
110 # error unsupported floating point word order
114 #if defined ( __GNUC__ ) && ( __GNUC__ == 4 && __GNUC_MINOR__ <= 0 )
116 inline void WireSet < epicsOldString > (
119 memcpy ( pWireDst, src,
sizeof ( src ) );
122 inline void WireSet (
125 memcpy ( pWireDst, src,
sizeof ( src ) );
130 inline void AlignedWireGet < epicsUInt16 > (
131 const epicsUInt16 & src, epicsUInt16 & dst )
133 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE
134 dst = byteSwap ( src );
135 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG
138 # error unsupported endian type
143 inline void AlignedWireGet < epicsUInt32 > (
144 const epicsUInt32 & src, epicsUInt32 & dst )
146 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE
147 dst = byteSwap ( src );
148 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG
151 # error unsupported endian type
156 inline void AlignedWireGet < epicsFloat64 > (
157 const epicsFloat64 & src, epicsFloat64 & dst )
166 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG && EPICS_FLOAT_WORD_ORDER == EPICS_BYTE_ORDER
168 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG
171 AlignedWireGet ( tmp._u[0], tmp._u[0] );
172 AlignedWireGet ( tmp._u[1], tmp._u[1] );
174 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE
177 AlignedWireGet ( srcu._u[1], dstu._u[0] );
178 AlignedWireGet ( srcu._u[0], dstu._u[1] );
181 # error unsupported floating point word order
186 inline void AlignedWireSet < epicsUInt16 >
187 (
const epicsUInt16 & src, epicsUInt16 & dst )
189 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE
190 dst = byteSwap ( src );
191 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG
194 # error undefined endian type
199 inline void AlignedWireSet < epicsUInt32 > (
200 const epicsUInt32 & src, epicsUInt32 & dst )
202 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE
203 dst = byteSwap ( src );
204 # elif EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG
207 # error undefined endian type
212 inline void AlignedWireSet < epicsFloat64 > (
213 const epicsFloat64 & src, epicsFloat64 & dst )
222 # if EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG && EPICS_FLOAT_WORD_ORDER == EPICS_BYTE_ORDER
224 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_BIG
227 AlignedWireSet ( tmp._u[0], tmp._u[0] );
228 AlignedWireSet ( tmp._u[1], tmp._u[1] );
230 # elif EPICS_FLOAT_WORD_ORDER == EPICS_ENDIAN_LITTLE
233 AlignedWireSet ( srcu._u[1], dstu._u[0] );
234 AlignedWireSet ( srcu._u[0], dstu._u[1] );
237 # error unsupported floating point word order
241 #endif // osdWireFormat
char epicsOldString[MAX_STRING_SIZE]
!! Don't use this - it may vanish in the future !!