123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
- //
- // EndianPortable.c
- //
- // Copyright 2011 Apple Inc. All rights reserved.
- //
- #include <stdio.h>
- #include "EndianPortable.h"
- #define BSWAP16(x) (((x << 8) | ((x >> 8) & 0x00ff)))
- #define BSWAP32(x) (((x << 24) | ((x << 8) & 0x00ff0000) | ((x >> 8) & 0x0000ff00) | ((x >> 24) & 0x000000ff)))
- #define BSWAP64(x) ((((int64_t)x << 56) | (((int64_t)x << 40) & 0x00ff000000000000LL) | \
- (((int64_t)x << 24) & 0x0000ff0000000000LL) | (((int64_t)x << 8) & 0x000000ff00000000LL) | \
- (((int64_t)x >> 8) & 0x00000000ff000000LL) | (((int64_t)x >> 24) & 0x0000000000ff0000LL) | \
- (((int64_t)x >> 40) & 0x000000000000ff00LL) | (((int64_t)x >> 56) & 0x00000000000000ffLL)))
- #if defined(__i386__)
- #define TARGET_RT_LITTLE_ENDIAN 1
- #elif defined(__x86_64__)
- #define TARGET_RT_LITTLE_ENDIAN 1
- #elif defined (TARGET_OS_WIN32)
- #define TARGET_RT_LITTLE_ENDIAN 1
- #elif defined (__arm__) || defined(__aarch64__)
- #define TARGET_RT_LITTLE_ENDIAN 1
- #endif
- uint16_t Swap16NtoB(uint16_t inUInt16)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP16(inUInt16);
- #else
- return inUInt16;
- #endif
- }
- uint16_t Swap16BtoN(uint16_t inUInt16)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP16(inUInt16);
- #else
- return inUInt16;
- #endif
- }
- uint32_t Swap32NtoB(uint32_t inUInt32)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP32(inUInt32);
- #else
- return inUInt32;
- #endif
- }
- uint32_t Swap32BtoN(uint32_t inUInt32)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP32(inUInt32);
- #else
- return inUInt32;
- #endif
- }
- uint64_t Swap64BtoN(uint64_t inUInt64)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP64(inUInt64);
- #else
- return inUInt64;
- #endif
- }
- uint64_t Swap64NtoB(uint64_t inUInt64)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- return BSWAP64(inUInt64);
- #else
- return inUInt64;
- #endif
- }
- float SwapFloat32BtoN(float in)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- union {
- float f;
- int32_t i;
- } x;
- x.f = in;
- x.i = BSWAP32(x.i);
- return x.f;
- #else
- return in;
- #endif
- }
- float SwapFloat32NtoB(float in)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- union {
- float f;
- int32_t i;
- } x;
- x.f = in;
- x.i = BSWAP32(x.i);
- return x.f;
- #else
- return in;
- #endif
- }
- double SwapFloat64BtoN(double in)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- union {
- double f;
- int64_t i;
- } x;
- x.f = in;
- x.i = BSWAP64(x.i);
- return x.f;
- #else
- return in;
- #endif
- }
- double SwapFloat64NtoB(double in)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- union {
- double f;
- int64_t i;
- } x;
- x.f = in;
- x.i = BSWAP64(x.i);
- return x.f;
- #else
- return in;
- #endif
- }
- void Swap16(uint16_t * inUInt16)
- {
- *inUInt16 = BSWAP16(*inUInt16);
- }
- void Swap24(uint8_t * inUInt24)
- {
- uint8_t tempVal = inUInt24[0];
- inUInt24[0] = inUInt24[2];
- inUInt24[2] = tempVal;
- }
- void Swap32(uint32_t * inUInt32)
- {
- *inUInt32 = BSWAP32(*inUInt32);
- }
|