- 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(a)relsoft.net)
+ * Eric Kohl (ekohl(a)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(a)relsoft.net)
+ * Eric Kohl (ekohl(a)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(a)relsoft.net)
+ * Eric Kohl (ekohl(a)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(a)relsoft.net)
+ * Eric Kohl (ekohl(a)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(a)relsoft.net)
+ * Eric Kohl (ekohl(a)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
*