1fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* 2fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * Copyright 2012, The Android Open Source Project 3fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * 4fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 5fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * you may not use this file except in compliance with the License. 6fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * You may obtain a copy of the License at 7fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * 8fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * http://www.apache.org/licenses/LICENSE-2.0 9fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * 10fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * Unless required by applicable law or agreed to in writing, software 11fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * distributed under the License is distributed on an "AS IS" BASIS, 12fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * See the License for the specific language governing permissions and 14fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng * limitations under the License. 15fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng */ 16fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng 17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#ifndef ELFUTILS_BYTESWAP_H 18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define ELFUTILS_BYTESWAP_H 19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengstatic inline unsigned short bswap_16(unsigned short val) 21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng{ 22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng return ((val & 0xff) << 8) | ((val >> 8) & 0xff); 23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng} 24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengstatic inline unsigned long bswap_32(unsigned long val) 26cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng{ 27cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng return bswap_16((unsigned short)val) << 16 | 28cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng bswap_16((unsigned short)(val >> 16)); 29cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng} 30cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengstatic inline unsigned long long bswap_64(unsigned long long val) 32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng{ 33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng return ((((unsigned long long)bswap_32(val)) << 32) | 34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng (((unsigned long long)bswap_32(val >> 32)) & 0xffffffffULL)); 35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng} 36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#endif /* ELFUTILS_BYTESWAP_H */ 38