xref: /illumos-gate/usr/src/lib/libc/sparc/gen/endian.c (revision cc366bfc)
17dc9a163SRobert Mustacchi /*
27dc9a163SRobert Mustacchi  * This file and its contents are supplied under the terms of the
37dc9a163SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
47dc9a163SRobert Mustacchi  * You may only use this file in accordance with the terms of version
57dc9a163SRobert Mustacchi  * 1.0 of the CDDL.
67dc9a163SRobert Mustacchi  *
77dc9a163SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
87dc9a163SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
97dc9a163SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
107dc9a163SRobert Mustacchi  */
117dc9a163SRobert Mustacchi 
127dc9a163SRobert Mustacchi /*
137dc9a163SRobert Mustacchi  * Copyright (c) 2015, Joyent, Inc.
147dc9a163SRobert Mustacchi  */
157dc9a163SRobert Mustacchi 
16*cc366bfcSRobert Mustacchi #include <endian.h>
17*cc366bfcSRobert Mustacchi 
187dc9a163SRobert Mustacchi /*
197dc9a163SRobert Mustacchi  * endian(3C) routines
207dc9a163SRobert Mustacchi  */
217dc9a163SRobert Mustacchi 
227dc9a163SRobert Mustacchi uint16_t
htole16(uint16_t in)237dc9a163SRobert Mustacchi htole16(uint16_t in)
247dc9a163SRobert Mustacchi {
257dc9a163SRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
267dc9a163SRobert Mustacchi }
277dc9a163SRobert Mustacchi 
287dc9a163SRobert Mustacchi uint32_t
htole32(uint32_t in)297dc9a163SRobert Mustacchi htole32(uint32_t in)
307dc9a163SRobert Mustacchi {
317dc9a163SRobert Mustacchi 	return (((in & 0xffUL) << 24) |
327dc9a163SRobert Mustacchi 	    (in & 0xff00UL) << 8 |
337dc9a163SRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
347dc9a163SRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
357dc9a163SRobert Mustacchi }
367dc9a163SRobert Mustacchi 
377dc9a163SRobert Mustacchi uint64_t
htole64(uint64_t in)387dc9a163SRobert Mustacchi htole64(uint64_t in)
397dc9a163SRobert Mustacchi {
407dc9a163SRobert Mustacchi 	return (((in & 0xffULL) << 56) |
417dc9a163SRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
427dc9a163SRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
437dc9a163SRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
447dc9a163SRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
457dc9a163SRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
467dc9a163SRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
477dc9a163SRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
487dc9a163SRobert Mustacchi }
497dc9a163SRobert Mustacchi 
507dc9a163SRobert Mustacchi uint16_t
letoh16(uint16_t in)517dc9a163SRobert Mustacchi letoh16(uint16_t in)
527dc9a163SRobert Mustacchi {
537dc9a163SRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
547dc9a163SRobert Mustacchi }
557dc9a163SRobert Mustacchi 
567dc9a163SRobert Mustacchi uint16_t
le16toh(uint16_t in)577dc9a163SRobert Mustacchi le16toh(uint16_t in)
587dc9a163SRobert Mustacchi {
597dc9a163SRobert Mustacchi 	return (((in & 0xff) << 8) | ((in & 0xff00) >> 8));
607dc9a163SRobert Mustacchi }
617dc9a163SRobert Mustacchi 
627dc9a163SRobert Mustacchi uint32_t
letoh32(uint32_t in)637dc9a163SRobert Mustacchi letoh32(uint32_t in)
647dc9a163SRobert Mustacchi {
657dc9a163SRobert Mustacchi 	return (((in & 0xffUL) << 24) |
667dc9a163SRobert Mustacchi 	    (in & 0xff00UL) << 8 |
677dc9a163SRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
687dc9a163SRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
697dc9a163SRobert Mustacchi }
707dc9a163SRobert Mustacchi 
717dc9a163SRobert Mustacchi uint32_t
le32toh(uint32_t in)727dc9a163SRobert Mustacchi le32toh(uint32_t in)
737dc9a163SRobert Mustacchi {
747dc9a163SRobert Mustacchi 	return (((in & 0xffUL) << 24) |
757dc9a163SRobert Mustacchi 	    (in & 0xff00UL) << 8 |
767dc9a163SRobert Mustacchi 	    (in & 0xff0000UL) >> 8 |
777dc9a163SRobert Mustacchi 	    ((in & 0xff000000UL) >> 24));
787dc9a163SRobert Mustacchi }
797dc9a163SRobert Mustacchi 
807dc9a163SRobert Mustacchi uint64_t
letoh64(uint64_t in)817dc9a163SRobert Mustacchi letoh64(uint64_t in)
827dc9a163SRobert Mustacchi {
837dc9a163SRobert Mustacchi 	return (((in & 0xffULL) << 56) |
847dc9a163SRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
857dc9a163SRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
867dc9a163SRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
877dc9a163SRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
887dc9a163SRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
897dc9a163SRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
907dc9a163SRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
917dc9a163SRobert Mustacchi }
927dc9a163SRobert Mustacchi 
937dc9a163SRobert Mustacchi uint64_t
le64toh(uint64_t in)947dc9a163SRobert Mustacchi le64toh(uint64_t in)
957dc9a163SRobert Mustacchi {
967dc9a163SRobert Mustacchi 	return (((in & 0xffULL) << 56) |
977dc9a163SRobert Mustacchi 	    ((in & 0xff00ULL) << 40) |
987dc9a163SRobert Mustacchi 	    ((in & 0xff0000ULL) << 24) |
997dc9a163SRobert Mustacchi 	    ((in & 0xff000000ULL) << 8) |
1007dc9a163SRobert Mustacchi 	    ((in & 0xff00000000ULL) >> 8) |
1017dc9a163SRobert Mustacchi 	    ((in & 0xff0000000000ULL) >> 24) |
1027dc9a163SRobert Mustacchi 	    ((in & 0xff000000000000ULL) >> 40) |
1037dc9a163SRobert Mustacchi 	    ((in & 0xff00000000000000ULL) >> 56));
1047dc9a163SRobert Mustacchi }
1057dc9a163SRobert Mustacchi 
1067dc9a163SRobert Mustacchi /* Anything to or from big-endian is a no-op */
1077dc9a163SRobert Mustacchi 
1087dc9a163SRobert Mustacchi uint16_t
htobe16(uint16_t in)1097dc9a163SRobert Mustacchi htobe16(uint16_t in)
1107dc9a163SRobert Mustacchi {
1117dc9a163SRobert Mustacchi 	return (in);
1127dc9a163SRobert Mustacchi }
1137dc9a163SRobert Mustacchi 
1147dc9a163SRobert Mustacchi uint32_t
htobe32(uint32_t in)1157dc9a163SRobert Mustacchi htobe32(uint32_t in)
1167dc9a163SRobert Mustacchi {
1177dc9a163SRobert Mustacchi 	return (in);
1187dc9a163SRobert Mustacchi }
1197dc9a163SRobert Mustacchi 
1207dc9a163SRobert Mustacchi uint64_t
htobe64(uint64_t in)1217dc9a163SRobert Mustacchi htobe64(uint64_t in)
1227dc9a163SRobert Mustacchi {
1237dc9a163SRobert Mustacchi 	return (in);
1247dc9a163SRobert Mustacchi }
1257dc9a163SRobert Mustacchi 
1267dc9a163SRobert Mustacchi uint16_t
betoh16(uint16_t in)1277dc9a163SRobert Mustacchi betoh16(uint16_t in)
1287dc9a163SRobert Mustacchi {
1297dc9a163SRobert Mustacchi 	return (in);
1307dc9a163SRobert Mustacchi }
1317dc9a163SRobert Mustacchi 
1327dc9a163SRobert Mustacchi uint16_t
be16toh(uint16_t in)1337dc9a163SRobert Mustacchi be16toh(uint16_t in)
1347dc9a163SRobert Mustacchi {
1357dc9a163SRobert Mustacchi 	return (in);
1367dc9a163SRobert Mustacchi }
1377dc9a163SRobert Mustacchi 
1387dc9a163SRobert Mustacchi uint32_t
betoh32(uint32_t in)1397dc9a163SRobert Mustacchi betoh32(uint32_t in)
1407dc9a163SRobert Mustacchi {
1417dc9a163SRobert Mustacchi 	return (in);
1427dc9a163SRobert Mustacchi }
1437dc9a163SRobert Mustacchi 
1447dc9a163SRobert Mustacchi uint32_t
be32toh(uint32_t in)1457dc9a163SRobert Mustacchi be32toh(uint32_t in)
1467dc9a163SRobert Mustacchi {
1477dc9a163SRobert Mustacchi 	return (in);
1487dc9a163SRobert Mustacchi }
1497dc9a163SRobert Mustacchi 
1507dc9a163SRobert Mustacchi uint64_t
betoh64(uint64_t in)1517dc9a163SRobert Mustacchi betoh64(uint64_t in)
1527dc9a163SRobert Mustacchi {
1537dc9a163SRobert Mustacchi 	return (in);
1547dc9a163SRobert Mustacchi }
1557dc9a163SRobert Mustacchi 
1567dc9a163SRobert Mustacchi uint64_t
be64toh(uint64_t in)1577dc9a163SRobert Mustacchi be64toh(uint64_t in)
1587dc9a163SRobert Mustacchi {
1597dc9a163SRobert Mustacchi 	return (in);
1607dc9a163SRobert Mustacchi }
161