summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorniklas <niklas@openbsd.org>1997-11-09 23:04:58 +0000
committerniklas <niklas@openbsd.org>1997-11-09 23:04:58 +0000
commit419cb5628c8ece5c7fe61c17ef1d551352167a2d (patch)
tree4bdb5dcbf4df00fe17ba73a16f035f049a497ef0 /sys
parentSweeping changes from Don Schmidt (yensid@imsa.edu) to busify this driver. (diff)
downloadwireguard-openbsd-419cb5628c8ece5c7fe61c17ef1d551352167a2d.tar.xz
wireguard-openbsd-419cb5628c8ece5c7fe61c17ef1d551352167a2d.zip
New endian.h design. All architectures now use a common file for the bulk
part. Some ports can optimize the swap operations. This also means the general API is extended with swap16, swap32, htobe16, htobe32, betoh16, betoh32, htole16, htole32, letoh16 and letoh32.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/alpha/include/endian.h161
-rw-r--r--sys/arch/amiga/include/endian.h8
-rw-r--r--sys/arch/arc/include/endian.h109
-rw-r--r--sys/arch/arm32/include/endian.h86
-rw-r--r--sys/arch/atari/include/endian.h8
-rw-r--r--sys/arch/hp300/include/endian.h7
-rw-r--r--sys/arch/i386/include/endian.h160
-rw-r--r--sys/arch/kbus/include/endian.h93
-rw-r--r--sys/arch/m68k/include/endian.h165
-rw-r--r--sys/arch/mac68k/include/endian.h7
-rw-r--r--sys/arch/mvme68k/include/endian.h7
-rw-r--r--sys/arch/mvme88k/include/endian.h106
-rw-r--r--sys/arch/pc532/include/endian.h136
-rw-r--r--sys/arch/pmax/include/endian.h109
-rw-r--r--sys/arch/powerpc/include/endian.h93
-rw-r--r--sys/arch/sparc/include/endian.h100
-rw-r--r--sys/arch/sun3/include/endian.h7
-rw-r--r--sys/arch/vax/include/endian.h128
-rw-r--r--sys/arch/wgrisc/include/endian.h109
-rw-r--r--sys/sys/endian.h162
20 files changed, 526 insertions, 1235 deletions
diff --git a/sys/arch/alpha/include/endian.h b/sys/arch/alpha/include/endian.h
index da1d5250a08..2a7502d0a12 100644
--- a/sys/arch/alpha/include/endian.h
+++ b/sys/arch/alpha/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.7 1997/08/08 18:27:17 niklas Exp $ */
-/* $NetBSD: endian.h,v 1.3 1996/10/13 19:57:59 cgd Exp $ */
+/* $OpenBSD: endian.h,v 1.8 1997/11/09 23:05:00 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991, 1993
- * The Regents of the University of California. All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,143 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-#if 0
-/*
- * prototypes supplied for documentation purposes solely
- */
-u_int32_t htobe32 __P((u_int32_t));
-u_int16_t htobe16 __P((u_int16_t));
-u_int32_t betoh32 __P((u_int32_t));
-u_int16_t betoh16 __P((u_int16_t));
-
-u_int32_t htole32 __P((u_int32_t));
-u_int16_t htole16 __P((u_int16_t));
-u_int32_t letoh32 __P((u_int32_t));
-u_int16_t letoh16 __P((u_int16_t));
-
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-#endif
-__END_DECLS
-
-#ifdef __GNUC__
-
-/* XXX perhaps some __asm would be better here? */
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __x = (x); \
- (((__x) & 0xff000000) >> 24) | (((__x) & 0x00ff0000) >> 8) | \
- (((__x) & 0x0000ff00) << 8) | (((__x) & 0x000000ff) << 24); })
-
-#define __byte_swap_int16_variable(x) \
-({ register u_int16_t __x = (x); \
- (((__x) & 0xff00) >> 8) | (((__x) & 0x00ff) << 8); })
-
-#ifdef __OPTIMIZE__
-
-#define __byte_swap_int32_constant(x) \
- ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-#define __byte_swap_int16_constant(x) \
- ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-#define __byte_swap_int32(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int32_constant(x) : __byte_swap_int32_variable(x))
-#define __byte_swap_int16(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int16_constant(x) : __byte_swap_int16_variable(x))
-
-#else /* __OPTIMIZE__ */
-
-#define __byte_swap_int32(x) __byte_swap_int32_variable(x)
-#define __byte_swap_int16(x) __byte_swap_int16_variable(x)
-
-#endif /* __OPTIMIZE__ */
-#endif /* __GNUC__ */
-
-/*
- * Macros for big/little endian to host and vice versa.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#define betoh32(x) __byte_swap_int32(x)
-#define betoh16(x) __byte_swap_int16(x)
-#define htobe32(x) __byte_swap_int32(x)
-#define htobe16(x) __byte_swap_int16(x)
-#define letoh32(x) (x)
-#define letoh16(x) (x)
-#define htole32(x) (x)
-#define htole16(x) (x)
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
- */
-#define ntohl(x) betoh32(x)
-#define ntohs(x) betoh16(x)
-#define htonl(x) htobe32(x)
-#define htons(x) htobe16(x)
+#ifndef _ALPHA_ENDIAN_H_
+#define _ALPHA_ENDIAN_H_
-#define NTOHL(x) (void)((x) = ntohl(x))
-#define NTOHS(x) (void)((x) = ntohs(x))
-#define HTONL(x) (void)((x) = htonl(x))
-#define HTONS(x) (void)((x) = htons(x))
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-#endif /* !_POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
+#endif /* _ALPHA_ENDIAN_H_ */
diff --git a/sys/arch/amiga/include/endian.h b/sys/arch/amiga/include/endian.h
index bfd856c0de2..0fd359c357b 100644
--- a/sys/arch/amiga/include/endian.h
+++ b/sys/arch/amiga/include/endian.h
@@ -1,9 +1,9 @@
-/* $OpenBSD: endian.h,v 1.2 1996/11/25 13:11:14 niklas Exp $ */
+/* $OpenBSD: endian.h,v 1.3 1997/11/09 23:05:01 niklas Exp $ */
/* $NetBSD: endian.h,v 1.7 1994/10/26 02:06:09 cgd Exp $ */
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
+#ifndef _AMIGA_ENDIAN_H_
+#define _AMIGA_ENDIAN_H_
#include <m68k/endian.h>
-#endif
+#endif /* _AMIGA_ENDIAN_H */
diff --git a/sys/arch/arc/include/endian.h b/sys/arch/arc/include/endian.h
index 2bae3bd2a1c..771c96526ff 100644
--- a/sys/arch/arc/include/endian.h
+++ b/sys/arch/arc/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.5 1997/06/25 12:52:08 grr Exp $ */
-/* $NetBSD: endian.h,v 1.4 1994/10/26 21:09:38 cgd Exp $ */
+/* $OpenBSD: endian.h,v 1.6 1997/11/09 23:05:03 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991, 1993
- * The Regents of the University of California. All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,91 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 8.1 (Berkeley) 6/11/93
- */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-/*
- * Define _NOQUAD if the compiler does NOT support 64-bit integers.
- */
-/* #define _NOQUAD */
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-#define BYTE_ORDER LITTLE_ENDIAN /* ``... Beautiful SPIIIIM!'' */
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-#define NTOHL(x) (void)(x)
-#define NTOHS(x) (void)(x)
-#define HTONL(x) (void)(x)
-#define HTONS(x) (void)(x)
+#ifndef _ARC_ENDIAN_H_
+#define _ARC_ENDIAN_H_
-#else
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-#endif
-#endif /* ! _POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
+#endif /* _ARC_ENDIAN_H_ */
diff --git a/sys/arch/arm32/include/endian.h b/sys/arch/arm32/include/endian.h
index 3d47cfe3638..134ef9b04c6 100644
--- a/sys/arch/arm32/include/endian.h
+++ b/sys/arch/arm32/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.3 1997/04/04 03:05:30 millert Exp $ */
-/* $NetBSD: endian.h,v 1.2 1996/03/14 23:11:10 mark Exp $ */
+/* $OpenBSD: endian.h,v 1.4 1997/11/09 23:05:04 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,68 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)endian.h 7.8 (Berkeley) 4/3/91
- */
-
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- */
-#define NTOHL(x) (x) = ntohl((u_int32_t)(x))
-#define NTOHS(x) (x) = ntohs((u_int16_t)(x))
-#define HTONL(x) (x) = htonl((u_int32_t)(x))
-#define HTONS(x) (x) = htons((u_int16_t)(x))
+#ifndef _ARM32_ENDIAN_H_
+#define _ARM32_ENDIAN_H_
-#endif /* _POSIX_SOURCE */
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-#endif /* _MACHINE_ENDIAN_H_ */
+#endif /* _ARM32_ENDIAN_H_ */
diff --git a/sys/arch/atari/include/endian.h b/sys/arch/atari/include/endian.h
index 8c0a134e452..3ec4f825ee7 100644
--- a/sys/arch/atari/include/endian.h
+++ b/sys/arch/atari/include/endian.h
@@ -1,9 +1,9 @@
-/* $OpenBSD: endian.h,v 1.2 1996/11/25 13:11:20 niklas Exp $ */
+/* $OpenBSD: endian.h,v 1.3 1997/11/09 23:05:05 niklas Exp $ */
/* $NetBSD: endian.h,v 1.1.1.1 1995/03/26 07:12:06 leo Exp $ */
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
+#ifndef _ATARI_ENDIAN_H_
+#define _ATARI_ENDIAN_H_
#include <m68k/endian.h>
-#endif
+#endif /* _ATARI_ENDIAN_h_ */
diff --git a/sys/arch/hp300/include/endian.h b/sys/arch/hp300/include/endian.h
index ffc96e65376..aadb88454d7 100644
--- a/sys/arch/hp300/include/endian.h
+++ b/sys/arch/hp300/include/endian.h
@@ -1,5 +1,10 @@
-/* $OpenBSD: endian.h,v 1.2 1996/11/25 13:11:22 niklas Exp $ */
+/* $OpenBSD: endian.h,v 1.3 1997/11/09 23:05:05 niklas Exp $ */
/* $NetBSD: endian.h,v 1.6 1994/10/26 07:26:22 cgd Exp $ */
+#ifndef _HP300_ENDIAN_H_
+#define _HP300_ENDIAN_H_
+
/* Just use the common m68k definition */
#include <m68k/endian.h>
+
+#endif /* _HP300_ENDIAN_H_ */
diff --git a/sys/arch/i386/include/endian.h b/sys/arch/i386/include/endian.h
index 37420cd889f..3c671f6cf96 100644
--- a/sys/arch/i386/include/endian.h
+++ b/sys/arch/i386/include/endian.h
@@ -1,10 +1,7 @@
-/* $OpenBSD: endian.h,v 1.6 1997/04/04 03:05:31 millert Exp $ */
-/* $NetBSD: endian.h,v 1.16 1995/06/01 17:19:18 mycroft Exp $ */
+/* $OpenBSD: endian.h,v 1.7 1997/11/09 23:05:06 niklas Exp $ */
-/*
- * Copyright (c) 1995 Charles M. Hannum. All rights reserved.
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -16,126 +13,57 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.8 (Berkeley) 4/3/91
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _I386_ENDIAN_H_
-#define _I386_ENDIAN_H_
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
+#define _I386_ENDIAN_H_
#ifdef __GNUC__
#if defined(_KERNEL) && !defined(I386_CPU)
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __x = (x); \
- __asm ("bswap %1" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
+#define __swap32md(x) ({ \
+ u_int32_t __x = (x); \
+ \
+ __asm ("bswap %1" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
#else
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __x = (x); \
- __asm ("rorw $8, %w1\n\trorl $16, %1\n\trorw $8, %w1" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
-#endif /* _KERNEL && ... */
-
-#define __byte_swap_int16_variable(x) \
-({ register u_int16_t __x = (x); \
- __asm ("rorw $8, %w1" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
-
-#ifdef __OPTIMIZE__
-
-#define __byte_swap_int32_constant(x) \
- ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-#define __byte_swap_int16_constant(x) \
- ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-#define __byte_swap_int32(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int32_constant(x) : __byte_swap_int32_variable(x))
-#define __byte_swap_int16(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int16_constant(x) : __byte_swap_int16_variable(x))
-
-#else /* __OPTIMIZE__ */
-
-#define __byte_swap_int32(x) __byte_swap_int32_variable(x)
-#define __byte_swap_int16(x) __byte_swap_int16_variable(x)
-
-#endif /* __OPTIMIZE__ */
-
-#define ntohl(x) __byte_swap_int32(x)
-#define ntohs(x) __byte_swap_int16(x)
-#define htonl(x) __byte_swap_int32(x)
-#define htons(x) __byte_swap_int16(x)
+#define __swap32md(x) ({ \
+ u_int32_t __x = (x); \
+ \
+ __asm ("rorw $8, %w1; rorl $16, %1; rorw $8, %w1" : \
+ "=r" (__x) : "0" (__x)); \
+ __x; \
+})
+#endif /* _KERNEL && !I386_CPU */
+
+#define __swap16md(x) ({ \
+ u_int16_t __x = (x); \
+ \
+ __asm ("rorw $8, %w1" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
+
+/* Tell sys/endian.h we have MD variants of the swap macros. */
+#define MD_SWAP
#endif /* __GNUC__ */
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-/*
- * Macros for network/external number representation conversion.
- */
-#define NTOHL(x) (x) = ntohl((u_int32_t)(x))
-#define NTOHS(x) (x) = ntohs((u_int16_t)(x))
-#define HTONL(x) (x) = htonl((u_int32_t)(x))
-#define HTONS(x) (x) = htons((u_int16_t)(x))
-
-#endif /* _POSIX_SOURCE */
-
-#endif /* !_I386_ENDIAN_H_ */
+#endif /* _I386_ENDIAN_H_ */
diff --git a/sys/arch/kbus/include/endian.h b/sys/arch/kbus/include/endian.h
index 508d470b226..1eb417ab2f2 100644
--- a/sys/arch/kbus/include/endian.h
+++ b/sys/arch/kbus/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.1.1.1 1997/10/14 07:25:30 gingold Exp $ */
-/* $NetBSD: endian.h,v 1.3 1996/02/13 17:04:58 christos Exp $ */
+/* $OpenBSD: endian.h,v 1.2 1997/11/09 23:05:07 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,75 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.7 (Berkeley) 4/3/91
- */
-
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
-
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER BIG_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-
-#define NTOHL(x) (void) (x)
-#define NTOHS(x) (void) (x)
-#define HTONL(x) (void) (x)
-#define HTONS(x) (void) (x)
-#else
+#ifndef _KBUS_ENDIAN_H_
+#define _KBUS_ENDIAN_H_
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-#endif
+#define BYTE_ORDER 4321
+#include <sys/endian.h>
-#endif /* _MACHINE_ENDIAN_H_ */
+#endif /* _KBUS_ENDIAN_H_ */
diff --git a/sys/arch/m68k/include/endian.h b/sys/arch/m68k/include/endian.h
index b9514134c68..c1963970b53 100644
--- a/sys/arch/m68k/include/endian.h
+++ b/sys/arch/m68k/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.8 1997/06/25 12:52:09 grr Exp $ */
-/* $NetBSD: endian.h,v 1.10 1996/10/13 02:59:55 christos Exp $ */
+/* $OpenBSD: endian.h,v 1.9 1997/11/09 23:05:09 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,148 +13,45 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.7 (Berkeley) 4/3/91
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _M68K_ENDIAN_H_
#define _M68K_ENDIAN_H_
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER BIG_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-#if 0
-/*
- * prototypes supplied for documentation purposes solely
- */
-u_int32_t htobe32 __P((u_int32_t));
-u_int16_t htobe16 __P((u_int16_t));
-u_int32_t betoh32 __P((u_int32_t));
-u_int16_t betoh16 __P((u_int16_t));
-
-u_int32_t htole32 __P((u_int32_t));
-u_int16_t htole16 __P((u_int16_t));
-u_int32_t letoh32 __P((u_int32_t));
-u_int16_t letoh16 __P((u_int16_t));
-
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-#endif
-__END_DECLS
-
#ifdef __GNUC__
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __x = (x); \
- __asm ("rorw #8, %0; swap %0; rorw #8, %0" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
-
-#define __byte_swap_int16_variable(x) \
-({ register u_int16_t __x = (x); \
- __asm ("rorw #8, %0" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
-
-#ifdef __OPTIMIZE__
+#define __swap32md(x) ({ \
+ register u_int32_t __x = (x); \
+ __asm ("rorw #8, %0; swap %0; rorw #8, %0" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
-#define __byte_swap_int32_constant(x) \
- ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-#define __byte_swap_int16_constant(x) \
- ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-#define __byte_swap_int32(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int32_constant(x) : __byte_swap_int32_variable(x))
-#define __byte_swap_int16(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int16_constant(x) : __byte_swap_int16_variable(x))
+#define __swap16md(x) ({ \
+ register u_int16_t __x = (x); \
+ __asm ("rorw #8, %0" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
-#else /* __OPTIMIZE__ */
+/* Tell sys/endian.h we have MD variants of the swap macros. */
+#define MD_SWAP
-#define __byte_swap_int32(x) __byte_swap_int32_variable(x)
-#define __byte_swap_int16(x) __byte_swap_int16_variable(x)
-
-#endif /* __OPTIMIZE__ */
#endif /* __GNUC__ */
-/*
- * Macros for big/little endian to host and vice versa.
- */
-#define betoh32(x) (x)
-#define betoh16(x) (x)
-#define htobe32(x) (x)
-#define htobe16(x) (x)
-
-#define letoh32(x) __byte_swap_int32(x)
-#define letoh16(x) __byte_swap_int16(x)
-#define htole32(x) __byte_swap_int32(x)
-#define htole16(x) __byte_swap_int16(x)
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
- */
-#define ntohl(x) betoh32(x)
-#define ntohs(x) betoh16(x)
-#define htonl(x) htobe32(x)
-#define htons(x) htobe16(x)
-
-#define NTOHL(x) (void)(x)
-#define NTOHS(x) (void)(x)
-#define HTONL(x) (void)(x)
-#define HTONS(x) (void)(x)
-
-#endif /* _POSIX_SOURCE */
+#define BYTE_ORDER 4321
+#include <sys/endian.h>
#endif /* _M68K_ENDIAN_H_ */
diff --git a/sys/arch/mac68k/include/endian.h b/sys/arch/mac68k/include/endian.h
index 8a18b27e41c..1893ed3dbc7 100644
--- a/sys/arch/mac68k/include/endian.h
+++ b/sys/arch/mac68k/include/endian.h
@@ -1,4 +1,9 @@
-/* $OpenBSD: endian.h,v 1.2 1996/05/26 18:35:48 briggs Exp $ */
+/* $OpenBSD: endian.h,v 1.3 1997/11/09 23:05:09 niklas Exp $ */
/* $NetBSD: endian.h,v 1.5 1994/10/26 08:46:28 cgd Exp $ */
+#ifndef _MAC68K_ENDIAN_H_
+#define _MAC68K_ENDIAN_H_
+
#include <m68k/endian.h>
+
+#endif /* _MAC68K_ENDIAN_H */
diff --git a/sys/arch/mvme68k/include/endian.h b/sys/arch/mvme68k/include/endian.h
index 03eb53ac558..f30117c7c8a 100644
--- a/sys/arch/mvme68k/include/endian.h
+++ b/sys/arch/mvme68k/include/endian.h
@@ -1,4 +1,9 @@
-/* $OpenBSD: endian.h,v 1.3 1996/04/28 10:56:15 deraadt Exp $ */
+/* $OpenBSD: endian.h,v 1.4 1997/11/09 23:05:10 niklas Exp $ */
+
+#ifndef _MVME68K_ENDIAN_H_
+#define _MVME68K_ENDIAN_H_
/* Just use the common m68k definition */
#include <m68k/endian.h>
+
+#endif /* _MVME68K_ENDIAN_H_ */
diff --git a/sys/arch/mvme88k/include/endian.h b/sys/arch/mvme88k/include/endian.h
index 5fa99cefc7a..198cc050e2f 100644
--- a/sys/arch/mvme88k/include/endian.h
+++ b/sys/arch/mvme88k/include/endian.h
@@ -1,6 +1,7 @@
-/*
- * Copyright (c) 1987, 1991, 1993
- * The Regents of the University of California. All rights reserved.
+/* $OpenBSD: endian.h,v 1.8 1997/11/09 23:05:11 niklas Exp $ */
+
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -12,89 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)endian.h 8.1 (Berkeley) 6/11/93
- * $Id: endian.h,v 1.7 1997/06/25 12:52:10 grr Exp $
- */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, 88000 ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-#define BYTE_ORDER BIG_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-
-#define NTOHL(x) (void)(x)
-#define NTOHS(x) (void)(x)
-#define HTONL(x) (void)(x)
-#define HTONS(x) (void)(x)
-#else
+#ifndef _MVME88K_ENDIAN_H_
+#define _MVME88K_ENDIAN_H_
-#define NTOHL(x) (x) = ntohl((u_long)x)
-#define NTOHS(x) (x) = ntohs((u_short)x)
-#define HTONL(x) (x) = htonl((u_long)x)
-#define HTONS(x) (x) = htons((u_short)x)
+#define BYTE_ORDER 4321
+#include <sys/endian.h>
-#endif
-#endif /* ! _POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
+#endif /* _MVME88K_ENDIAN_H_ */
diff --git a/sys/arch/pc532/include/endian.h b/sys/arch/pc532/include/endian.h
index 388513c91f8..014e749daaf 100644
--- a/sys/arch/pc532/include/endian.h
+++ b/sys/arch/pc532/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.3 1997/04/04 03:05:33 millert Exp $ */
-/* $NetBSD: endian.h,v 1.8 1995/06/18 07:13:46 phil Exp $ */
+/* $OpenBSD: endian.h,v 1.4 1997/11/09 23:05:12 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,117 +13,47 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.8 (Berkeley) 4/3/91
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _PC532_ENDIAN_H_
#define _PC532_ENDIAN_H_
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax, ns32000 */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-
#ifdef __GNUC__
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __x = (x); \
- __asm ("rotw 8,%1; rotd 16,%1; rotw 8,%1" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
+#define __swap32md(x) ({ \
+ register u_int32_t __x = (x); \
+\
+ __asm ("rotw 8,%1; rotd 16,%1; rotw 8,%1" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
-#define __byte_swap_int16_variable(x) \
-({ register u_int16_t __x = (x); \
- __asm ("rotw 8,%1" \
- : "=r" (__x) \
- : "0" (__x)); \
- __x; })
+#define __swap16md(x) ({ \
+ register u_int16_t __x = (x); \
+\
+ __asm ("rotw 8,%1" : "=r" (__x) : "0" (__x)); \
+ __x; \
+})
-
-#ifdef __OPTIMIZE__
-
-#define __byte_swap_int32_constant(x) \
- ((((x) & 0xff000000) >> 24) | \
- (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | \
- (((x) & 0x000000ff) << 24))
-#define __byte_swap_int16__constant(x) \
- ((((x) & 0xff00) >> 8) | \
- (((x) & 0x00ff) << 8))
-#define __byte_swap_int32(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int32_constant(x) : __byte_swap_int32_variable(x))
-#define __byte_swap_int16(x) \
- (__builtin_constant_p((x)) ? \
- __byte_swap_int16_constant(x) : __byte_swap_int16_variable(x))
-
-#else /* __OPTIMIZE__ */
-
-#define __byte_swap_int32(x) __byte_swap_int32_variable(x)
-#define __byte_swap_int16(x) __byte_swap_int16_variable(x)
-
-#endif /* __OPTIMIZE__ */
-
-#define ntohl(x) __byte_swap_int32(x)
-#define ntohs(x) __byte_swap_int16(x)
-#define htonl(x) __byte_swap_int32(x)
-#define htons(x) __byte_swap_int16(x)
+/* Tell sys/endian.h we have MD variants of the swap macros. */
+#define MD_SWAP
#endif /* __GNUC__ */
-
-/*
- * Macros for network/external number representation conversion.
- */
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-
-#endif /* _POSIX_SOURCE */
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
#endif /* _PC532_ENDIAN_H_ */
diff --git a/sys/arch/pmax/include/endian.h b/sys/arch/pmax/include/endian.h
index 60cac2a0a72..dd5718af3eb 100644
--- a/sys/arch/pmax/include/endian.h
+++ b/sys/arch/pmax/include/endian.h
@@ -1,8 +1,7 @@
-/* $NetBSD: endian.h,v 1.8 1996/10/13 20:59:02 mhitch Exp $ */
+/* $OpenBSD: endian.h,v 1.11 1997/11/09 23:05:13 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991, 1993
- * The Regents of the University of California. All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -14,92 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 8.1 (Berkeley) 6/11/93
- */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-/*
- * Define _NOQUAD if the compiler does NOT support 64-bit integers.
- */
-/* #define _NOQUAD */
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-#include <machine/types.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-#define NTOHL(x) (void)(x)
-#define NTOHS(x) (void)(x)
-#define HTONL(x) (void)(x)
-#define HTONS(x) (void)(x)
+#ifndef _PMAX_ENDIAN_H_
+#define _PMAX_ENDIAN_H_
-#else
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-#endif
-#endif /* ! _POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
+#endif /* _PMAX_ENDIAN_H_ */
diff --git a/sys/arch/powerpc/include/endian.h b/sys/arch/powerpc/include/endian.h
index 979a90f125d..12e3e5ca950 100644
--- a/sys/arch/powerpc/include/endian.h
+++ b/sys/arch/powerpc/include/endian.h
@@ -1,8 +1,8 @@
-/* $OpenBSD: endian.h,v 1.8 1997/10/13 10:53:43 pefo Exp $ */
+/* $OpenBSD: endian.h,v 1.9 1997/11/09 23:05:15 niklas Exp $ */
-/*
- * Copyright (c) 1997 Per Fogelstrom
- *
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -13,79 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed under OpenBSD by
- * Per Fogelstrom, Opsycon AB, Sweden.
+ * This product includes software developed by Niklas Hallqvist.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
-
-#ifndef _POSIX_SOURCE
-
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-
-/*
- * Byte order definition. Byte numbers given in increasing address order.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, NS32K */
-#define BIG_ENDIAN 4321 /* MSB first: M68K */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-#define BYTE_ORDER BIG_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion where
- * network/external is defined to be in BIG_ENDIAN byte order.
- *
- * *NOTE* That the macros are supposed to work on the arrgument (x) and
- * thus should *NOT* be used in assignments such as 'foo=HTONS(bar)'.
- */
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-
-#define NTOHL(x) (void) (x)
-#define NTOHS(x) (void) (x)
-#define HTONL(x) (void) (x)
-#define HTONS(x) (void) (x)
-#else
+#ifndef _POWERPC_ENDIAN_H_
+#define _POWERPC_ENDIAN_H_
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-#endif
+#define BYTE_ORDER 4321
+#include <sys/endian.h>
-#endif /* _POSIX_SOURCE */
-#endif /* _MACHINE_ENDIAN_H_ */
+#endif /* _POWERPC_ENDIAN_H_ */
diff --git a/sys/arch/sparc/include/endian.h b/sys/arch/sparc/include/endian.h
index 302cc658d93..2a995812c47 100644
--- a/sys/arch/sparc/include/endian.h
+++ b/sys/arch/sparc/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.7 1997/08/08 08:26:15 downsj Exp $ */
-/* $NetBSD: endian.h,v 1.6 1996/10/11 00:43:00 christos Exp $ */
+/* $OpenBSD: endian.h,v 1.8 1997/11/09 23:05:16 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,82 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.7 (Berkeley) 4/3/91
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef _MACHINE_ENDIAN_H_
-#define _MACHINE_ENDIAN_H_
-
-#define _QUAD_HIGHWORD 0
-#define _QUAD_LOWWORD 1
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER BIG_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
- */
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-
-#define NTOHL(x) (void) (x)
-#define NTOHS(x) (void) (x)
-#define HTONL(x) (void) (x)
-#define HTONS(x) (void) (x)
-
-#else
+#ifndef _SPARC_ENDIAN_H_
+#define _SPARC_ENDIAN_H_
-#define NTOHL(x) (x) = ntohl((in_addr_t)x)
-#define NTOHS(x) (x) = ntohs((in_port_t)x)
-#define HTONL(x) (x) = htonl((in_addr_t)x)
-#define HTONS(x) (x) = htons((in_port_t)x)
-#endif
+#define BYTE_ORDER 4321
+#include <sys/endian.h>
-#endif /* _MACHINE_ENDIAN_H_ */
+#endif /* _SPARC_ENDIAN_H_ */
diff --git a/sys/arch/sun3/include/endian.h b/sys/arch/sun3/include/endian.h
index 4725a83ab43..6fb98ea59ab 100644
--- a/sys/arch/sun3/include/endian.h
+++ b/sys/arch/sun3/include/endian.h
@@ -1,4 +1,9 @@
-/* $OpenBSD: endian.h,v 1.2 1996/11/25 13:11:37 niklas Exp $ */
+/* $OpenBSD: endian.h,v 1.3 1997/11/09 23:05:17 niklas Exp $ */
/* $NetBSD: endian.h,v 1.6 1994/11/21 21:33:37 gwr Exp $ */
+#ifndef _SUN3_ENDIAN_H_
+#define _SUN3_ENDIAN_H_
+
#include <m68k/endian.h>
+
+#endif /* _SUN3_ENDIAN_H */
diff --git a/sys/arch/vax/include/endian.h b/sys/arch/vax/include/endian.h
index 90707f9cec5..9be228a194e 100644
--- a/sys/arch/vax/include/endian.h
+++ b/sys/arch/vax/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.6 1997/04/04 03:17:06 millert Exp $ */
-/* $NetBSD: endian.h,v 1.8 1996/10/13 03:28:00 christos Exp $ */
+/* $OpenBSD: endian.h,v 1.7 1997/11/09 23:05:18 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991 Regents of the University of California.
- * All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,102 +13,50 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 7.8 (Berkeley) 4/3/91
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _VAX_ENDIAN_H_
#define _VAX_ENDIAN_H_
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in int32_t */
-
-#define BYTE_ORDER LITTLE_ENDIAN
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
#ifdef __GNUC__
-#define __byte_swap_int32_variable(x) \
-({ register u_int32_t __y, __x = (x); \
- \
- __asm ("rotl $-8, %1, %0; \
- insv %0, $16, $8, %0; \
- rotl $8, %1, r1; \
- movb r1, %0" \
- : "&=r" (__y) \
- : "r" (__x) \
- : "r1", "cc" ); \
- __y; })
-
-#define __byte_swap_int16_variable(x) \
-({ register u_int16_t __y, __x = (x); \
- \
- __asm ("rotl $8, %1, %0; \
- rotl $-8, %1, r1; \
- movb r1, %0; \
- movzwl %0, %0" \
- : "&=r" (__y) \
- : "r" (__x) \
- : "r1", "cc" ); \
- __y; })
-
-
-#define __byte_swap_int32(x) __byte_swap_int32_variable(x)
-#define __byte_swap_int16(x) __byte_swap_int16_variable(x)
-
-#define ntohl(x) __byte_swap_int32(x)
-#define ntohs(x) __byte_swap_int16(x)
-#define htonl(x) __byte_swap_int32(x)
-#define htons(x) __byte_swap_int16(x)
+#define __swap32md(x) ({ \
+ u_int32_t __y, __x = (x); \
+ \
+ __asm ("rotl $-8, %1, %0; insv %0, $16, $8, %0; " \
+ "rotl $8, %1, r1; movb r1, %0" : \
+ "&=r" (__y) : "r" (__x) : "r1", "cc"); \
+ __y; \
+})
+
+#define __swap16md(x) ({ \
+ u_int16_t __y, __x = (x); \
+ \
+ __asm ("rotl $8, %1, %0; rotl $-8, %1, r1; movb r1, %0; " \
+ "movzwl %0, %0" : "&=r" (__y) : "r" (__x) : "r1", "cc"); \
+ __y; \
+})
+
+/* Tell sys/endian.h we have MD variants of the swap macros. */
+#define MD_SWAP
#endif /* __GNUC__ */
-/*
- * Macros for network/external number representation conversion.
- */
-#define NTOHL(x) (x) = ntohl((u_int32_t)(x))
-#define NTOHS(x) (x) = ntohs((u_int16_t)(x))
-#define HTONL(x) (x) = htonl((u_int32_t)(x))
-#define HTONS(x) (x) = htons((u_int16_t)(x))
-
-#endif /* _POSIX_SOURCE */
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
#endif /* _VAX_ENDIAN_H_ */
diff --git a/sys/arch/wgrisc/include/endian.h b/sys/arch/wgrisc/include/endian.h
index b8899c077cf..f4485789018 100644
--- a/sys/arch/wgrisc/include/endian.h
+++ b/sys/arch/wgrisc/include/endian.h
@@ -1,9 +1,7 @@
-/* $OpenBSD: endian.h,v 1.4 1997/06/25 12:52:11 grr Exp $ */
-/* $NetBSD: endian.h,v 1.4 1994/10/26 21:09:38 cgd Exp $ */
+/* $OpenBSD: endian.h,v 1.5 1997/11/09 23:05:19 niklas Exp $ */
-/*
- * Copyright (c) 1987, 1991, 1993
- * The Regents of the University of California. All rights reserved.
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,91 +13,26 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)endian.h 8.1 (Berkeley) 6/11/93
- */
-
-#ifndef _ENDIAN_H_
-#define _ENDIAN_H_
-
-/*
- * Define _NOQUAD if the compiler does NOT support 64-bit integers.
- */
-/* #define _NOQUAD */
-
-/*
- * Define the order of 32-bit words in 64-bit words.
- */
-#define _QUAD_HIGHWORD 1
-#define _QUAD_LOWWORD 0
-
-#ifndef _POSIX_SOURCE
-/*
- * Definitions for byte order, according to byte significance from low
- * address to high.
- */
-#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
-#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
-#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
-
-#define BYTE_ORDER LITTLE_ENDIAN /* ``... Beautiful SPIIIIM!'' */
-
-#include <sys/cdefs.h>
-
-typedef u_int32_t in_addr_t;
-typedef u_int16_t in_port_t;
-
-__BEGIN_DECLS
-u_int32_t htonl __P((u_int32_t));
-u_int16_t htons __P((u_int16_t));
-u_int32_t ntohl __P((u_int32_t));
-u_int16_t ntohs __P((u_int16_t));
-__END_DECLS
-
-/*
- * Macros for network/external number representation conversion.
- *
- * The way this works is that HTONS(x) modifies x and *can't* be used as
- * and rvalue i.e. foo=HTONS(bar) is wrong. Likewise x=htons(x) should
- * never be used where HTONS(x) will serve i.e. foo=htons(foo) is wrong.
- * Failing to observe these rule will result in code that appears to work
- * and probably does work, but generates gcc warnings on architectures
- * where the macros are used to optimize away an unneeded conversion.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
-#define ntohl(x) (x)
-#define ntohs(x) (x)
-#define htonl(x) (x)
-#define htons(x) (x)
-#define NTOHL(x) (void)(x)
-#define NTOHS(x) (void)(x)
-#define HTONL(x) (void)(x)
-#define HTONS(x) (void)(x)
+#ifndef _WGRISC_ENDIAN_H_
+#define _WGRISC_ENDIAN_H_
-#else
+#define BYTE_ORDER 1234
+#include <sys/endian.h>
-#define NTOHL(x) (x) = ntohl((u_int32_t)x)
-#define NTOHS(x) (x) = ntohs((u_int16_t)x)
-#define HTONL(x) (x) = htonl((u_int32_t)x)
-#define HTONS(x) (x) = htons((u_int16_t)x)
-#endif
-#endif /* ! _POSIX_SOURCE */
-#endif /* !_ENDIAN_H_ */
+#endif /* _WGRISC_ENDIAN_H_ */
diff --git a/sys/sys/endian.h b/sys/sys/endian.h
new file mode 100644
index 00000000000..7c24754f76c
--- /dev/null
+++ b/sys/sys/endian.h
@@ -0,0 +1,162 @@
+/* $OpenBSD: endian.h,v 1.1 1997/11/09 23:04:58 niklas Exp $ */
+
+/*-
+ * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Niklas Hallqvist.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Generic definitions for little- and big-endian systems. Other endianesses
+ * has to be dealt with in the specific machine/endian.h file for that port.
+ *
+ * This file is meant to be included from a little- or big-endian port's
+ * machine/endian.h after setting BYTE_ORDER to either 1234 for little endian
+ * or 4321 for big..
+ */
+
+#ifndef _SYS_ENDIAN_H_
+#define _SYS_ENDIAN_H_
+
+#ifndef _POSIX_SOURCE
+
+#include <sys/cdefs.h>
+
+#define LITTLE_ENDIAN 1234
+
+
+#define BIG_ENDIAN 4321
+#define PDP_ENDIAN 3412
+
+typedef u_int32_t in_addr_t;
+typedef u_int16_t in_port_t;
+
+#ifdef __GNUC__
+
+#define __swap16gen(x) ({ u_int16_t y = (x); (u_int16_t)(y << 8 | y >> 8); })
+#define __swap32gen(x) ({ \
+ u_int32_t y = (x); \
+ \
+ (u_int32_t)(y << 24 | (y & 0xff00) << 8 | (y & 0xff0000) >> 8 | \
+ y >> 24); \
+})
+
+#else /* __GNUC__ */
+
+/* Note that these macros evaluates their arguments several times. */
+#define __swap16gen(x) (u_int16_t)((u_int16_t)(x) << 8 | (u_int16_t)(x) >> 8)
+#define __swap32gen(x) \
+ (u_int32_t)((u_int32_t)(x) << 24 | ((u_int32_t)(x) & 0xff00) << 8 | \
+ ((u_int32_t)(x) & 0xff0000) >> 8 | (u_int32_t)(x) >> 24)
+
+#endif /* __GNUC__ */
+
+/*
+ * Define MD_SWAP if you provide swap{16,32}md functions/macros that are
+ * optimized for your architecture, These will be used for swap{16,32}
+ * unless the argument is a constant and we are using GCC, where we can
+ * take advantage of the CSE phase much better by using the generic version.
+ */
+#ifdef MD_SWAP
+#if __GNUC__
+
+#define swap16(x) ({ \
+ u_int16_t __x = (x); \
+ \
+ __builtin_constant_p(x) ? __swap16gen(__x) : __swap16md(__x); \
+})
+
+#define swap32(x) ({ \
+ u_int32_t __x = (x); \
+ \
+ __builtin_constant_p(x) ? __swap32gen(__x) : __swap32md(__x); \
+})
+
+#endif /* __GNUC__ */
+
+#else /* MD_SWAP */
+#define swap16 __swap16gen
+#define swap32 __swap32gen
+#endif /* MD_SWAP */
+
+__BEGIN_DECLS
+u_int32_t htobe32 __P((u_int32_t));
+u_int16_t htobe16 __P((u_int16_t));
+u_int32_t betoh32 __P((u_int32_t));
+u_int16_t betoh16 __P((u_int16_t));
+
+u_int32_t htole32 __P((u_int32_t));
+u_int16_t htole16 __P((u_int16_t));
+u_int32_t letoh32 __P((u_int32_t));
+u_int16_t letoh16 __P((u_int16_t));
+__END_DECLS
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+
+#define _QUAD_HIGHWORD 1
+#define _QUAD_LOWWORD 0
+
+#define htobe16 swap16
+#define htobe32 swap32
+#define betoh16 swap16
+#define betoh32 swap32
+
+#define htole16(x) (x)
+#define htole32(x) (x)
+#define letoh16(x) (x)
+#define letoh32(x) (x)
+
+#endif /* BYTE_ORDER */
+
+#if BYTE_ORDER == BIG_ENDIAN
+
+#define _QUAD_HIGHWORD 0
+#define _QUAD_LOWWORD 1
+
+#define htole16 swap16
+#define htole32 swap32
+#define letoh16 swap16
+#define letoh32 swap32
+
+#define htobe16(x) (x)
+#define htobe32(x) (x)
+#define betoh16(x) (x)
+#define betoh32(x) (x)
+
+#endif /* BYTE_ORDER */
+
+#define htons htobe16
+#define htonl htobe32
+#define ntohs betoh16
+#define ntohl betoh32
+
+#define NTOHL(x) (x) = ntohl((u_int32_t)(x))
+#define NTOHS(x) (x) = ntohs((u_int16_t)(x))
+#define HTONL(x) (x) = htonl((u_int32_t)(x))
+#define HTONS(x) (x) = htons((u_int16_t)(x))
+
+#endif /* _POSIX_SOURCE */
+#endif /* _SYS_ENDIAN_H_ */