xref: /titanic_51/usr/src/lib/libc/sparcv9/gen/endian.c (revision 3b4b8bda7949c2c1bf610c9f0413accc9d26119a)
1*3b4b8bdaSRobert Mustacchi /*
2*3b4b8bdaSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*3b4b8bdaSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*3b4b8bdaSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*3b4b8bdaSRobert Mustacchi  * 1.0 of the CDDL.
6*3b4b8bdaSRobert Mustacchi  *
7*3b4b8bdaSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*3b4b8bdaSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*3b4b8bdaSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*3b4b8bdaSRobert Mustacchi  */
11*3b4b8bdaSRobert Mustacchi 
12*3b4b8bdaSRobert Mustacchi /*
13*3b4b8bdaSRobert Mustacchi  * Copyright (c) 2015, Joyent, Inc.
14*3b4b8bdaSRobert Mustacchi  */
15*3b4b8bdaSRobert Mustacchi 
16*3b4b8bdaSRobert Mustacchi /*
17*3b4b8bdaSRobert Mustacchi  * endian(3C) routines
18*3b4b8bdaSRobert Mustacchi  */
19*3b4b8bdaSRobert Mustacchi 
20*3b4b8bdaSRobert Mustacchi uint16_t
21*3b4b8bdaSRobert Mustacchi htole16(uint16_t in)
22*3b4b8bdaSRobert Mustacchi {
23*3b4b8bdaSRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
24*3b4b8bdaSRobert Mustacchi }
25*3b4b8bdaSRobert Mustacchi 
26*3b4b8bdaSRobert Mustacchi uint32_t
27*3b4b8bdaSRobert Mustacchi htole32(uint32_t in)
28*3b4b8bdaSRobert Mustacchi {
29*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffUL) << 24) |
30*3b4b8bdaSRobert Mustacchi 	    (in & 0xff00UL) << 8 |
31*3b4b8bdaSRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
32*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
33*3b4b8bdaSRobert Mustacchi }
34*3b4b8bdaSRobert Mustacchi 
35*3b4b8bdaSRobert Mustacchi uint64_t
36*3b4b8bdaSRobert Mustacchi htole64(uint64_t in)
37*3b4b8bdaSRobert Mustacchi {
38*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffULL) << 56) |
39*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
40*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
41*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
42*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
43*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
44*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
45*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
46*3b4b8bdaSRobert Mustacchi }
47*3b4b8bdaSRobert Mustacchi 
48*3b4b8bdaSRobert Mustacchi uint16_t
49*3b4b8bdaSRobert Mustacchi letoh16(uint16_t in)
50*3b4b8bdaSRobert Mustacchi {
51*3b4b8bdaSRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
52*3b4b8bdaSRobert Mustacchi }
53*3b4b8bdaSRobert Mustacchi 
54*3b4b8bdaSRobert Mustacchi uint16_t
55*3b4b8bdaSRobert Mustacchi le16toh(uint16_t in)
56*3b4b8bdaSRobert Mustacchi {
57*3b4b8bdaSRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
58*3b4b8bdaSRobert Mustacchi }
59*3b4b8bdaSRobert Mustacchi 
60*3b4b8bdaSRobert Mustacchi uint32_t
61*3b4b8bdaSRobert Mustacchi letoh32(uint32_t in)
62*3b4b8bdaSRobert Mustacchi {
63*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffUL) << 24) |
64*3b4b8bdaSRobert Mustacchi 	    (in & 0xff00UL) << 8 |
65*3b4b8bdaSRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
66*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
67*3b4b8bdaSRobert Mustacchi }
68*3b4b8bdaSRobert Mustacchi 
69*3b4b8bdaSRobert Mustacchi uint32_t
70*3b4b8bdaSRobert Mustacchi le32toh(uint32_t in)
71*3b4b8bdaSRobert Mustacchi {
72*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffUL) << 24) |
73*3b4b8bdaSRobert Mustacchi 	    (in & 0xff00UL) << 8 |
74*3b4b8bdaSRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
75*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
76*3b4b8bdaSRobert Mustacchi }
77*3b4b8bdaSRobert Mustacchi 
78*3b4b8bdaSRobert Mustacchi uint64_t
79*3b4b8bdaSRobert Mustacchi letoh64(uint64_t in)
80*3b4b8bdaSRobert Mustacchi {
81*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffULL) << 56) |
82*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
83*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
84*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
85*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
86*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
87*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
88*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
89*3b4b8bdaSRobert Mustacchi }
90*3b4b8bdaSRobert Mustacchi 
91*3b4b8bdaSRobert Mustacchi uint64_t
92*3b4b8bdaSRobert Mustacchi le64toh(uint64_t in)
93*3b4b8bdaSRobert Mustacchi {
94*3b4b8bdaSRobert Mustacchi 	return (((in & 0xffULL) << 56) |
95*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
96*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
97*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
98*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
99*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
100*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
101*3b4b8bdaSRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
102*3b4b8bdaSRobert Mustacchi }
103*3b4b8bdaSRobert Mustacchi 
104*3b4b8bdaSRobert Mustacchi /* Anything to or from big-endian is a no-op */
105*3b4b8bdaSRobert Mustacchi 
106*3b4b8bdaSRobert Mustacchi uint16_t
107*3b4b8bdaSRobert Mustacchi htobe16(uint16_t in)
108*3b4b8bdaSRobert Mustacchi {
109*3b4b8bdaSRobert Mustacchi 	return (in);
110*3b4b8bdaSRobert Mustacchi }
111*3b4b8bdaSRobert Mustacchi 
112*3b4b8bdaSRobert Mustacchi uint32_t
113*3b4b8bdaSRobert Mustacchi htobe32(uint32_t in)
114*3b4b8bdaSRobert Mustacchi {
115*3b4b8bdaSRobert Mustacchi 	return (in);
116*3b4b8bdaSRobert Mustacchi }
117*3b4b8bdaSRobert Mustacchi 
118*3b4b8bdaSRobert Mustacchi uint64_t
119*3b4b8bdaSRobert Mustacchi htobe64(uint64_t in)
120*3b4b8bdaSRobert Mustacchi {
121*3b4b8bdaSRobert Mustacchi 	return (in);
122*3b4b8bdaSRobert Mustacchi }
123*3b4b8bdaSRobert Mustacchi 
124*3b4b8bdaSRobert Mustacchi uint16_t
125*3b4b8bdaSRobert Mustacchi betoh16(uint16_t in)
126*3b4b8bdaSRobert Mustacchi {
127*3b4b8bdaSRobert Mustacchi 	return (in);
128*3b4b8bdaSRobert Mustacchi }
129*3b4b8bdaSRobert Mustacchi 
130*3b4b8bdaSRobert Mustacchi uint16_t
131*3b4b8bdaSRobert Mustacchi be16toh(uint16_t in)
132*3b4b8bdaSRobert Mustacchi {
133*3b4b8bdaSRobert Mustacchi 	return (in);
134*3b4b8bdaSRobert Mustacchi }
135*3b4b8bdaSRobert Mustacchi 
136*3b4b8bdaSRobert Mustacchi uint32_t
137*3b4b8bdaSRobert Mustacchi betoh32(uint32_t in)
138*3b4b8bdaSRobert Mustacchi {
139*3b4b8bdaSRobert Mustacchi 	return (in);
140*3b4b8bdaSRobert Mustacchi }
141*3b4b8bdaSRobert Mustacchi 
142*3b4b8bdaSRobert Mustacchi uint32_t
143*3b4b8bdaSRobert Mustacchi be32toh(uint32_t in)
144*3b4b8bdaSRobert Mustacchi {
145*3b4b8bdaSRobert Mustacchi 	return (in);
146*3b4b8bdaSRobert Mustacchi }
147*3b4b8bdaSRobert Mustacchi 
148*3b4b8bdaSRobert Mustacchi uint64_t
149*3b4b8bdaSRobert Mustacchi betoh64(uint64_t in)
150*3b4b8bdaSRobert Mustacchi {
151*3b4b8bdaSRobert Mustacchi 	return (in);
152*3b4b8bdaSRobert Mustacchi }
153*3b4b8bdaSRobert Mustacchi 
154*3b4b8bdaSRobert Mustacchi uint64_t
155*3b4b8bdaSRobert Mustacchi be64toh(uint64_t in)
156*3b4b8bdaSRobert Mustacchi {
157*3b4b8bdaSRobert Mustacchi 	return (in);
158*3b4b8bdaSRobert Mustacchi }
159