EGCS fixes. Implement htons as a C macro instead of asm; generates as

good code as the asm implementation _and_ can be optimized.
This commit is contained in:
ragge 1998-11-07 17:22:58 +00:00
parent 6fbd9e0504
commit b6158fa5e3
2 changed files with 12 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: endian.h,v 1.10 1998/08/08 11:18:32 ragge Exp $ */ /* $NetBSD: endian.h,v 1.11 1998/11/07 17:22:58 ragge Exp $ */
/* /*
* Copyright (c) 1987, 1991 Regents of the University of California. * Copyright (c) 1987, 1991 Regents of the University of California.
@ -83,15 +83,10 @@ __END_DECLS
__y; }) __y; })
#define __byte_swap_word_variable(x) \ #define __byte_swap_word_variable(x) \
({ register u_int16_t __y, __x = (x); \ ({ register u_int16_t __x = (x); \
\ \
__asm ("insv %1,$16,$8,%1; \ (u_int16_t)(__x << 8 | __x >> 8); \
ashl $-8,%1,%0" \ })
: "&=r" (__y) \
: "r" (__x) \
: "cc" ); \
__y; })
#define __byte_swap_long(x) __byte_swap_long_variable(x) #define __byte_swap_long(x) __byte_swap_long_variable(x)
#define __byte_swap_word(x) __byte_swap_word_variable(x) #define __byte_swap_word(x) __byte_swap_word_variable(x)

View File

@ -1,4 +1,4 @@
/* $NetBSD: macros.h,v 1.16 1998/08/08 11:18:33 ragge Exp $ */ /* $NetBSD: macros.h,v 1.17 1998/11/07 17:22:58 ragge Exp $ */
/* /*
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden. * Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
@ -32,7 +32,7 @@
/* All bugs are subject to removal without further notice */ /* All bugs are subject to removal without further notice */
#if !defined(_VAX_MACROS_H_) #if !defined(_VAX_MACROS_H_) && !defined(lint)
#define _VAX_MACROS_H_ #define _VAX_MACROS_H_
/* Here general macros are supposed to be stored */ /* Here general macros are supposed to be stored */
@ -130,7 +130,7 @@ bzero(void *block, u_int len)
static __inline__ int static __inline__ int
memcmp(const void *b1, const void *b2, size_t len) memcmp(const void *b1, const void *b2, size_t len)
{ {
register ret; register int ret;
__asm__ __volatile("cmpc3 %3,(%1),(%2);movl r0,%0" __asm__ __volatile("cmpc3 %3,(%1),(%2);movl r0,%0"
: "=r" (ret) : "=r" (ret)
@ -142,7 +142,7 @@ memcmp(const void *b1, const void *b2, size_t len)
static __inline__ int static __inline__ int
bcmp(const void *b1, const void *b2, size_t len) bcmp(const void *b1, const void *b2, size_t len)
{ {
register ret; register int ret;
__asm__ __volatile("cmpc3 %3,(%1),(%2);movl r0,%0" __asm__ __volatile("cmpc3 %3,(%1),(%2);movl r0,%0"
: "=r" (ret) : "=r" (ret)
@ -155,7 +155,7 @@ bcmp(const void *b1, const void *b2, size_t len)
static __inline__ size_t static __inline__ size_t
strlen(const char *cp) strlen(const char *cp)
{ {
register ret; register size_t ret;
__asm__ __volatile("locc $0,$65535,(%1);subl3 r0,$65535,%0" __asm__ __volatile("locc $0,$65535,(%1);subl3 r0,$65535,%0"
: "=r" (ret) : "=r" (ret)
@ -222,7 +222,7 @@ memchr(const void *cp, int c, size_t len)
static __inline__ int static __inline__ int
strcmp(const char *cp, const char *c2) strcmp(const char *cp, const char *c2)
{ {
register ret; register int ret;
__asm__ __volatile("locc $0,$65535,(%1);subl3 r0,$65535,r0;incl r0; __asm__ __volatile("locc $0,$65535,(%1);subl3 r0,$65535,r0;incl r0;
cmpc3 r0,(%1),(%2);beql 1f;movl $1,r2; cmpc3 r0,(%1),(%2);beql 1f;movl $1,r2;
cmpb (r1),(r3);bcc 1f;movl $-1,r2;1:movl r2,%0" cmpb (r1),(r3);bcc 1f;movl $-1,r2;1:movl r2,%0"
@ -248,7 +248,7 @@ static __inline__ int locc(int mask, char *cp,u_int size){
static __inline__ int static __inline__ int
scanc(u_int size, const u_char *cp, const u_char *table, int mask) scanc(u_int size, const u_char *cp, const u_char *table, int mask)
{ {
register ret; register int ret;
__asm__ __volatile("scanc %1,(%2),(%3),%4;movl r0,%0" __asm__ __volatile("scanc %1,(%2),(%3),%4;movl r0,%0"
: "=g"(ret) : "=g"(ret)
@ -260,7 +260,7 @@ scanc(u_int size, const u_char *cp, const u_char *table, int mask)
static __inline__ int static __inline__ int
skpc(int mask, size_t size, u_char *cp) skpc(int mask, size_t size, u_char *cp)
{ {
register ret; register int ret;
__asm__ __volatile("skpc %1,%2,(%3);movl r0,%0" __asm__ __volatile("skpc %1,%2,(%3);movl r0,%0"
: "=g"(ret) : "=g"(ret)