Print this page
5007142 Add ntohll and htonll to sys/byteorder.h
6717509 Need to use bswap/bswapq for byte swap of 64-bit integer on x32/x64
PSARC 2008/474

*** 1078,1088 **** #endif /* DEBUG */ #endif /* __lint */ /* ! * Berkley 4.3 introduced symbolically named interrupt levels * as a way deal with priority in a machine independent fashion. * Numbered priorities are machine specific, and should be * discouraged where possible. * * Note, for the machine specific priorities there are --- 1078,1088 ---- #endif /* DEBUG */ #endif /* __lint */ /* ! * Berkeley 4.3 introduced symbolically named interrupt levels * as a way deal with priority in a machine independent fashion. * Numbered priorities are machine specific, and should be * discouraged where possible. * * Note, for the machine specific priorities there are
*** 1191,1201 **** ENTRY(spl0) SETPRI(0) SET_SIZE(spl0) ! /* splx implentation */ ENTRY(splx) jmp do_splx /* redirect to common splx code */ SET_SIZE(splx) #endif /* __lint */ --- 1191,1201 ---- ENTRY(spl0) SETPRI(0) SET_SIZE(spl0) ! /* splx implementation */ ENTRY(splx) jmp do_splx /* redirect to common splx code */ SET_SIZE(splx) #endif /* __lint */
*** 2025,2089 **** SET_SIZE(curcpup) #endif /* __i386 */ #endif /* __lint */ #if defined(__lint) ! /* ARGSUSED */ uint32_t htonl(uint32_t i) ! { return (0); } - /* ARGSUSED */ uint32_t ntohl(uint32_t i) ! { return (0); } #else /* __lint */ #if defined(__amd64) /* XX64 there must be shorter sequences for this */ ENTRY(htonl) ALTENTRY(ntohl) movl %edi, %eax bswap %eax ret SET_SIZE(ntohl) SET_SIZE(htonl) - #elif defined(__i386) - - ENTRY(htonl) - ALTENTRY(ntohl) - movl 4(%esp), %eax - bswap %eax - ret - SET_SIZE(ntohl) - SET_SIZE(htonl) - - #endif /* __i386 */ - #endif /* __lint */ - - #if defined(__lint) - - /* ARGSUSED */ - uint16_t - htons(uint16_t i) - { return (0); } - - /* ARGSUSED */ - uint16_t - ntohs(uint16_t i) - { return (0); } - - - #else /* __lint */ - - #if defined(__amd64) - /* XX64 there must be better sequences for this */ ENTRY(htons) ALTENTRY(ntohs) movl %edi, %eax bswap %eax --- 2025,2087 ---- SET_SIZE(curcpup) #endif /* __i386 */ #endif /* __lint */ + /* htonll(), ntohll(), htonl(), ntohl(), htons(), ntohs() + * These functions reverse the byte order of the input parameter and returns + * the result. This is to convert the byte order from host byte order + * (little endian) to network byte order (big endian), or vice versa. + */ + #if defined(__lint) ! uint64_t ! htonll(uint64_t i) ! { return (i); } ! ! uint64_t ! ntohll(uint64_t i) ! { return (i); } ! uint32_t htonl(uint32_t i) ! { return (i); } uint32_t ntohl(uint32_t i) ! { return (i); } + uint16_t + htons(uint16_t i) + { return (i); } + + uint16_t + ntohs(uint16_t i) + { return (i); } + #else /* __lint */ #if defined(__amd64) + ENTRY(htonll) + ALTENTRY(ntohll) + movq %rdi, %rax + bswapq %rax + ret + SET_SIZE(ntohll) + SET_SIZE(htonll) + /* XX64 there must be shorter sequences for this */ ENTRY(htonl) ALTENTRY(ntohl) movl %edi, %eax bswap %eax ret SET_SIZE(ntohl) SET_SIZE(htonl) /* XX64 there must be better sequences for this */ ENTRY(htons) ALTENTRY(ntohs) movl %edi, %eax bswap %eax
*** 2092,2101 **** --- 2090,2117 ---- SET_SIZE(ntohs) SET_SIZE(htons) #elif defined(__i386) + ENTRY(htonll) + ALTENTRY(ntohll) + movl 4(%esp), %edx + movl 8(%esp), %eax + bswap %edx + bswap %eax + ret + SET_SIZE(ntohll) + SET_SIZE(htonll) + + ENTRY(htonl) + ALTENTRY(ntohl) + movl 4(%esp), %eax + bswap %eax + ret + SET_SIZE(ntohl) + SET_SIZE(htonl) + ENTRY(htons) ALTENTRY(ntohs) movl 4(%esp), %eax bswap %eax shrl $16, %eax