- Remove inline assembly and use assembly files isntead. These come from lib\rtl...
authorAlex Ionescu <aionescu@gmail.com>
Sun, 8 Jan 2006 23:05:38 +0000 (23:05 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Sun, 8 Jan 2006 23:05:38 +0000 (23:05 +0000)
svn path=/trunk/; revision=20739

reactos/subsys/win32k/misc/i386/atan2_asm.s [new file with mode: 0644]
reactos/subsys/win32k/misc/i386/ceil_asm.s [new file with mode: 0644]
reactos/subsys/win32k/misc/i386/cos_asm.s [new file with mode: 0644]
reactos/subsys/win32k/misc/i386/floor_asm.s [new file with mode: 0644]
reactos/subsys/win32k/misc/i386/sin_asm.s [new file with mode: 0644]
reactos/subsys/win32k/misc/math.c

diff --git a/reactos/subsys/win32k/misc/i386/atan2_asm.s b/reactos/subsys/win32k/misc/i386/atan2_asm.s
new file mode 100644 (file)
index 0000000..9a47f35
--- /dev/null
@@ -0,0 +1,52 @@
+/*\r
+ * COPYRIGHT:         See COPYING in the top level directory\r
+ * PROJECT:           ReactOS kernel\r
+ * PURPOSE:           Run-Time Library\r
+ * FILE:              lib/rtl/i386/atan.S\r
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
+ *                    Eric Kohl (ekohl@rz-online.de)\r
+ *\r
+ * Copyright (C) 2002 Michael Ringgaard.\r
+ * All rights reserved. \r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * \r
+ * 1. Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.  \r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.  \r
+ * 3. Neither the name of the project nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission. \r
+\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \r
+ * SUCH DAMAGE.\r
+ */\r
\r
+.globl _atan2\r
\r
+.intel_syntax noprefix\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+_atan2:\r
+        push    ebp\r
+        mov     ebp,esp\r
+        fld     qword ptr [ebp+8]       // Load real from stack\r
+        fld     qword ptr [ebp+16]      // Load real from stack\r
+        fpatan                          // Take the arctangent\r
+        mov     esp,ebp\r
+        pop     ebp\r
+        ret\r
diff --git a/reactos/subsys/win32k/misc/i386/ceil_asm.s b/reactos/subsys/win32k/misc/i386/ceil_asm.s
new file mode 100644 (file)
index 0000000..2144b8a
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * COPYRIGHT:         See COPYING in the top level directory\r
+ * PROJECT:           ReactOS kernel\r
+ * PURPOSE:           Run-Time Library\r
+ * FILE:              lib/rtl/i386/ceil.S\r
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
+ *                    Eric Kohl (ekohl@rz-online.de)\r
+ *\r
+ * Copyright (C) 2002 Michael Ringgaard.\r
+ * All rights reserved. \r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * \r
+ * 1. Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.  \r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.  \r
+ * 3. Neither the name of the project nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission. \r
+\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \r
+ * SUCH DAMAGE.\r
+ */\r
\r
+.globl _ceil\r
+\r
+.intel_syntax noprefix\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+_ceil:\r
+        push    ebp\r
+        mov     ebp,esp\r
+        sub     esp,4                   // Allocate temporary space\r
+        fld     qword ptr [ebp+8]       // Load real from stack\r
+        fstcw   [ebp-2]                 // Save control word\r
+        fclex                           // Clear exceptions\r
+        mov     word ptr [ebp-4],0xb63  // Rounding control word\r
+        fldcw   [ebp-4]                 // Set new rounding control\r
+        frndint                         // Round to integer\r
+        fclex                           // Clear exceptions\r
+        fldcw   [ebp-2]                 // Restore control word\r
+        mov     esp,ebp                 // Deallocate temporary space\r
+        pop     ebp\r
+        ret\r
diff --git a/reactos/subsys/win32k/misc/i386/cos_asm.s b/reactos/subsys/win32k/misc/i386/cos_asm.s
new file mode 100644 (file)
index 0000000..36219ed
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * COPYRIGHT:         See COPYING in the top level directory\r
+ * PROJECT:           ReactOS kernel\r
+ * PURPOSE:           Run-Time Library\r
+ * FILE:              lib/rtl/i386/cos.S\r
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
+ *                    Eric Kohl (ekohl@rz-online.de)\r
+ *\r
+ * Copyright (C) 2002 Michael Ringgaard.\r
+ * All rights reserved. \r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * \r
+ * 1. Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.  \r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.  \r
+ * 3. Neither the name of the project nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission. \r
+\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \r
+ * SUCH DAMAGE.\r
+ */\r
\r
+.globl _cos\r
+\r
+.intel_syntax noprefix\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+_cos:\r
+        push    ebp\r
+        mov     ebp,esp                 // Point to the stack frame\r
+        fld     qword ptr [ebp+8]       // Load real from stack\r
+        fcos                            // Take the cosine\r
+        pop     ebp\r
+        ret\r
diff --git a/reactos/subsys/win32k/misc/i386/floor_asm.s b/reactos/subsys/win32k/misc/i386/floor_asm.s
new file mode 100644 (file)
index 0000000..cf066b0
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * COPYRIGHT:         See COPYING in the top level directory\r
+ * PROJECT:           ReactOS kernel\r
+ * PURPOSE:           Run-Time Library\r
+ * FILE:              lib/rtl/i386/floor.S\r
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
+ *                    Eric Kohl (ekohl@rz-online.de)\r
+ *\r
+ * Copyright (C) 2002 Michael Ringgaard.\r
+ * All rights reserved. \r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * \r
+ * 1. Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.  \r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.  \r
+ * 3. Neither the name of the project nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission. \r
+\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \r
+ * SUCH DAMAGE.\r
+ */\r
\r
+.globl _floor\r
\r
+.intel_syntax noprefix\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+_floor:\r
+        push    ebp\r
+        mov     ebp,esp\r
+        sub     esp,4                   // Allocate temporary space\r
+        fld     qword ptr [ebp+8]       // Load real from stack\r
+        fstcw   [ebp-2]                 // Save control word\r
+        fclex                           // Clear exceptions\r
+        mov     word ptr [ebp-4],0x763  // Rounding control word\r
+        fldcw   [ebp-4]                 // Set new rounding control\r
+        frndint                         // Round to integer\r
+        fclex                           // Clear exceptions\r
+        fldcw   [ebp-2]                 // Restore control word\r
+        mov     esp,ebp\r
+        pop     ebp\r
+        ret\r
diff --git a/reactos/subsys/win32k/misc/i386/sin_asm.s b/reactos/subsys/win32k/misc/i386/sin_asm.s
new file mode 100644 (file)
index 0000000..ea07179
--- /dev/null
@@ -0,0 +1,50 @@
+/*\r
+ * COPYRIGHT:         See COPYING in the top level directory\r
+ * PROJECT:           ReactOS kernel\r
+ * PURPOSE:           Run-Time Library\r
+ * FILE:              lib/rtl/i386/sin.S\r
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
+ *                    Eric Kohl (ekohl@rz-online.de)\r
+ *\r
+ * Copyright (C) 2002 Michael Ringgaard.\r
+ * All rights reserved. \r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * \r
+ * 1. Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.  \r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.  \r
+ * 3. Neither the name of the project nor the names of its contributors\r
+ *    may be used to endorse or promote products derived from this software\r
+ *    without specific prior written permission. \r
+\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\r
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
+ * OR SERVICES// LOSS OF USE, DATA, OR PROFITS// OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \r
+ * SUCH DAMAGE.\r
+ */\r
\r
+.globl _sin\r
+\r
+.intel_syntax noprefix\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+_sin:\r
+        push    ebp                     // Save register bp\r
+        mov     ebp,esp                 // Point to the stack frame\r
+        fld     qword ptr [ebp+8]       // Load real from stack\r
+        fsin                            // Take the sine\r
+        pop     ebp                     // Restore register bp\r
+        ret\r
index 1f0d74f..c3c1e84 100644 (file)
 
 #include <w32k.h>
 
 
 #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
  *
 /*
  * FIXME! Is there a better algorithm. like FT_MulDiv
  *