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