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