1 /* $NetBSD: byteorder.c,v 1.3 2007/11/24 13:20:54 isaki Exp $ */
4 * Copyright 2001 Wasabi Systems, Inc.
7 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed for the NetBSD Project by
20 * Wasabi Systems, Inc.
21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22 * or promote products derived from this software without specific prior
25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
38 #include "byteorder.h"
58 sa_htobe16(uint16_t val
)
62 un
.bytes
[1] = val
& 0xff;
63 un
.bytes
[0] = (val
>> 8) & 0xff;
69 sa_htole16(uint16_t val
)
73 un
.bytes
[0] = val
& 0xff;
74 un
.bytes
[1] = (val
>> 8) & 0xff;
80 sa_be16toh(uint16_t val
)
86 return ((un
.bytes
[0] << 8) |
91 sa_le16toh(uint16_t val
)
97 return ((un
.bytes
[1] << 8) |
104 sa_htobe32(uint32_t val
)
108 un
.bytes
[3] = val
& 0xff;
109 un
.bytes
[2] = (val
>> 8) & 0xff;
110 un
.bytes
[1] = (val
>> 16) & 0xff;
111 un
.bytes
[0] = (val
>> 24) & 0xff;
117 sa_htole32(uint32_t val
)
121 un
.bytes
[0] = val
& 0xff;
122 un
.bytes
[1] = (val
>> 8) & 0xff;
123 un
.bytes
[2] = (val
>> 16) & 0xff;
124 un
.bytes
[3] = (val
>> 24) & 0xff;
130 sa_be32toh(uint32_t val
)
136 return ((un
.bytes
[0] << 24) |
137 (un
.bytes
[1] << 16) |
143 sa_le32toh(uint32_t val
)
149 return ((un
.bytes
[3] << 24) |
150 (un
.bytes
[2] << 16) |
158 sa_htobe64(uint64_t val
)
162 un
.words
[BE64_HI
] = sa_htobe32(val
>> 32);
163 un
.words
[BE64_LO
] = sa_htobe32(val
& 0xffffffffU
);
169 sa_htole64(uint64_t val
)
173 un
.words
[LE64_HI
] = sa_htole32(val
>> 32);
174 un
.words
[LE64_LO
] = sa_htole32(val
& 0xffffffffU
);
180 sa_be64toh(uint64_t val
)
186 un
.words
[BE64_HI
] = sa_be32toh(un
.words
[BE64_HI
]);
187 un
.words
[BE64_LO
] = sa_be32toh(un
.words
[BE64_LO
]);
189 rv
= (((uint64_t)un
.words
[BE64_HI
]) << 32) |
196 sa_le64toh(uint64_t val
)
202 un
.words
[LE64_HI
] = sa_le32toh(un
.words
[LE64_HI
]);
203 un
.words
[LE64_LO
] = sa_le32toh(un
.words
[LE64_LO
]);
205 rv
= (((uint64_t)un
.words
[LE64_HI
]) << 32) |