Piotr Caban : msvcr90: Added _byteswap_{ushort, ulong, uint64} implementation .
Alexandre Julliard
julliard at winehq.org
Tue Apr 17 13:31:48 CDT 2012
Module: wine
Branch: master
Commit: e24e6eb278f601fcb7ea5086ec5c8dbf38008eae
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e24e6eb278f601fcb7ea5086ec5c8dbf38008eae
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Apr 16 18:11:37 2012 +0200
msvcr90: Added _byteswap_{ushort,ulong,uint64} implementation.
---
dlls/msvcr100/msvcr100.spec | 6 +++---
dlls/msvcr80/msvcr80.spec | 6 +++---
dlls/msvcr90/msvcr90.c | 25 +++++++++++++++++++++++++
dlls/msvcr90/msvcr90.spec | 6 +++---
dlls/msvcr90/tests/msvcr90.c | 14 ++++++++++++++
5 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index ade980c..bf3a068 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -517,9 +517,9 @@
@ cdecl _beep(long long) msvcrt._beep
@ cdecl _beginthread(ptr long ptr) msvcrt._beginthread
@ cdecl _beginthreadex(ptr long ptr ptr long ptr) msvcrt._beginthreadex
-@ stub _byteswap_uint64
-@ stub _byteswap_ulong
-@ stub _byteswap_ushort
+@ cdecl _byteswap_uint64(int64) msvcr90._byteswap_uint64
+@ cdecl _byteswap_ulong(long) msvcr90._byteswap_ulong
+@ cdecl _byteswap_ushort(long) msvcr90._byteswap_ushort
@ cdecl _c_exit() msvcrt._c_exit
@ cdecl _cabs(long) msvcrt._cabs
@ cdecl _callnewh(long) msvcrt._callnewh
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index d4d7a86..8686359 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -356,9 +356,9 @@
@ cdecl _beep(long long) msvcrt._beep
@ cdecl _beginthread(ptr long ptr) msvcrt._beginthread
@ cdecl _beginthreadex(ptr long ptr ptr long ptr) msvcrt._beginthreadex
-@ stub _byteswap_uint64
-@ stub _byteswap_ulong
-@ stub _byteswap_ushort
+@ cdecl _byteswap_uint64(int64) msvcr90._byteswap_uint64
+@ cdecl _byteswap_ulong(long) msvcr90._byteswap_ulong
+@ cdecl _byteswap_ushort(long) msvcr90._byteswap_ushort
@ cdecl _c_exit() msvcrt._c_exit
@ cdecl _cabs(long) msvcrt._cabs
@ cdecl _callnewh(long) msvcrt._callnewh
diff --git a/dlls/msvcr90/msvcr90.c b/dlls/msvcr90/msvcr90.c
index 663dd37..2caf60d 100644
--- a/dlls/msvcr90/msvcr90.c
+++ b/dlls/msvcr90/msvcr90.c
@@ -366,3 +366,28 @@ int CDECL MSVCR90__vswprintf_p(wchar_t *buffer, size_t length, const wchar_t *fo
{
return _vswprintf_p_l(buffer, length, format, NULL, args);
}
+
+/*********************************************************************
+ * _byteswap_ushort (MSVCR90.@)
+ */
+unsigned short CDECL _byteswap_ushort(unsigned short s)
+{
+ return (s<<8) + (s>>8);
+}
+
+/*********************************************************************
+ * _byteswap_ulong (MSVCR90.@)
+ */
+unsigned long CDECL _byteswap_ulong(unsigned long l)
+{
+ return (l<<24) + ((l<<8)&0xFF0000) + ((l>>8)&0xFF00) + (l>>24);
+}
+
+/*********************************************************************
+ * _byteswap_uint64 (MSVCR90.@)
+ */
+unsigned __int64 CDECL _byteswap_uint64(unsigned __int64 i)
+{
+ return (i<<56) + ((i&0xFF00)<<40) + ((i&0xFF0000)<<24) + ((i&0xFF000000)<<8) +
+ ((i>>8)&0xFF000000) + ((i>>24)&0xFF0000) + ((i>>40)&0xFF00) + (i>>56);
+}
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 70bc2b3..6aefe20 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -348,9 +348,9 @@
@ cdecl _beep(long long) msvcrt._beep
@ cdecl _beginthread(ptr long ptr) msvcrt._beginthread
@ cdecl _beginthreadex(ptr long ptr ptr long ptr) msvcrt._beginthreadex
-@ stub _byteswap_uint64
-@ stub _byteswap_ulong
-@ stub _byteswap_ushort
+@ cdecl _byteswap_uint64(int64)
+@ cdecl _byteswap_ulong(long)
+@ cdecl _byteswap_ushort(long)
@ cdecl _c_exit() msvcrt._c_exit
@ cdecl _cabs(long) msvcrt._cabs
@ cdecl _callnewh(long) msvcrt._callnewh
diff --git a/dlls/msvcr90/tests/msvcr90.c b/dlls/msvcr90/tests/msvcr90.c
index 09b4a40..dc15472 100644
--- a/dlls/msvcr90/tests/msvcr90.c
+++ b/dlls/msvcr90/tests/msvcr90.c
@@ -109,6 +109,7 @@ static int (__cdecl *p_fileno)(FILE*);
static int (__cdecl *p_feof)(FILE*);
static int (__cdecl *p_ferror)(FILE*);
static int (__cdecl *p_flsbuf)(int, FILE*);
+static unsigned long (__cdecl *p_byteswap_ulong)(unsigned long);
/* type info */
@@ -286,6 +287,7 @@ static BOOL init(void)
SET(p_feof, "feof");
SET(p_ferror, "ferror");
SET(p_flsbuf, "_flsbuf");
+ SET(p_byteswap_ulong, "_byteswap_ulong");
if (sizeof(void *) == 8)
{
SET(p_type_info_name_internal_method, "?_name_internal_method at type_info@@QEBAPEBDPEAU__type_info_node@@@Z");
@@ -1137,6 +1139,17 @@ static void test_nonblocking_file_access(void)
p_unlink("test_file");
}
+static void test_byteswap(void)
+{
+ unsigned long ret;
+
+ ret = p_byteswap_ulong(0x12345678);
+ ok(ret == 0x78563412, "ret = %lx\n", ret);
+
+ ret = p_byteswap_ulong(0);
+ ok(ret == 0, "ret = %lx\n", ret);
+}
+
START_TEST(msvcr90)
{
if(!init())
@@ -1159,4 +1172,5 @@ START_TEST(msvcr90)
test_getptd();
test__vswprintf_l();
test_nonblocking_file_access();
+ test_byteswap();
}
More information about the wine-cvs
mailing list