Author: tkreuzer
Date: Mon May 31 03:50:09 2010
New Revision: 47479

URL: http://svn.reactos.org/svn/reactos?rev=47479&view=rev
Log:
[CRT]
- add clang compatible asm version of ldexp and make the code more readable
- constify strndup parameter to match standard
- fix broken pointer comparison in signal()

Modified:
    trunk/reactos/lib/sdk/crt/math/i386/ldexp.c
    trunk/reactos/lib/sdk/crt/misc/getargs.c
    trunk/reactos/lib/sdk/crt/signal/signal.c

Modified: trunk/reactos/lib/sdk/crt/math/i386/ldexp.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/math/i386/ldexp.c?rev=47479&r1=47478&r2=47479&view=diff
==============================================================================
--- trunk/reactos/lib/sdk/crt/math/i386/ldexp.c [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/math/i386/ldexp.c [iso-8859-1] Mon May 31 
03:50:09 2010
@@ -21,24 +21,32 @@
 
 #include <math.h>
 
-double ldexp (double __x, int __y);
-
-double ldexp (double __x, int __y)
+double ldexp (double value, int exp)
 {
-  register double __val;
+    register double result;
 #ifdef __GNUC__
-  __asm __volatile__
-    ("fscale"
-     : "=t" (__val) : "0" (__x), "u" ((double) __y));
+#if defined(__clang__)
+    asm ("fild %[exp]\n"
+         "fscale\n"
+         "fstp %%st(1)\n"
+         : [result] "=t" (result)
+         : [value] "0" (value), [exp] "m" (exp));
 #else
-  register double __dy = (double)__y;
+    asm ("fscale"
+        : "=t" (result)
+         : "0" (value), "u" ((double)exp)
+         : "1");
+#endif
+#else /* !__GNUC__ */
+  register double __dy = (double)exp;
   __asm
   {
     fld __dy
-    fld __x
+    fld value
     fscale
-    fstp __val
+    fstp result
   }
-#endif /*__GNUC__*/
-  return __val;
+#endif /* !__GNUC__ */
+  return result;
 }
+

Modified: trunk/reactos/lib/sdk/crt/misc/getargs.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/misc/getargs.c?rev=47479&r1=47478&r2=47479&view=diff
==============================================================================
--- trunk/reactos/lib/sdk/crt/misc/getargs.c [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/misc/getargs.c [iso-8859-1] Mon May 31 03:50:09 
2010
@@ -22,7 +22,7 @@
 
 extern wchar_t **__winitenv;
 
-char* strndup(char* name, size_t len)
+char* strndup(char const* name, size_t len)
 {
    char *s = malloc(len + 1);
    if (s != NULL)

Modified: trunk/reactos/lib/sdk/crt/signal/signal.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/signal/signal.c?rev=47479&r1=47478&r2=47479&view=diff
==============================================================================
--- trunk/reactos/lib/sdk/crt/signal/signal.c [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/signal/signal.c [iso-8859-1] Mon May 31 03:50:09 
2010
@@ -42,7 +42,7 @@
    }
 
    // check with IsBadCodePtr
-   if ( func < (__p_sig_fn_t)4096 && func != SIG_DFL && func != SIG_IGN)
+   if ( (uintptr_t)func < 4096 && func != SIG_DFL && func != SIG_IGN)
    {
       __set_errno(EINVAL);
       return SIG_ERR;


Reply via email to