- Remove inline assembly and use assembly files isntead. These come from lib\rtl\i386... it woudl be nice to share them but atm this causes some problems. I think the math code in lib\rtl should be split into lib\math eventually... Added: trunk/reactos/subsys/win32k/misc/i386/ Added: trunk/reactos/subsys/win32k/misc/i386/atan2_asm.s Added: trunk/reactos/subsys/win32k/misc/i386/ceil_asm.s Added: trunk/reactos/subsys/win32k/misc/i386/cos_asm.s Added: trunk/reactos/subsys/win32k/misc/i386/floor_asm.s Added: trunk/reactos/subsys/win32k/misc/i386/sin_asm.s Modified: trunk/reactos/subsys/win32k/misc/math.c _____
Added: trunk/reactos/subsys/win32k/misc/i386/atan2_asm.s --- trunk/reactos/subsys/win32k/misc/i386/atan2_asm.s 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/i386/atan2_asm.s 2006-01-08 23:05:38 UTC (rev 20739) @@ -0,0 +1,52 @@
+/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Run-Time Library + * FILE: lib/rtl/i386/atan.S + * PROGRAMER: Alex Ionescu (alex@relsoft.net) + * Eric Kohl (ekohl@rz-online.de) + * + * Copyright (C) 2002 Michael Ringgaard. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +.globl _atan2 + +.intel_syntax noprefix + +/* FUNCTIONS ***************************************************************/ + +_atan2: + push ebp + mov ebp,esp + fld qword ptr [ebp+8] // Load real from stack + fld qword ptr [ebp+16] // Load real from stack + fpatan // Take the arctangent + mov esp,ebp + pop ebp + ret _____
Added: trunk/reactos/subsys/win32k/misc/i386/ceil_asm.s --- trunk/reactos/subsys/win32k/misc/i386/ceil_asm.s 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/i386/ceil_asm.s 2006-01-08 23:05:38 UTC (rev 20739) @@ -0,0 +1,58 @@
+/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Run-Time Library + * FILE: lib/rtl/i386/ceil.S + * PROGRAMER: Alex Ionescu (alex@relsoft.net) + * Eric Kohl (ekohl@rz-online.de) + * + * Copyright (C) 2002 Michael Ringgaard. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +.globl _ceil + +.intel_syntax noprefix + +/* FUNCTIONS ***************************************************************/ + +_ceil: + push ebp + mov ebp,esp + sub esp,4 // Allocate temporary space + fld qword ptr [ebp+8] // Load real from stack + fstcw [ebp-2] // Save control word + fclex // Clear exceptions + mov word ptr [ebp-4],0xb63 // Rounding control word + fldcw [ebp-4] // Set new rounding control + frndint // Round to integer + fclex // Clear exceptions + fldcw [ebp-2] // Restore control word + mov esp,ebp // Deallocate temporary space + pop ebp + ret _____
Added: trunk/reactos/subsys/win32k/misc/i386/cos_asm.s --- trunk/reactos/subsys/win32k/misc/i386/cos_asm.s 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/i386/cos_asm.s 2006-01-08 23:05:38 UTC (rev 20739) @@ -0,0 +1,50 @@
+/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Run-Time Library + * FILE: lib/rtl/i386/cos.S + * PROGRAMER: Alex Ionescu (alex@relsoft.net) + * Eric Kohl (ekohl@rz-online.de) + * + * Copyright (C) 2002 Michael Ringgaard. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +.globl _cos + +.intel_syntax noprefix + +/* FUNCTIONS ***************************************************************/ + +_cos: + push ebp + mov ebp,esp // Point to the stack frame + fld qword ptr [ebp+8] // Load real from stack + fcos // Take the cosine + pop ebp + ret _____
Added: trunk/reactos/subsys/win32k/misc/i386/floor_asm.s --- trunk/reactos/subsys/win32k/misc/i386/floor_asm.s 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/i386/floor_asm.s 2006-01-08 23:05:38 UTC (rev 20739) @@ -0,0 +1,58 @@
+/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Run-Time Library + * FILE: lib/rtl/i386/floor.S + * PROGRAMER: Alex Ionescu (alex@relsoft.net) + * Eric Kohl (ekohl@rz-online.de) + * + * Copyright (C) 2002 Michael Ringgaard. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +.globl _floor + +.intel_syntax noprefix + +/* FUNCTIONS ***************************************************************/ + +_floor: + push ebp + mov ebp,esp + sub esp,4 // Allocate temporary space + fld qword ptr [ebp+8] // Load real from stack + fstcw [ebp-2] // Save control word + fclex // Clear exceptions + mov word ptr [ebp-4],0x763 // Rounding control word + fldcw [ebp-4] // Set new rounding control + frndint // Round to integer + fclex // Clear exceptions + fldcw [ebp-2] // Restore control word + mov esp,ebp + pop ebp + ret _____
Added: trunk/reactos/subsys/win32k/misc/i386/sin_asm.s --- trunk/reactos/subsys/win32k/misc/i386/sin_asm.s 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/i386/sin_asm.s 2006-01-08 23:05:38 UTC (rev 20739) @@ -0,0 +1,50 @@
+/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Run-Time Library + * FILE: lib/rtl/i386/sin.S + * PROGRAMER: Alex Ionescu (alex@relsoft.net) + * Eric Kohl (ekohl@rz-online.de) + * + * Copyright (C) 2002 Michael Ringgaard. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +.globl _sin + +.intel_syntax noprefix + +/* FUNCTIONS ***************************************************************/ + +_sin: + push ebp // Save register bp + mov ebp,esp // Point to the stack frame + fld qword ptr [ebp+8] // Load real from stack + fsin // Take the sine + pop ebp // Restore register bp + ret _____
Modified: trunk/reactos/subsys/win32k/misc/math.c --- trunk/reactos/subsys/win32k/misc/math.c 2006-01-08 22:50:11 UTC (rev 20738) +++ trunk/reactos/subsys/win32k/misc/math.c 2006-01-08 23:05:38 UTC (rev 20739) @@ -20,222 +20,6 @@
#include <w32k.h>
-double atan (double __x); -double atan2 (double __y, double __x); -double ceil (double __x); -double cos (double __x); -double fabs (double __x); -double floor (double __x); -long _ftol (double fl); -double log (double __x); -double __log2 (double __x); -double pow (double __x, double __y); -double sin (double __x); -double sqrt (double __x); -double tan (double __x); -div_t div(int num, int denom); -int mod(int num, int denom); - -double atan (double __x) -{ - register double __value; - __asm __volatile__ - ("fld1\n\t" - "fpatan" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double atan2 (double __y, double __x) -{ - register double __value; - __asm __volatile__ - ("fpatan\n\t" - "fld %%st(0)" - : "=t" (__value) : "0" (__x), "u" (__y)); - - return __value; -} - -double ceil (double __x) -{ - register double __value; - __volatile unsigned short int __cw, __cwtmp; - - __asm __volatile ("fnstcw %0" : "=m" (__cw)); - __cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */ - __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); - __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); - __asm __volatile ("fldcw %0" : : "m" (__cw)); - - return __value; -} - -double cos (double __x) -{ - register double __value; - __asm __volatile__ - ("fcos" - : "=t" (__value): "0" (__x)); - - return __value; -} - -double fabs (double __x) -{ - register double __value; - __asm __volatile__ - ("fabs" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double floor (double __x) -{ - register double __value; - __volatile unsigned short int __cw, __cwtmp; - - __asm __volatile ("fnstcw %0" : "=m" (__cw)); - __cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */ - __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); - __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); - __asm __volatile ("fldcw %0" : : "m" (__cw)); - - return __value; -} - -long _ftol (double fl) -{ - return (long)fl; -} - -double log (double __x) -{ - register double __value; - __asm __volatile__ - ("fldln2\n\t" - "fxch\n\t" - "fyl2x" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double __log2 (double __x) -{ - register double __value; - __asm __volatile__ - ("fld1\n\t" - "fxch\n\t" - "fyl2x" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double pow (double __x, double __y) -{ - register double __value, __exponent; - long __p = (long) __y; - - if (__x == 0.0 && __y > 0.0) - return 0.0; - if (__y == (double) __p) - { - double __r = 1.0; - if (__p == 0) - return 1.0; - if (__p < 0) - { - __p = -__p; - __x = 1.0 / __x; - } - while (1) - { - if (__p & 1) - __r *= __x; - __p >>= 1; - if (__p == 0) - return __r; - __x *= __x; - } - /* NOTREACHED */ - } - __asm __volatile__ - ("fmul %%st(1) # y * log2(x)\n\t" - "fst %%st(1)\n\t" - "frndint # int(y * log2(x))\n\t" - "fxch\n\t" - "fsub %%st(1) # fract(y * log2(x))\n\t" - "f2xm1 # 2^(fract(y * log2(x))) - 1\n\t" - : "=t" (__value), "=u" (__exponent) : "0" (__log2 (__x)), "1" (__y)); - __value += 1.0; - __asm __volatile__ - ("fscale" - : "=t" (__value) : "0" (__value), "u" (__exponent)); - - return __value; -} - -double sin (double __x) -{ - register double __value; - __asm __volatile__ - ("fsin" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double sqrt (double __x) -{ - register double __value; - __asm __volatile__ - ("fsqrt" - : "=t" (__value) : "0" (__x)); - - return __value; -} - -double tan (double __x) -{ - register double __value; - register double __value2 __attribute__ ((unused)); - __asm __volatile__ - ("fptan" - : "=t" (__value2), "=u" (__value) : "0" (__x)); - - return __value; -} - -div_t div(int num, int denom) -{ - div_t r; - if (num > 0 && denom < 0) { - num = -num; - denom = -denom; - } - r.quot = num / denom; - r.rem = num % denom; - if (num < 0 && denom > 0) - { - if (r.rem > 0) - { - r.quot++; - r.rem -= denom; - } - } - return r; -} - -int mod(int num, int denom) -{ - div_t dvt = div(num, denom); - return dvt.rem; -} - /* * FIXME! Is there a better algorithm. like FT_MulDiv *