Mistake on this page?
Report an issue in GitHub or email us
whd_endian.h
1 /*
2  * Copyright 2021, Cypress Semiconductor Corporation (an Infineon company)
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 /*
18  * Byte order utilities
19  *
20  * This file by default provides proper behavior on little-endian architectures.
21  * On big-endian architectures, IL_BIGENDIAN should be defined.
22  */
23 
24 #ifndef INCLUDED_WHD_ENDIAN_H
25 #define INCLUDED_WHD_ENDIAN_H
26 
27 #ifdef __cplusplus
28 extern "C"
29 {
30 #endif
31 
32 /* Reverse the bytes in a 16-bit value */
33 #define SWAP16(val) \
34  ( (uint16_t)( ( ( (uint16_t)(val) & (uint16_t)0x00ffU ) << 8 ) | \
35  ( ( (uint16_t)(val) & (uint16_t)0xff00U ) >> 8 ) ) )
36 
37 /* Reverse the bytes in a 32-bit value */
38 #define SWAP32(val) \
39  ( (uint32_t)( ( ( (uint32_t)(val) & (uint32_t)0x000000ffU ) << 24 ) | \
40  ( ( (uint32_t)(val) & (uint32_t)0x0000ff00U ) << 8 ) | \
41  ( ( (uint32_t)(val) & (uint32_t)0x00ff0000U ) >> 8 ) | \
42  ( ( (uint32_t)(val) & (uint32_t)0xff000000U ) >> 24 ) ) )
43 
44 #ifdef IL_BIGENDIAN
45 #define htod32(i) SWAP32(i)
46 #define htod16(i) SWAP16(i)
47 #define dtoh32(i) SWAP32(i)
48 #define dtoh16(i) SWAP16(i)
49 #define hton16(i) (i)
50 #define hton32(i) (i)
51 #define ntoh16(i) (i)
52 #define ntoh32(i) (i)
53 #else /* IL_BIGENDIAN */
54 #define htod32(i) (i)
55 #define htod16(i) (i)
56 #define dtoh32(i) (i)
57 #define dtoh16(i) (i)
58 #define hton16(i) SWAP16(i)
59 #define hton32(i) SWAP32(i)
60 #define ntoh16(i) SWAP16(i)
61 #define ntoh32(i) SWAP32(i)
62 #endif /* IL_BIGENDIAN */
63 
64 #ifdef __cplusplus
65 } /* extern "C" */
66 #endif
67 
68 #endif /* INCLUDED_WHD_ENDIAN_H */
69 
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.