[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