Browse Source

Some formatting and optimization.

Adam Ierymenko 5 years ago
parent
commit
6af39da61a
4 changed files with 36 additions and 23 deletions
  1. 1 1
      core/Blob.hpp
  2. 1 1
      core/InetAddress.hpp
  3. 15 1
      core/MAC.hpp
  4. 19 20
      core/Utils.hpp

+ 1 - 1
core/Blob.hpp

@@ -88,7 +88,7 @@ struct UniqueID
 	{ return reinterpret_cast<const uint8_t *>(data); }
 
 	ZT_INLINE unsigned long hashCode() const noexcept
-	{ return (unsigned long)data[1]; }
+	{ return (unsigned long)(data[0] ^ data[1]); }
 
 	ZT_INLINE operator bool() const noexcept
 	{ return ((data[0] != 0) && (data[1] != 0)); }

+ 1 - 1
core/InetAddress.hpp

@@ -541,7 +541,7 @@ public:
 			return UniqueID(0, 0);
 		} else {
 			// This should never be reached, but handle it somehow.
-			return UniqueID(Utils::fnv1a32(&as, sizeof(as)), 0);
+			return UniqueID(as.ss.ss_family, Utils::fnv1a32(&as, sizeof(as)));
 		}
 	}
 

+ 15 - 1
core/MAC.hpp

@@ -219,30 +219,44 @@ public:
 	}
 
 	ZT_INLINE MAC &operator=(const uint64_t m) noexcept
-	{ m_mac = m; return *this; }
+	{
+		m_mac = m;
+		return *this;
+	}
 
 	ZT_INLINE bool operator==(const MAC &m) const noexcept
 	{ return (m_mac == m.m_mac); }
+
 	ZT_INLINE bool operator!=(const MAC &m) const noexcept
 	{ return (m_mac != m.m_mac); }
+
 	ZT_INLINE bool operator<(const MAC &m) const noexcept
 	{ return (m_mac < m.m_mac); }
+
 	ZT_INLINE bool operator<=(const MAC &m) const noexcept
 	{ return (m_mac <= m.m_mac); }
+
 	ZT_INLINE bool operator>(const MAC &m) const noexcept
 	{ return (m_mac > m.m_mac); }
+
 	ZT_INLINE bool operator>=(const MAC &m) const noexcept
 	{ return (m_mac >= m.m_mac); }
+
 	ZT_INLINE bool operator==(const uint64_t m) const noexcept
 	{ return (m_mac == m); }
+
 	ZT_INLINE bool operator!=(const uint64_t m) const noexcept
 	{ return (m_mac != m); }
+
 	ZT_INLINE bool operator<(const uint64_t m) const noexcept
 	{ return (m_mac < m); }
+
 	ZT_INLINE bool operator<=(const uint64_t m) const noexcept
 	{ return (m_mac <= m); }
+
 	ZT_INLINE bool operator>(const uint64_t m) const noexcept
 	{ return (m_mac > m); }
+
 	ZT_INLINE bool operator>=(const uint64_t m) const noexcept
 	{ return (m_mac >= m); }
 

+ 19 - 20
core/Utils.hpp

@@ -707,14 +707,7 @@ static ZT_INLINE void copy(void *dest, const void *src) noexcept
 {
 #if defined(ZT_ARCH_X64) && defined(__GNUC__)
 	unsigned long l = L;
-	asm volatile ("rep movsb"
-		: "=D" (dest),
-		"=S" (src),
-		"=c" (l)
-		: "0" (dest),
-		"1" (src),
-		"2" (l)
-		: "memory");
+	asm volatile ("cld ; rep movsb" : "+c"(l), "+S"(src), "+D"(dest));
 #else
 	memcpy(dest, src, L);
 #endif
@@ -730,14 +723,7 @@ static ZT_INLINE void copy(void *dest, const void *src) noexcept
 static ZT_INLINE void copy(void *dest, const void *src, unsigned long len) noexcept
 {
 #if defined(ZT_ARCH_X64) && defined(__GNUC__)
-	asm volatile ("rep movsb"
-		: "=D" (dest),
-		"=S" (src),
-		"=c" (len)
-		: "0" (dest),
-		"1" (src),
-		"2" (len)
-		: "memory");
+	asm volatile ("cld ; rep movsb" : "+c"(len), "+S"(src), "+D"(dest));
 #else
 	memcpy(dest, src, len);
 #endif
@@ -750,8 +736,15 @@ static ZT_INLINE void copy(void *dest, const void *src, unsigned long len) noexc
  * @param dest Memory to zero
  */
 template< unsigned long L >
-static ZT_INLINE void zero(void *const dest) noexcept
-{ memset(dest, 0, L); }
+static ZT_INLINE void zero(void *dest) noexcept
+{
+#if defined(ZT_ARCH_X64) && defined(__GNUC__)
+	unsigned long l = L;
+	asm volatile ("cld ; rep stosb" :"+c" (l), "+D" (dest) : "a" (0));
+#else
+	memset(dest, 0, L);
+#endif
+}
 
 /**
  * Zero memory block whose size is known at run time
@@ -759,8 +752,14 @@ static ZT_INLINE void zero(void *const dest) noexcept
  * @param dest Memory to zero
  * @param len Size in bytes
  */
-static ZT_INLINE void zero(void *const dest, const unsigned long len) noexcept
-{ memset(dest, 0, len); }
+static ZT_INLINE void zero(void *dest, unsigned long len) noexcept
+{
+#if defined(ZT_ARCH_X64) && defined(__GNUC__)
+	asm volatile ("cld ; rep stosb" :"+c" (len), "+D" (dest) : "a" (0));
+#else
+	memset(dest, 0, len);
+#endif
+}
 
 } // namespace Utils