Prepare bswap support of crt.
git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@481 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/misc/winbs_uint64.c b/mingw-w64-crt/misc/winbs_uint64.c
new file mode 100644
index 0000000..2c6e5db
--- /dev/null
+++ b/mingw-w64-crt/misc/winbs_uint64.c
@@ -0,0 +1,23 @@
+unsigned long long __cdecl _byteswap_uint64(unsigned long long _Int64);
+
+unsigned long long __cdecl _byteswap_uint64(unsigned long long _Int64)
+{
+#ifdef _WIN64
+ unsigned long long retval;
+ __asm__("bswapq %[retval]" : [retval] "=rm" (retval) : "[retval]" (_Int64));
+ return retval;
+#else
+ union {
+ long long int64part;
+ struct {
+ unsigned long lowpart;
+ unsigned long hipart;
+ };
+ } retval;
+ retval.int64part = _Int64;
+ __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
+}
diff --git a/mingw-w64-crt/misc/winbs_ulong.c b/mingw-w64-crt/misc/winbs_ulong.c
new file mode 100644
index 0000000..36e609f
--- /dev/null
+++ b/mingw-w64-crt/misc/winbs_ulong.c
@@ -0,0 +1,8 @@
+unsigned long __cdecl _byteswap_ulong (unsigned long _Long);
+
+unsigned long __cdecl _byteswap_ulong (unsigned long _Long)
+{
+ unsigned long retval;
+ __asm__("bswapl %[retval]" : [retval] "=rm" (retval) : "[retval]" (_Long));
+ return retval;
+}
diff --git a/mingw-w64-crt/misc/winbs_ushort.c b/mingw-w64-crt/misc/winbs_ushort.c
new file mode 100644
index 0000000..3bbd379
--- /dev/null
+++ b/mingw-w64-crt/misc/winbs_ushort.c
@@ -0,0 +1,8 @@
+unsigned short __cdecl _byteswap_ushort(unsigned short _Short);
+
+unsigned short __cdecl _byteswap_ushort(unsigned short _Short)
+{
+ unsigned short retval;
+ __asm__("rorw $8, %w[retval]" : [retval] "=rm" (retval) : "[retval]" (_Short));
+ return retval;
+}