10 #if !defined POSH_NO_FLOAT
11 # define POSH_FLOAT_STRING "enabled"
13 # define POSH_FLOAT_STRING "disabled"
16 #if defined POSH_64BIT_INTEGER
17 # define POSH_64BIT_INTEGER_STRING "yes"
19 # define POSH_64BIT_INTEGER_STRING "no"
22 #if defined POSH_64BIT_POINTER
23 # define POSH_POINTER_STRING "64-bits"
25 # define POSH_POINTER_STRING "32-bits"
28 #if defined POSH_LITTLE_ENDIAN
29 # define IS_BIG_ENDIAN 0
31 # define NATIVE16 POSH_LittleU16
32 # define NATIVE32 POSH_LittleU32
33 # define NATIVE64 POSH_LittleU64
34 # define FOREIGN16 POSH_BigU16
35 # define FOREIGN32 POSH_BigU32
36 # define FOREIGN64 POSH_BigU64
38 # define IS_BIG_ENDIAN 1
40 # define NATIVE16 POSH_BigU16
41 # define NATIVE32 POSH_BigU32
42 # define NATIVE64 POSH_BigU64
43 # define FOREIGN16 POSH_LittleU16
44 # define FOREIGN32 POSH_LittleU32
45 # define FOREIGN64 POSH_LittleU64
74 return "*ERROR: failed little-endian 16-bit serialization test";
77 return "*ERROR: failed big-endian 16-bit serialization test";
81 return "*ERROR: failed little-endian 32-bit serialization test";
84 return "*ERROR: failed big-endian 32-bit serialization test";
85 #if defined POSH_64BIT_INTEGER
87 #define REF64 POSH_U64( 0xFEDCBA9876543210 )
91 POSH_WriteU64ToLittle( serbuf, REF64 );
92 if ( ( tmp64 = POSH_ReadU64FromLittle( serbuf ) ) != REF64 )
93 return "*ERROR: failed little-endian 64-bit serialization test";
94 POSH_WriteU64ToBig( serbuf, REF64 );
95 if ( ( tmp64 = POSH_ReadU64FromBig( serbuf ) ) != REF64 )
96 return "*ERROR: failed big-endian 64-bit serialization test";
103 #if !defined POSH_NO_FLOAT
107 float fRef = 10.0f/30.0f;
108 double dRef = 10.0/30.0;
115 return "*ERROR: POSH little endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
118 return "*ERROR: POSH big endian floating point conversion failed. Please report this to poshlib@poshlib.org!\n";
124 "*ERROR: POSH double precision floating point serialization failed. Please report this to poshlib@poshlib.org!\n";
135 "*ERROR: POSH compile time endianess does not match run-time endianess verification. Please report this to poshlib@poshlib.org!\n";
137 if ( (
NATIVE32( 0x11223344L ) != 0x11223344L)
138 || (
FOREIGN32( 0x11223344L ) != 0x44332211L)
141 return "*ERROR: POSH endianess macro selection failed. Please report this to poshlib@poshlib.org!\n";
163 "CPU:............." POSH_CPU_STRING
"\n"
177 #if !defined POSH_NO_FLOAT
232 swapped = (v&0xFF)<<24;
233 swapped |= (v&0xFF00)<<8;
234 swapped |= (v>>8)&0xFF00;
254 #if defined POSH_64BIT_INTEGER
262 posh_u64_t POSH_SwapU64( posh_u64_t
v )
275 u.bytes[0] = u.bytes[7];
278 u.bytes[1] = u.bytes[6];
281 u.bytes[2] = u.bytes[5];
284 u.bytes[3] = u.bytes[4];
297 posh_s64_t POSH_SwapS64( posh_s64_t
v )
299 return (posh_s64_t) POSH_SwapU64( (posh_u64_t) v );
434 #if defined POSH_64BIT_INTEGER
444 posh_u64_t * POSH_WriteU64ToLittle(
void *dst, posh_u64_t value )
446 posh_u64_t *p64 = (posh_u64_t*) dst;
448 *p64 = POSH_LittleU64( value );
462 posh_s64_t * POSH_WriteS64ToLittle(
void *dst, posh_s64_t value )
464 return (posh_s64_t*) POSH_WriteU64ToLittle( dst, (posh_u64_t) value );
476 posh_u64_t * POSH_WriteU64ToBig(
void *dst, posh_u64_t value )
478 posh_u64_t *p64 = (posh_u64_t*) dst;
480 *p64 = POSH_BigU64( value );
494 posh_s64_t * POSH_WriteS64ToBig(
void *dst, posh_s64_t value )
496 return (posh_s64_t*) POSH_WriteU64ToBig( dst, (posh_s64_t) value );
587 #if defined POSH_64BIT_INTEGER
594 posh_u64_t POSH_ReadU64FromLittle(
const void *src )
596 return POSH_LittleU64( (*(
const posh_u64_t*) src) );
604 posh_s64_t POSH_ReadS64FromLittle(
const void *src )
606 return POSH_LittleS64( (*(
const posh_s64_t*) src) );
614 posh_u64_t POSH_ReadU64FromBig(
const void *src )
616 return POSH_BigU64( (*(
const posh_u64_t*) src) );
624 posh_s64_t POSH_ReadS64FromBig(
const void *src )
626 return POSH_BigS64( (*(
const posh_s64_t*) src) );
637 #if !defined POSH_NO_FLOAT
656 #if defined POSH_LITTLE_ENDIAN
682 #if defined POSH_LITTLE_ENDIAN
709 #if defined POSH_LITTLE_ENDIAN
751 #if defined POSH_LITTLE_ENDIAN
793 #if defined POSH_BIG_ENDIAN
819 #if defined POSH_LITTLE_ENDIAN