diff options
Diffstat (limited to 'sys/arch/vax/include')
-rw-r--r-- | sys/arch/vax/include/endian.h | 128 |
1 files changed, 37 insertions, 91 deletions
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_ */ |