From f0c2cec9d5154940606b2c3fc02d1d61cf003e2c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 31 May 2010 01:50:09 +0000 Subject: [PATCH] [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() svn path=/trunk/; revision=47479 --- reactos/lib/sdk/crt/math/i386/ldexp.c | 32 +++++++++++++++++---------- reactos/lib/sdk/crt/misc/getargs.c | 2 +- reactos/lib/sdk/crt/signal/signal.c | 2 +- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/reactos/lib/sdk/crt/math/i386/ldexp.c b/reactos/lib/sdk/crt/math/i386/ldexp.c index b240275ef95..327e72a27b8 100644 --- a/reactos/lib/sdk/crt/math/i386/ldexp.c +++ b/reactos/lib/sdk/crt/math/i386/ldexp.c @@ -21,24 +21,32 @@ #include -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; } + diff --git a/reactos/lib/sdk/crt/misc/getargs.c b/reactos/lib/sdk/crt/misc/getargs.c index 1bdb409ab46..18672e6bd44 100644 --- a/reactos/lib/sdk/crt/misc/getargs.c +++ b/reactos/lib/sdk/crt/misc/getargs.c @@ -22,7 +22,7 @@ int __argc = 0; 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) diff --git a/reactos/lib/sdk/crt/signal/signal.c b/reactos/lib/sdk/crt/signal/signal.c index 6cfe3f64b5a..5dd6381c53d 100644 --- a/reactos/lib/sdk/crt/signal/signal.c +++ b/reactos/lib/sdk/crt/signal/signal.c @@ -42,7 +42,7 @@ __p_sig_fn_t signal(int sig, __p_sig_fn_t func) } // 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;