mirror of
git://git.musl-libc.org/musl
synced 2025-02-25 15:20:24 +00:00
optimize ntohl etc. in terms of bswap functions
we can do this without violating the namespace now that they are macros/inline functions rather than extern functions. the motivation is that gcc was generating giant, slow, horrible code for the old functions, and now generates a single byte-swapping instruction.
This commit is contained in:
parent
c546be175c
commit
c89862660b
@ -1,10 +1,8 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <byteswap.h>
|
||||||
|
|
||||||
uint32_t htonl(uint32_t n)
|
uint32_t htonl(uint32_t n)
|
||||||
{
|
{
|
||||||
union {
|
union { int i; char c; } u = { 1 };
|
||||||
uint8_t b[4];
|
return u.c ? bswap_32(n) : n;
|
||||||
uint32_t i;
|
|
||||||
} u = { { n>>24, n>>16, n>>8, n } };
|
|
||||||
return u.i;
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <byteswap.h>
|
||||||
|
|
||||||
uint16_t htons(uint16_t n)
|
uint16_t htons(uint16_t n)
|
||||||
{
|
{
|
||||||
union {
|
union { int i; char c; } u = { 1 };
|
||||||
uint8_t b[2];
|
return u.c ? bswap_16(n) : n;
|
||||||
uint16_t s;
|
|
||||||
} u = { { n>>8, n } };
|
|
||||||
return u.s;
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <byteswap.h>
|
||||||
|
|
||||||
uint32_t ntohl(uint32_t n)
|
uint32_t ntohl(uint32_t n)
|
||||||
{
|
{
|
||||||
union {
|
union { int i; char c; } u = { 1 };
|
||||||
uint32_t i;
|
return u.c ? bswap_32(n) : n;
|
||||||
uint8_t b[4];
|
|
||||||
} u = { n };
|
|
||||||
return (u.b[0]<<24) | (u.b[1]<<16) | (u.b[2]<<8) | u.b[3];
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <byteswap.h>
|
||||||
|
|
||||||
uint16_t ntohs(uint16_t n)
|
uint16_t ntohs(uint16_t n)
|
||||||
{
|
{
|
||||||
union {
|
union { int i; char c; } u = { 1 };
|
||||||
uint16_t s;
|
return u.c ? bswap_16(n) : n;
|
||||||
uint8_t b[2];
|
|
||||||
} u = { n };
|
|
||||||
return (u.b[0]<<8) | u.b[1];
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user