41 #define TDS_GET_A1LE(ptr)  (((uint8_t *)(ptr))[0])    42 #define TDS_GET_A1BE(ptr)  TDS_GET_A1LE(ptr)    43 #define TDS_GET_UA1LE(ptr) TDS_GET_A1LE(ptr)    44 #define TDS_GET_UA1BE(ptr) TDS_GET_A1LE(ptr)    46 #define TDS_PUT_A1LE(ptr,val)  do { ((uint8_t *)(ptr))[0] = (val); } while(0)    47 #define TDS_PUT_A1BE(ptr,val)  TDS_PUT_A1LE(ptr,val)    48 #define TDS_PUT_UA1LE(ptr,val) TDS_PUT_A1LE(ptr,val)    49 #define TDS_PUT_UA1BE(ptr,val) TDS_PUT_A1LE(ptr,val)    52 #define TDS_GET_UA2LE(ptr) (((uint8_t *)(ptr))[1] * 0x100u + ((uint8_t *)(ptr))[0])    53 #define TDS_GET_UA2BE(ptr) (((uint8_t *)(ptr))[0] * 0x100u + ((uint8_t *)(ptr))[1])    54 #define TDS_GET_A2LE(ptr) TDS_GET_UA2LE(ptr)    55 #define TDS_GET_A2BE(ptr) TDS_GET_UA2BE(ptr)    57 #define TDS_PUT_UA2LE(ptr,val) do {\    58  ((uint8_t *)(ptr))[1] = (uint8_t)((val)>>8); ((uint8_t *)(ptr))[0] = (uint8_t)(val); } while(0)    59 #define TDS_PUT_UA2BE(ptr,val) do {\    60  ((uint8_t *)(ptr))[0] = (uint8_t)((val)>>8); ((uint8_t *)(ptr))[1] = (uint8_t)(val); } while(0)    61 #define TDS_PUT_A2LE(ptr,val) TDS_PUT_UA2LE(ptr,val)    62 #define TDS_PUT_A2BE(ptr,val) TDS_PUT_UA2BE(ptr,val)    65 #define TDS_GET_UA4LE(ptr) \    66     (((uint8_t *)(ptr))[3] * 0x1000000u + ((uint8_t *)(ptr))[2] * 0x10000u +\    67      ((uint8_t *)(ptr))[1] * 0x100u + ((uint8_t *)(ptr))[0])    68 #define TDS_GET_UA4BE(ptr) \    69     (((uint8_t *)(ptr))[0] * 0x1000000u + ((uint8_t *)(ptr))[1] * 0x10000u +\    70      ((uint8_t *)(ptr))[2] * 0x100u + ((uint8_t *)(ptr))[3])    71 #define TDS_GET_A4LE(ptr) TDS_GET_UA4LE(ptr)    72 #define TDS_GET_A4BE(ptr) TDS_GET_UA4BE(ptr)    74 #define TDS_PUT_UA4LE(ptr,val) do {\    75  ((uint8_t *)(ptr))[3] = (uint8_t)((val)>>24); ((uint8_t *)(ptr))[2] = (uint8_t)((val)>>16);\    76  ((uint8_t *)(ptr))[1] = (uint8_t)((val)>>8); ((uint8_t *)(ptr))[0] = (uint8_t)(val); } while(0)    77 #define TDS_PUT_UA4BE(ptr,val) do {\    78  ((uint8_t *)(ptr))[0] = (uint8_t)((val)>>24); ((uint8_t *)(ptr))[1] = (uint8_t)((val)>>16);\    79  ((uint8_t *)(ptr))[2] = (uint8_t)((val)>>8); ((uint8_t *)(ptr))[3] = (uint8_t)(val); } while(0)    80 #define TDS_PUT_A4LE(ptr,val) TDS_PUT_UA4LE(ptr,val)    81 #define TDS_PUT_A4BE(ptr,val) TDS_PUT_UA4BE(ptr,val)    84 #  define TDS_MAY_ALIAS __attribute__((__may_alias__))    86 #  define TDS_MAY_ALIAS   101 #ifdef WORDS_BIGENDIAN   102 # define TDS_GET_A1(ptr)  TDS_GET_A1BE(ptr)   103 # define TDS_GET_UA1(ptr) TDS_GET_UA1BE(ptr)   104 # define TDS_GET_A2(ptr)  TDS_GET_A2BE(ptr)   105 # define TDS_GET_UA2(ptr) TDS_GET_UA2BE(ptr)   106 # define TDS_GET_A4(ptr)  TDS_GET_A4BE(ptr)   107 # define TDS_GET_UA4(ptr) TDS_GET_UA4BE(ptr)   110 # define TDS_GET_A2BE(ptr) (((TDS_BYTE_CONVERT2*)(ptr))->usi)   111 # define TDS_GET_A4BE(ptr) (((TDS_BYTE_CONVERT4*)(ptr))->ui)   113 # define TDS_PUT_A1(ptr,val)  TDS_PUT_A1BE(ptr,val)   114 # define TDS_PUT_UA1(ptr,val) TDS_PUT_UA1BE(ptr,val)   115 # define TDS_PUT_A2(ptr,val)  TDS_PUT_A2BE(ptr,val)   116 # define TDS_PUT_UA2(ptr,val) TDS_PUT_UA2BE(ptr,val)   117 # define TDS_PUT_A4(ptr,val)  TDS_PUT_A4BE(ptr,val)   118 # define TDS_PUT_UA4(ptr,val) TDS_PUT_UA4BE(ptr,val)   121 # define TDS_PUT_A2BE(ptr,val) (((TDS_BYTE_CONVERT2*)(ptr))->usi = (val))   122 # define TDS_PUT_A4BE(ptr,val) (((TDS_BYTE_CONVERT4*)(ptr))->ui = (val))   123 # define TDS_HOST2LE(val) TDS_BYTE_SWAP16(val)   124 # define TDS_HOST4LE(val) TDS_BYTE_SWAP32(val)   125 # define TDS_HOST2BE(val) (val)   126 # define TDS_HOST4BE(val) (val)   128 # define TDS_GET_A1(ptr)  TDS_GET_A1LE(ptr)   129 # define TDS_GET_UA1(ptr) TDS_GET_UA1LE(ptr)   130 # define TDS_GET_A2(ptr)  TDS_GET_A2LE(ptr)   131 # define TDS_GET_UA2(ptr) TDS_GET_UA2LE(ptr)   132 # define TDS_GET_A4(ptr)  TDS_GET_A4LE(ptr)   133 # define TDS_GET_UA4(ptr) TDS_GET_UA4LE(ptr)   136 # define TDS_GET_A2LE(ptr) (((TDS_BYTE_CONVERT2*)(ptr))->usi)   137 # define TDS_GET_A4LE(ptr) (((TDS_BYTE_CONVERT4*)(ptr))->ui)   139 # define TDS_PUT_A1(ptr,val)  TDS_PUT_A1LE(ptr,val)   140 # define TDS_PUT_UA1(ptr,val) TDS_PUT_UA1LE(ptr,val)   141 # define TDS_PUT_A2(ptr,val)  TDS_PUT_A2LE(ptr,val)   142 # define TDS_PUT_UA2(ptr,val) TDS_PUT_UA2LE(ptr,val)   143 # define TDS_PUT_A4(ptr,val)  TDS_PUT_A4LE(ptr,val)   144 # define TDS_PUT_UA4(ptr,val) TDS_PUT_UA4LE(ptr,val)   147 # define TDS_PUT_A2LE(ptr,val) (((TDS_BYTE_CONVERT2*)(ptr))->usi = (val))   148 # define TDS_PUT_A4LE(ptr,val) (((TDS_BYTE_CONVERT4*)(ptr))->ui = (val))   149 # define TDS_HOST2LE(val) (val)   150 # define TDS_HOST4LE(val) (val)   151 # define TDS_HOST2BE(val) TDS_BYTE_SWAP16(val)   152 # define TDS_HOST4BE(val) TDS_BYTE_SWAP32(val)   157 #if defined(__i386__) || defined(__amd64__) || defined(__CRIS__) ||\   158   defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) ||\   159   defined(__s390__) || defined(__s390x__) || defined(__m68k__) ||\   160   (defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86) || defined(_M_X64))) ||\   161   defined(__ARM_FEATURE_UNALIGNED) ||\   162   defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_8__) ||\   163   (defined(_M_ARM) && (_M_ARM >= 7))   164 # ifdef WORDS_BIGENDIAN   165 #  undef TDS_GET_UA2BE   166 #  undef TDS_GET_UA4BE   167 #  define TDS_GET_UA2BE(ptr) TDS_GET_A2BE(ptr)   168 #  define TDS_GET_UA4BE(ptr) TDS_GET_A4BE(ptr)   170 #  undef TDS_PUT_UA2BE   171 #  undef TDS_PUT_UA4BE   172 #  define TDS_PUT_UA2BE(ptr,val) TDS_PUT_A2BE(ptr,val)   173 #  define TDS_PUT_UA4BE(ptr,val) TDS_PUT_A4BE(ptr,val)   175 #  undef TDS_GET_UA2LE   176 #  undef TDS_GET_UA4LE   177 #  define TDS_GET_UA2LE(ptr) TDS_GET_A2LE(ptr)   178 #  define TDS_GET_UA4LE(ptr) TDS_GET_A4LE(ptr)   180 #  undef TDS_PUT_UA2LE   181 #  undef TDS_PUT_UA4LE   182 #  define TDS_PUT_UA2LE(ptr,val) TDS_PUT_A2LE(ptr,val)   183 #  define TDS_PUT_UA4LE(ptr,val) TDS_PUT_A4LE(ptr,val)   187 #if defined(__linux__) && defined(__GNUC__) && (defined(__i386__) || defined(__amd64__))   188 # include <byteswap.h>   189 # undef TDS_GET_UA2BE   190 # undef TDS_GET_UA4BE   191 # define TDS_GET_UA2BE(ptr) ({ uint16_t _tds_si = TDS_GET_UA2LE(ptr); bswap_16(_tds_si); })   192 # define TDS_GET_UA4BE(ptr) ({ uint32_t _tds_i = TDS_GET_UA4LE(ptr); bswap_32(_tds_i); })   194 # undef TDS_PUT_UA2BE   195 # undef TDS_PUT_UA4BE   196 # define TDS_PUT_UA2BE(ptr,val) do {\   197    uint16_t _tds_si = bswap_16(val); TDS_PUT_UA2LE(ptr,_tds_si); } while(0)   198 # define TDS_PUT_UA4BE(ptr,val) do {\   199    uint32_t _tds_i = bswap_32(val); TDS_PUT_UA4LE(ptr,_tds_i); } while(0)   202 #if defined(__GNUC__) && defined(__powerpc__) && defined(WORDS_BIGENDIAN)   203 # undef TDS_GET_UA2LE   204 # undef TDS_GET_UA4LE   205 static inline uint16_t
   206 TDS_GET_UA2LE(
void *ptr)
   209     __asm__ (
"lhbrx %0,0,%1\n" : 
"=r" (res) : 
"r" (ptr), 
"m"(*(uint16_t *)ptr));
   210     return (uint16_t) res;
   212 static inline uint32_t
   213 TDS_GET_UA4LE(
void *ptr)
   216     __asm__ (
"lwbrx %0,0,%1\n" : 
"=r" (res) : 
"r" (ptr), 
"m"(*(uint32_t *)ptr));
   217     return (uint32_t) res;
   220 # undef TDS_PUT_UA2LE   221 # undef TDS_PUT_UA4LE   223 TDS_PUT_UA2LE(
void *ptr, 
unsigned data)
   225     __asm__ (
"sthbrx %1,0,%2\n" : 
"=m" (*(uint16_t *)ptr) : 
"r" (data), 
"r" (ptr));
   228 TDS_PUT_UA4LE(
void *ptr, 
unsigned data)
   230     __asm__ (
"stwbrx %1,0,%2\n" : 
"=m" (*(uint32_t *)ptr) : 
"r" (data), 
"r" (ptr));