[ros-diffs] [tkreuzer] 35135: implement byteswap intrinsics

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Aug 5 23:25:29 CEST 2008


Author: tkreuzer
Date: Tue Aug  5 16:25:29 2008
New Revision: 35135

URL: http://svn.reactos.org/svn/reactos?rev=35135&view=rev
Log:
implement byteswap intrinsics

Modified:
    branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h

Modified: branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h?rev=35135&r1=35134&r2=35135&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/include/psdk/intrin_x86.h [iso-8859-1] Tue Aug  5 16:25:29 2008
@@ -910,6 +910,44 @@
 	return retval;
 }
 
+static __inline__ __attribute__((always_inline)) unsigned short _byteswap_ushort(unsigned short value)
+{
+	unsigned short retval;
+	__asm__("rorw $8, %w[retval]" : [retval] "=rm" (retval) : "[retval]" (value));
+	return retval;
+}
+
+static __inline__ __attribute__((always_inline)) unsigned long _byteswap_ulong(unsigned long value)
+{
+	unsigned long retval;
+	__asm__("bswapl %[retval]" : [retval] "=rm" (retval) : "[retval]" (value));
+	return retval;
+}
+
+#ifdef _M_AMD64
+static __inline__ __attribute__((always_inline)) unsigned __int64 _byteswap_uint64(unsigned __int64 value)
+{
+	unsigned __int64 retval;
+	__asm__("bswapq %[retval]" : [retval] "=rm" (retval) : "[retval]" (value));
+	return retval;
+}
+#else
+static __inline__ __attribute__((always_inline)) unsigned __int64 _byteswap_uint64(unsigned __int64 value)
+{
+	union {
+		__int64 int64part;
+		struct {
+			unsigned long lowpart;
+			unsigned long hipart;
+		};
+	} retval;
+	retval.int64part = value;
+	__asm__("bswapl %[lowpart]\n"
+	        "bswapl %[hipart]\n"
+	        : [lowpart] "=rm" (retval.hipart), [hipart] "=rm" (retval.lowpart)  : "[lowpart]" (retval.lowpart), "[hipart]" (retval.hipart) );
+	return retval.int64part;
+}
+#endif
 
 /*** 64-bit math ***/
 static __inline__ __attribute__((always_inline)) long long __emul(const int a, const int b)



More information about the Ros-diffs mailing list