set eol-style to native
authorThomas Bluemel <thomas@reactsoft.com>
Thu, 8 Dec 2005 23:56:12 +0000 (23:56 +0000)
committerThomas Bluemel <thomas@reactsoft.com>
Thu, 8 Dec 2005 23:56:12 +0000 (23:56 +0000)
svn path=/trunk/; revision=19988

29 files changed:
reactos/lib/rtl/i386/alldiv_asm.s
reactos/lib/rtl/i386/alldvrm_asm.s
reactos/lib/rtl/i386/allmul_asm.s
reactos/lib/rtl/i386/allrem_asm.s
reactos/lib/rtl/i386/allshl_asm.s
reactos/lib/rtl/i386/allshr_asm.s
reactos/lib/rtl/i386/atan_asm.s
reactos/lib/rtl/i386/aulldiv_asm.s
reactos/lib/rtl/i386/aulldvrm_asm.s
reactos/lib/rtl/i386/aullrem_asm.s
reactos/lib/rtl/i386/aullshr_asm.s
reactos/lib/rtl/i386/ceil_asm.s
reactos/lib/rtl/i386/comparememory_asm.s
reactos/lib/rtl/i386/comparememory_ulong_asm.s
reactos/lib/rtl/i386/cos_asm.s
reactos/lib/rtl/i386/debug_asm.S
reactos/lib/rtl/i386/fabs_asm.s
reactos/lib/rtl/i386/fillmemory_asm.s
reactos/lib/rtl/i386/fillmemory_ulong_asm.s
reactos/lib/rtl/i386/floor_asm.s
reactos/lib/rtl/i386/ftol_asm.s
reactos/lib/rtl/i386/log_asm.s
reactos/lib/rtl/i386/pow_asm.s
reactos/lib/rtl/i386/prefetchmemory_asm.s
reactos/lib/rtl/i386/random_asm.S
reactos/lib/rtl/i386/sin_asm.s
reactos/lib/rtl/i386/sqrt_asm.s
reactos/lib/rtl/i386/tan_asm.s
reactos/lib/rtl/i386/zeromemory_asm.s

index 058b236..33f5d8e 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/alldiv_asm.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 __alldiv\r
- .globl __fltused\r
\r
- /* DATA ********************************************************************/\r
-\r
-__fltused:\r
-        .long 0x9875\r
-\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// lldiv - signed long divide\r
-//\r
-// Purpose:\r
-//       Does a signed long divide of the arguments.  Arguments are\r
-//       not changed.\r
-//\r
-// Entry:\r
-//       Arguments are passed on the stack:\r
-//               1st pushed: divisor (QWORD)\r
-//               2nd pushed: dividend (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX contains the quotient (dividend/divisor)\r
-//       NOTE: this routine removes the parameters from the stack.\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-\r
-__alldiv:\r
-\r
-        push    edi\r
-        push    esi\r
-        push    ebx\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a/b will\r
-// generate a call to lldiv(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//               |      EDI      |\r
-//               |---------------|\r
-//               |      ESI      |\r
-//               |---------------|\r
-//       ESP---->|      EBX      |\r
-//               -----------------\r
-//\r
-\r
-#define DVNDLO  [esp + 16]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 20]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 24]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 28]      // stack address of divisor (b)\r
-\r
-// Determine sign of the result (edi = 0 if result is positive, non-zero\r
-// otherwise) and make operands positive.\r
-\r
-        xor     edi,edi         // result sign assumed positive\r
-\r
-        mov     eax,DVNDHI // hi word of a\r
-        or      eax,eax         // test to see if signed\r
-        jge     short L1        // skip rest if a is already positive\r
-        inc     edi             // complement result sign flag\r
-        mov     edx,DVNDLO // lo word of a\r
-        neg     eax             // make a positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVNDHI,eax // save positive value\r
-        mov     DVNDLO,edx\r
-L1:\r
-        mov     eax,DVSRHI // hi word of b\r
-        or      eax,eax         // test to see if signed\r
-        jge     short L2        // skip rest if b is already positive\r
-        inc     edi             // complement the result sign flag\r
-        mov     edx,DVSRLO // lo word of a\r
-        neg     eax             // make b positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVSRHI,eax // save positive value\r
-        mov     DVSRLO,edx\r
-L2:\r
-\r
-//\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-// NOTE - eax currently contains the high order word of DVSR\r
-//\r
-\r
-        or      eax,eax         // check to see if divisor < 4194304K\r
-        jnz     short L3        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // eax <- high order bits of quotient\r
-        mov     ebx,eax         // save high bits of quotient\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // eax <- low order bits of quotient\r
-        mov     edx,ebx         // edx:eax <- quotient\r
-        jmp     short L4        // set sign, restore stack and return\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains the high word of DVSR\r
-//\r
-\r
-L3:\r
-        mov     ebx,eax         // ebx:ecx <- divisor\r
-        mov     ecx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-L5:\r
-        shr     ebx,1           // shift divisor right one bit\r
-        rcr     ecx,1\r
-        shr     edx,1           // shift dividend right one bit\r
-        rcr     eax,1\r
-        or      ebx,ebx\r
-        jnz     short L5        // loop until divisor < 4194304K\r
-        div     ecx             // now divide, ignore remainder\r
-        mov     esi,eax         // save quotient\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mul     dword ptr DVSRHI // QUOT * DVSRHI\r
-        mov     ecx,eax\r
-        mov     eax,DVSRLO\r
-        mul     esi             // QUOT * DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short L6        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise\r
-// subtract one (1) from the quotient.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short L6        // if result > original, do subtract\r
-        jb      short L7        // if result < original, we are ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short L7        // if less or equal we are ok, else subtract\r
-L6:\r
-        dec     esi             // subtract 1 from quotient\r
-L7:\r
-        xor     edx,edx         // edx:eax <- quotient\r
-        mov     eax,esi\r
-\r
-//\r
-// Just the cleanup left to do.  edx:eax contains the quotient.  Set the sign\r
-// according to the save value, cleanup the stack, and return.\r
-//\r
-\r
-L4:\r
-        dec     edi             // check to see if result is negative\r
-        jnz     short L8        // if EDI == 0, result should be negative\r
-        neg     edx             // otherwise, negate the result\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Restore the saved registers and return.\r
-//\r
-\r
-L8:\r
-        pop     ebx\r
-        pop     esi\r
-        pop     edi\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/alldiv_asm.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 __alldiv
+ .globl __fltused
+ /* DATA ********************************************************************/
+
+__fltused:
+        .long 0x9875
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// lldiv - signed long divide
+//
+// Purpose:
+//       Does a signed long divide of the arguments.  Arguments are
+//       not changed.
+//
+// Entry:
+//       Arguments are passed on the stack:
+//               1st pushed: divisor (QWORD)
+//               2nd pushed: dividend (QWORD)
+//
+// Exit:
+//       EDX:EAX contains the quotient (dividend/divisor)
+//       NOTE: this routine removes the parameters from the stack.
+//
+// Uses:
+//       ECX
+//
+
+__alldiv:
+
+        push    edi
+        push    esi
+        push    ebx
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a/b will
+// generate a call to lldiv(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//               |      EDI      |
+//               |---------------|
+//               |      ESI      |
+//               |---------------|
+//       ESP---->|      EBX      |
+//               -----------------
+//
+
+#define DVNDLO  [esp + 16]       // stack address of dividend (a)
+#define DVNDHI  [esp + 20]       // stack address of dividend (a)
+#define DVSRLO  [esp + 24]      // stack address of divisor (b)
+#define DVSRHI  [esp + 28]      // stack address of divisor (b)
+
+// Determine sign of the result (edi = 0 if result is positive, non-zero
+// otherwise) and make operands positive.
+
+        xor     edi,edi         // result sign assumed positive
+
+        mov     eax,DVNDHI // hi word of a
+        or      eax,eax         // test to see if signed
+        jge     short L1        // skip rest if a is already positive
+        inc     edi             // complement result sign flag
+        mov     edx,DVNDLO // lo word of a
+        neg     eax             // make a positive
+        neg     edx
+        sbb     eax,0
+        mov     DVNDHI,eax // save positive value
+        mov     DVNDLO,edx
+L1:
+        mov     eax,DVSRHI // hi word of b
+        or      eax,eax         // test to see if signed
+        jge     short L2        // skip rest if b is already positive
+        inc     edi             // complement the result sign flag
+        mov     edx,DVSRLO // lo word of a
+        neg     eax             // make b positive
+        neg     edx
+        sbb     eax,0
+        mov     DVSRHI,eax // save positive value
+        mov     DVSRLO,edx
+L2:
+
+//
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+// NOTE - eax currently contains the high order word of DVSR
+//
+
+        or      eax,eax         // check to see if divisor < 4194304K
+        jnz     short L3        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // eax <- high order bits of quotient
+        mov     ebx,eax         // save high bits of quotient
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // eax <- low order bits of quotient
+        mov     edx,ebx         // edx:eax <- quotient
+        jmp     short L4        // set sign, restore stack and return
+
+//
+// Here we do it the hard way.  Remember, eax contains the high word of DVSR
+//
+
+L3:
+        mov     ebx,eax         // ebx:ecx <- divisor
+        mov     ecx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+L5:
+        shr     ebx,1           // shift divisor right one bit
+        rcr     ecx,1
+        shr     edx,1           // shift dividend right one bit
+        rcr     eax,1
+        or      ebx,ebx
+        jnz     short L5        // loop until divisor < 4194304K
+        div     ecx             // now divide, ignore remainder
+        mov     esi,eax         // save quotient
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mul     dword ptr DVSRHI // QUOT * DVSRHI
+        mov     ecx,eax
+        mov     eax,DVSRLO
+        mul     esi             // QUOT * DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short L6        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
+// subtract one (1) from the quotient.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short L6        // if result > original, do subtract
+        jb      short L7        // if result < original, we are ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short L7        // if less or equal we are ok, else subtract
+L6:
+        dec     esi             // subtract 1 from quotient
+L7:
+        xor     edx,edx         // edx:eax <- quotient
+        mov     eax,esi
+
+//
+// Just the cleanup left to do.  edx:eax contains the quotient.  Set the sign
+// according to the save value, cleanup the stack, and return.
+//
+
+L4:
+        dec     edi             // check to see if result is negative
+        jnz     short L8        // if EDI == 0, result should be negative
+        neg     edx             // otherwise, negate the result
+        neg     eax
+        sbb     edx,0
+
+//
+// Restore the saved registers and return.
+//
+
+L8:
+        pop     ebx
+        pop     esi
+        pop     edi
+
+        ret     16
index 2d8cc35..9c12fb0 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/alldvrm.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 __alldvrm\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-__alldvrm:\r
-        push    edi\r
-        push    esi\r
-        push    ebp\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a/b will\r
-// generate a call to alldvrm(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//               |      EDI      |\r
-//               |---------------|\r
-//               |      ESI      |\r
-//               |---------------|\r
-//       ESP---->|      EBP      |\r
-//               -----------------\r
-//\r
-\r
-#undef DVNDLO\r
-#undef DVNDHI\r
-#undef DVSRLO\r
-#undef DVSRHI\r
-#define DVNDLO  [esp + 16]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 20]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 24]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 28]      // stack address of divisor (b)\r
-\r
-// Determine sign of the quotient (edi = 0 if result is positive, non-zero\r
-// otherwise) and make operands positive.\r
-// Sign of the remainder is kept in ebp.\r
-\r
-        xor     edi,edi         // result sign assumed positive\r
-        xor     ebp,ebp         // result sign assumed positive\r
-\r
-        mov     eax,DVNDHI // hi word of a\r
-        or      eax,eax         // test to see if signed\r
-        jge     short ....L1        // skip rest if a is already positive\r
-        inc     edi             // complement result sign flag\r
-        inc     ebp             // complement result sign flag\r
-        mov     edx,DVNDLO // lo word of a\r
-        neg     eax             // make a positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVNDHI,eax // save positive value\r
-        mov     DVNDLO,edx\r
-....L1:\r
-        mov     eax,DVSRHI // hi word of b\r
-        or      eax,eax         // test to see if signed\r
-        jge     short ....L2        // skip rest if b is already positive\r
-        inc     edi             // complement the result sign flag\r
-        mov     edx,DVSRLO // lo word of a\r
-        neg     eax             // make b positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVSRHI,eax // save positive value\r
-        mov     DVSRLO,edx\r
-....L2:\r
-\r
-//\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-// NOTE - eax currently contains the high order word of DVSR\r
-//\r
-\r
-        or      eax,eax         // check to see if divisor < 4194304K\r
-        jnz     short ....L3        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // eax <- high order bits of quotient\r
-        mov     ebx,eax         // save high bits of quotient\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // eax <- low order bits of quotient\r
-        mov     esi,eax         // ebx:esi <- quotient\r
-//\r
-// Now we need to do a multiply so that we can compute the remainder.\r
-//\r
-        mov     eax,ebx         // set up high word of quotient\r
-        mul     dword ptr DVSRLO // HIWORD(QUOT) * DVSR\r
-        mov     ecx,eax         // save the result in ecx\r
-        mov     eax,esi         // set up low word of quotient\r
-        mul     dword ptr DVSRLO // LOWORD(QUOT) * DVSR\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jmp     short ....L4        // complete remainder calculation\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains the high word of DVSR\r
-//\r
-\r
-....L3:\r
-        mov     ebx,eax         // ebx:ecx <- divisor\r
-        mov     ecx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-....L5:\r
-        shr     ebx,1           // shift divisor right one bit\r
-        rcr     ecx,1\r
-        shr     edx,1           // shift dividend right one bit\r
-        rcr     eax,1\r
-        or      ebx,ebx\r
-        jnz     short ....L5        // loop until divisor < 4194304K\r
-        div     ecx             // now divide, ignore remainder\r
-        mov     esi,eax         // save quotient\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mul     dword ptr DVSRHI // QUOT * DVSRHI\r
-        mov     ecx,eax\r
-        mov     eax,DVSRLO\r
-        mul     esi             // QUOT * DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short ....L6        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise\r
-// subtract one (1) from the quotient.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short ....L6        // if result > original, do subtract\r
-        jb      short ....L7        // if result < original, we are ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short ....L7        // if less or equal we are ok, else subtract\r
-....L6:\r
-        dec     esi             // subtract 1 from quotient\r
-        sub     eax,DVSRLO // subtract divisor from result\r
-        sbb     edx,DVSRHI\r
-....L7:\r
-        xor     ebx,ebx         // ebx:esi <- quotient\r
-\r
-....L4:\r
-//\r
-// Calculate remainder by subtracting the result from the original dividend.\r
-// Since the result is already in a register, we will do the subtract in the\r
-// opposite direction and negate the result if necessary.\r
-//\r
-\r
-        sub     eax,DVNDLO // subtract dividend from result\r
-        sbb     edx,DVNDHI\r
-\r
-//\r
-// Now check the result sign flag to see if the result is supposed to be positive\r
-// or negative.  It is currently negated (because we subtracted in the 'wrong'\r
-// direction), so if the sign flag is set we are done, otherwise we must negate\r
-// the result to make it positive again.\r
-//\r
-\r
-        dec     ebp             // check result sign flag\r
-        jns     short ....L9        // result is ok, set up the quotient\r
-        neg     edx             // otherwise, negate the result\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Now we need to get the quotient into edx:eax and the remainder into ebx:ecx.\r
-//\r
-....L9:\r
-        mov     ecx,edx\r
-        mov     edx,ebx\r
-        mov     ebx,ecx\r
-        mov     ecx,eax\r
-        mov     eax,esi\r
-\r
-//\r
-// Just the cleanup left to do.  edx:eax contains the quotient.  Set the sign\r
-// according to the save value, cleanup the stack, and return.\r
-//\r
-\r
-        dec     edi             // check to see if result is negative\r
-        jnz     short ....L8        // if EDI == 0, result should be negative\r
-        neg     edx             // otherwise, negate the result\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Restore the saved registers and return.\r
-//\r
-\r
-....L8:\r
-        pop     ebp\r
-        pop     esi\r
-        pop     edi\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/alldvrm.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 __alldvrm
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+__alldvrm:
+        push    edi
+        push    esi
+        push    ebp
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a/b will
+// generate a call to alldvrm(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//               |      EDI      |
+//               |---------------|
+//               |      ESI      |
+//               |---------------|
+//       ESP---->|      EBP      |
+//               -----------------
+//
+
+#undef DVNDLO
+#undef DVNDHI
+#undef DVSRLO
+#undef DVSRHI
+#define DVNDLO  [esp + 16]       // stack address of dividend (a)
+#define DVNDHI  [esp + 20]       // stack address of dividend (a)
+#define DVSRLO  [esp + 24]      // stack address of divisor (b)
+#define DVSRHI  [esp + 28]      // stack address of divisor (b)
+
+// Determine sign of the quotient (edi = 0 if result is positive, non-zero
+// otherwise) and make operands positive.
+// Sign of the remainder is kept in ebp.
+
+        xor     edi,edi         // result sign assumed positive
+        xor     ebp,ebp         // result sign assumed positive
+
+        mov     eax,DVNDHI // hi word of a
+        or      eax,eax         // test to see if signed
+        jge     short ....L1        // skip rest if a is already positive
+        inc     edi             // complement result sign flag
+        inc     ebp             // complement result sign flag
+        mov     edx,DVNDLO // lo word of a
+        neg     eax             // make a positive
+        neg     edx
+        sbb     eax,0
+        mov     DVNDHI,eax // save positive value
+        mov     DVNDLO,edx
+....L1:
+        mov     eax,DVSRHI // hi word of b
+        or      eax,eax         // test to see if signed
+        jge     short ....L2        // skip rest if b is already positive
+        inc     edi             // complement the result sign flag
+        mov     edx,DVSRLO // lo word of a
+        neg     eax             // make b positive
+        neg     edx
+        sbb     eax,0
+        mov     DVSRHI,eax // save positive value
+        mov     DVSRLO,edx
+....L2:
+
+//
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+// NOTE - eax currently contains the high order word of DVSR
+//
+
+        or      eax,eax         // check to see if divisor < 4194304K
+        jnz     short ....L3        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // eax <- high order bits of quotient
+        mov     ebx,eax         // save high bits of quotient
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // eax <- low order bits of quotient
+        mov     esi,eax         // ebx:esi <- quotient
+//
+// Now we need to do a multiply so that we can compute the remainder.
+//
+        mov     eax,ebx         // set up high word of quotient
+        mul     dword ptr DVSRLO // HIWORD(QUOT) * DVSR
+        mov     ecx,eax         // save the result in ecx
+        mov     eax,esi         // set up low word of quotient
+        mul     dword ptr DVSRLO // LOWORD(QUOT) * DVSR
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jmp     short ....L4        // complete remainder calculation
+
+//
+// Here we do it the hard way.  Remember, eax contains the high word of DVSR
+//
+
+....L3:
+        mov     ebx,eax         // ebx:ecx <- divisor
+        mov     ecx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+....L5:
+        shr     ebx,1           // shift divisor right one bit
+        rcr     ecx,1
+        shr     edx,1           // shift dividend right one bit
+        rcr     eax,1
+        or      ebx,ebx
+        jnz     short ....L5        // loop until divisor < 4194304K
+        div     ecx             // now divide, ignore remainder
+        mov     esi,eax         // save quotient
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mul     dword ptr DVSRHI // QUOT * DVSRHI
+        mov     ecx,eax
+        mov     eax,DVSRLO
+        mul     esi             // QUOT * DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short ....L6        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
+// subtract one (1) from the quotient.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short ....L6        // if result > original, do subtract
+        jb      short ....L7        // if result < original, we are ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short ....L7        // if less or equal we are ok, else subtract
+....L6:
+        dec     esi             // subtract 1 from quotient
+        sub     eax,DVSRLO // subtract divisor from result
+        sbb     edx,DVSRHI
+....L7:
+        xor     ebx,ebx         // ebx:esi <- quotient
+
+....L4:
+//
+// Calculate remainder by subtracting the result from the original dividend.
+// Since the result is already in a register, we will do the subtract in the
+// opposite direction and negate the result if necessary.
+//
+
+        sub     eax,DVNDLO // subtract dividend from result
+        sbb     edx,DVNDHI
+
+//
+// Now check the result sign flag to see if the result is supposed to be positive
+// or negative.  It is currently negated (because we subtracted in the 'wrong'
+// direction), so if the sign flag is set we are done, otherwise we must negate
+// the result to make it positive again.
+//
+
+        dec     ebp             // check result sign flag
+        jns     short ....L9        // result is ok, set up the quotient
+        neg     edx             // otherwise, negate the result
+        neg     eax
+        sbb     edx,0
+
+//
+// Now we need to get the quotient into edx:eax and the remainder into ebx:ecx.
+//
+....L9:
+        mov     ecx,edx
+        mov     edx,ebx
+        mov     ebx,ecx
+        mov     ecx,eax
+        mov     eax,esi
+
+//
+// Just the cleanup left to do.  edx:eax contains the quotient.  Set the sign
+// according to the save value, cleanup the stack, and return.
+//
+
+        dec     edi             // check to see if result is negative
+        jnz     short ....L8        // if EDI == 0, result should be negative
+        neg     edx             // otherwise, negate the result
+        neg     eax
+        sbb     edx,0
+
+//
+// Restore the saved registers and return.
+//
+
+....L8:
+        pop     ebp
+        pop     esi
+        pop     edi
+
+        ret     16
index ff8332f..08e6985 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/allmul.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 __allmul\r
-\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// llmul - long multiply routine\r
-//\r
-// Purpose:\r
-//       Does a long multiply (same for signed/unsigned)\r
-//       Parameters are not changed.\r
-//\r
-// Entry:\r
-//       Parameters are passed on the stack:\r
-//               1st pushed: multiplier (QWORD)\r
-//               2nd pushed: multiplicand (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX - product of multiplier and multiplicand\r
-//       NOTE: parameters are removed from the stack\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-\r
-__allmul:\r
-\r
-#define ALO  [esp + 4]       // stack address of a\r
-#define AHI  [esp + 8]       // stack address of a\r
-#define BLO  [esp + 12]      // stack address of b\r
-#define BHI  [esp + 16]      // stack address of b\r
-\r
-//\r
-//       AHI, BHI : upper 32 bits of A and B\r
-//       ALO, BLO : lower 32 bits of A and B\r
-//\r
-//             ALO * BLO\r
-//       ALO * BHI\r
-// +     BLO * AHI\r
-// ---------------------\r
-//\r
-\r
-        mov     eax,AHI\r
-        mov     ecx,BHI\r
-        or      ecx,eax         //test for both hiwords zero.\r
-        mov     ecx,BLO\r
-        jnz     short hard      //both are zero, just mult ALO and BLO\r
-\r
-        mov     eax,AHI\r
-        mul     ecx\r
-\r
-        ret     16              // callee restores the stack\r
-\r
-hard:\r
-        push    ebx\r
-\r
-// must redefine A and B since esp has been altered\r
-\r
-#define A2LO  [esp + 4]       // stack address of a\r
-#define A2HI  [esp + 8]       // stack address of a\r
-#define B2LO  [esp + 12]      // stack address of b\r
-#define B2HI  [esp + 16]      // stack address of b\r
-\r
-        mul     ecx             //eax has AHI, ecx has BLO, so AHI * BLO\r
-        mov     ebx,eax         //save result\r
-\r
-        mov     eax,A2LO\r
-        mul     dword ptr B2HI //ALO * BHI\r
-        add     ebx,eax         //ebx = ((ALO * BHI) + (AHI * BLO))\r
-\r
-        mov     eax,A2LO  //ecx = BLO\r
-        mul     ecx             //so edx:eax = ALO*BLO\r
-        add     edx,ebx         //now edx has all the LO*HI stuff\r
-\r
-        pop     ebx\r
-\r
-        ret     16              // callee restores the stack\r
-\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/allmul.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 __allmul
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// llmul - long multiply routine
+//
+// Purpose:
+//       Does a long multiply (same for signed/unsigned)
+//       Parameters are not changed.
+//
+// Entry:
+//       Parameters are passed on the stack:
+//               1st pushed: multiplier (QWORD)
+//               2nd pushed: multiplicand (QWORD)
+//
+// Exit:
+//       EDX:EAX - product of multiplier and multiplicand
+//       NOTE: parameters are removed from the stack
+//
+// Uses:
+//       ECX
+//
+
+__allmul:
+
+#define ALO  [esp + 4]       // stack address of a
+#define AHI  [esp + 8]       // stack address of a
+#define BLO  [esp + 12]      // stack address of b
+#define BHI  [esp + 16]      // stack address of b
+
+//
+//       AHI, BHI : upper 32 bits of A and B
+//       ALO, BLO : lower 32 bits of A and B
+//
+//             ALO * BLO
+//       ALO * BHI
+// +     BLO * AHI
+// ---------------------
+//
+
+        mov     eax,AHI
+        mov     ecx,BHI
+        or      ecx,eax         //test for both hiwords zero.
+        mov     ecx,BLO
+        jnz     short hard      //both are zero, just mult ALO and BLO
+
+        mov     eax,AHI
+        mul     ecx
+
+        ret     16              // callee restores the stack
+
+hard:
+        push    ebx
+
+// must redefine A and B since esp has been altered
+
+#define A2LO  [esp + 4]       // stack address of a
+#define A2HI  [esp + 8]       // stack address of a
+#define B2LO  [esp + 12]      // stack address of b
+#define B2HI  [esp + 16]      // stack address of b
+
+        mul     ecx             //eax has AHI, ecx has BLO, so AHI * BLO
+        mov     ebx,eax         //save result
+
+        mov     eax,A2LO
+        mul     dword ptr B2HI //ALO * BHI
+        add     ebx,eax         //ebx = ((ALO * BHI) + (AHI * BLO))
+
+        mov     eax,A2LO  //ecx = BLO
+        mul     ecx             //so edx:eax = ALO*BLO
+        add     edx,ebx         //now edx has all the LO*HI stuff
+
+        pop     ebx
+
+        ret     16              // callee restores the stack
+
index 43b2fec..1b9aa1c 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/allrem.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 __allrem\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// llrem - signed long remainder\r
-//\r
-// Purpose:\r
-//       Does a signed long remainder of the arguments.  Arguments are\r
-//       not changed.\r
-//\r
-// Entry:\r
-//       Arguments are passed on the stack:\r
-//               1st pushed: divisor (QWORD)\r
-//               2nd pushed: dividend (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX contains the remainder (dividend%divisor)\r
-//       NOTE: this routine removes the parameters from the stack.\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-\r
-__allrem :\r
-\r
-        push    ebx\r
-        push    edi\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a%b will\r
-// generate a call to lrem(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//               |       EBX     |\r
-//               |---------------|\r
-//       ESP---->|       EDI     |\r
-//               -----------------\r
-//\r
-\r
-#undef DVNDLO\r
-#undef DVNDHI\r
-#undef DVSRLO\r
-#undef DVSRHI\r
-#define DVNDLO  [esp + 12]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 16]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 20]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 24]      // stack address of divisor (b)\r
-\r
-// Determine sign of the result (edi = 0 if result is positive, non-zero\r
-// otherwise) and make operands positive.\r
-\r
-        xor     edi,edi         // result sign assumed positive\r
-\r
-        mov     eax,DVNDHI // hi word of a\r
-        or      eax,eax         // test to see if signed\r
-        jge     short .L1        // skip rest if a is already positive\r
-        inc     edi             // complement result sign flag bit\r
-        mov     edx,DVNDLO // lo word of a\r
-        neg     eax             // make a positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVNDHI,eax // save positive value\r
-        mov     DVNDLO,edx\r
-.L1:\r
-        mov     eax,DVSRHI // hi word of b\r
-        or      eax,eax         // test to see if signed\r
-        jge     short .L2        // skip rest if b is already positive\r
-        mov     edx,DVSRLO // lo word of b\r
-        neg     eax             // make b positive\r
-        neg     edx\r
-        sbb     eax,0\r
-        mov     DVSRHI,eax // save positive value\r
-        mov     DVSRLO,edx\r
-.L2:\r
-\r
-//\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-// NOTE - eax currently contains the high order word of DVSR\r
-//\r
-\r
-        or      eax,eax         // check to see if divisor < 4194304K\r
-        jnz     short .L3        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // edx <- remainder\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // edx <- final remainder\r
-        mov     eax,edx         // edx:eax <- remainder\r
-        xor     edx,edx\r
-        dec     edi             // check result sign flag\r
-        jns     short .L4        // negate result, restore stack and return\r
-        jmp     short .L8        // result sign ok, restore stack and return\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains the high word of DVSR\r
-//\r
-\r
-.L3:\r
-        mov     ebx,eax         // ebx:ecx <- divisor\r
-        mov     ecx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-.L5:\r
-        shr     ebx,1           // shift divisor right one bit\r
-        rcr     ecx,1\r
-        shr     edx,1           // shift dividend right one bit\r
-        rcr     eax,1\r
-        or      ebx,ebx\r
-        jnz     short .L5        // loop until divisor < 4194304K\r
-        div     ecx             // now divide, ignore remainder\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mov     ecx,eax         // save a copy of quotient in ECX\r
-        mul     dword ptr DVSRHI\r
-        xchg    ecx,eax         // save product, get quotient in EAX\r
-        mul     dword ptr DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short .L6        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise\r
-// subtract the original divisor from the result.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short .L6        // if result > original, do subtract\r
-        jb      short .L7        // if result < original, we are ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short .L7        // if less or equal we are ok, else subtract\r
-.L6:\r
-        sub     eax,DVSRLO // subtract divisor from result\r
-        sbb     edx,DVSRHI\r
-.L7:\r
-\r
-//\r
-// Calculate remainder by subtracting the result from the original dividend.\r
-// Since the result is already in a register, we will do the subtract in the\r
-// opposite direction and negate the result if necessary.\r
-//\r
-\r
-        sub     eax,DVNDLO // subtract dividend from result\r
-        sbb     edx,DVNDHI\r
-\r
-//\r
-// Now check the result sign flag to see if the result is supposed to be positive\r
-// or negative.  It is currently negated (because we subtracted in the 'wrong'\r
-// direction), so if the sign flag is set we are done, otherwise we must negate\r
-// the result to make it positive again.\r
-//\r
-\r
-        dec     edi             // check result sign flag\r
-        jns     short .L8        // result is ok, restore stack and return\r
-.L4:\r
-        neg     edx             // otherwise, negate the result\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Just the cleanup left to do.  edx:eax contains the quotient.\r
-// Restore the saved registers and return.\r
-//\r
-\r
-.L8:\r
-        pop     edi\r
-        pop     ebx\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/allrem.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 __allrem
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// llrem - signed long remainder
+//
+// Purpose:
+//       Does a signed long remainder of the arguments.  Arguments are
+//       not changed.
+//
+// Entry:
+//       Arguments are passed on the stack:
+//               1st pushed: divisor (QWORD)
+//               2nd pushed: dividend (QWORD)
+//
+// Exit:
+//       EDX:EAX contains the remainder (dividend%divisor)
+//       NOTE: this routine removes the parameters from the stack.
+//
+// Uses:
+//       ECX
+//
+
+__allrem :
+
+        push    ebx
+        push    edi
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a%b will
+// generate a call to lrem(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//               |       EBX     |
+//               |---------------|
+//       ESP---->|       EDI     |
+//               -----------------
+//
+
+#undef DVNDLO
+#undef DVNDHI
+#undef DVSRLO
+#undef DVSRHI
+#define DVNDLO  [esp + 12]       // stack address of dividend (a)
+#define DVNDHI  [esp + 16]       // stack address of dividend (a)
+#define DVSRLO  [esp + 20]      // stack address of divisor (b)
+#define DVSRHI  [esp + 24]      // stack address of divisor (b)
+
+// Determine sign of the result (edi = 0 if result is positive, non-zero
+// otherwise) and make operands positive.
+
+        xor     edi,edi         // result sign assumed positive
+
+        mov     eax,DVNDHI // hi word of a
+        or      eax,eax         // test to see if signed
+        jge     short .L1        // skip rest if a is already positive
+        inc     edi             // complement result sign flag bit
+        mov     edx,DVNDLO // lo word of a
+        neg     eax             // make a positive
+        neg     edx
+        sbb     eax,0
+        mov     DVNDHI,eax // save positive value
+        mov     DVNDLO,edx
+.L1:
+        mov     eax,DVSRHI // hi word of b
+        or      eax,eax         // test to see if signed
+        jge     short .L2        // skip rest if b is already positive
+        mov     edx,DVSRLO // lo word of b
+        neg     eax             // make b positive
+        neg     edx
+        sbb     eax,0
+        mov     DVSRHI,eax // save positive value
+        mov     DVSRLO,edx
+.L2:
+
+//
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+// NOTE - eax currently contains the high order word of DVSR
+//
+
+        or      eax,eax         // check to see if divisor < 4194304K
+        jnz     short .L3        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // edx <- remainder
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // edx <- final remainder
+        mov     eax,edx         // edx:eax <- remainder
+        xor     edx,edx
+        dec     edi             // check result sign flag
+        jns     short .L4        // negate result, restore stack and return
+        jmp     short .L8        // result sign ok, restore stack and return
+
+//
+// Here we do it the hard way.  Remember, eax contains the high word of DVSR
+//
+
+.L3:
+        mov     ebx,eax         // ebx:ecx <- divisor
+        mov     ecx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+.L5:
+        shr     ebx,1           // shift divisor right one bit
+        rcr     ecx,1
+        shr     edx,1           // shift dividend right one bit
+        rcr     eax,1
+        or      ebx,ebx
+        jnz     short .L5        // loop until divisor < 4194304K
+        div     ecx             // now divide, ignore remainder
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mov     ecx,eax         // save a copy of quotient in ECX
+        mul     dword ptr DVSRHI
+        xchg    ecx,eax         // save product, get quotient in EAX
+        mul     dword ptr DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short .L6        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
+// subtract the original divisor from the result.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short .L6        // if result > original, do subtract
+        jb      short .L7        // if result < original, we are ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short .L7        // if less or equal we are ok, else subtract
+.L6:
+        sub     eax,DVSRLO // subtract divisor from result
+        sbb     edx,DVSRHI
+.L7:
+
+//
+// Calculate remainder by subtracting the result from the original dividend.
+// Since the result is already in a register, we will do the subtract in the
+// opposite direction and negate the result if necessary.
+//
+
+        sub     eax,DVNDLO // subtract dividend from result
+        sbb     edx,DVNDHI
+
+//
+// Now check the result sign flag to see if the result is supposed to be positive
+// or negative.  It is currently negated (because we subtracted in the 'wrong'
+// direction), so if the sign flag is set we are done, otherwise we must negate
+// the result to make it positive again.
+//
+
+        dec     edi             // check result sign flag
+        jns     short .L8        // result is ok, restore stack and return
+.L4:
+        neg     edx             // otherwise, negate the result
+        neg     eax
+        sbb     edx,0
+
+//
+// Just the cleanup left to do.  edx:eax contains the quotient.
+// Restore the saved registers and return.
+//
+
+.L8:
+        pop     edi
+        pop     ebx
+
+        ret     16
index 8032f8e..2f77ceb 100644 (file)
@@ -1,95 +1,95 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/allshl.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 __allshl\r
-\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// llshl - long shift left\r
-//\r
-// Purpose:\r
-//       Does a Long Shift Left (signed and unsigned are identical)\r
-//       Shifts a long left any number of bits.\r
-//\r
-// Entry:\r
-//       EDX:EAX - long value to be shifted\r
-//       CL      - number of bits to shift by\r
-//\r
-// Exit:\r
-//       EDX:EAX - shifted value\r
-//\r
-// Uses:\r
-//       CL is destroyed.\r
-//\r
-\r
-__allshl:\r
-\r
-//\r
-// Handle shifts of 64 or more bits (all get 0)\r
-//\r
-        cmp     cl, 64\r
-        jae     short RETZERO\r
-\r
-//\r
-// Handle shifts of between 0 and 31 bits\r
-//\r
-        cmp     cl, 32\r
-        jae     short MORE32\r
-        shld    edx,eax,cl\r
-        shl     eax,cl\r
-        ret\r
-\r
-//\r
-// Handle shifts of between 32 and 63 bits\r
-//\r
-MORE32:\r
-        mov     edx,eax\r
-        xor     eax,eax\r
-        and     cl,31\r
-        shl     edx,cl\r
-        ret\r
-\r
-//\r
-// return 0 in edx:eax\r
-//\r
-RETZERO:\r
-        xor     eax,eax\r
-        xor     edx,edx\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/allshl.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 __allshl
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// llshl - long shift left
+//
+// Purpose:
+//       Does a Long Shift Left (signed and unsigned are identical)
+//       Shifts a long left any number of bits.
+//
+// Entry:
+//       EDX:EAX - long value to be shifted
+//       CL      - number of bits to shift by
+//
+// Exit:
+//       EDX:EAX - shifted value
+//
+// Uses:
+//       CL is destroyed.
+//
+
+__allshl:
+
+//
+// Handle shifts of 64 or more bits (all get 0)
+//
+        cmp     cl, 64
+        jae     short RETZERO
+
+//
+// Handle shifts of between 0 and 31 bits
+//
+        cmp     cl, 32
+        jae     short MORE32
+        shld    edx,eax,cl
+        shl     eax,cl
+        ret
+
+//
+// Handle shifts of between 32 and 63 bits
+//
+MORE32:
+        mov     edx,eax
+        xor     eax,eax
+        and     cl,31
+        shl     edx,cl
+        ret
+
+//
+// return 0 in edx:eax
+//
+RETZERO:
+        xor     eax,eax
+        xor     edx,edx
+        ret
index 8c16a45..400660d 100644 (file)
@@ -1,96 +1,96 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/allshr.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 __allshr\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// llshr - long shift right\r
-//\r
-// Purpose:\r
-//       Does a signed Long Shift Right\r
-//       Shifts a long right any number of bits.\r
-//\r
-// Entry:\r
-//       EDX:EAX - long value to be shifted\r
-//       CL      - number of bits to shift by\r
-//\r
-// Exit:\r
-//       EDX:EAX - shifted value\r
-//\r
-// Uses:\r
-//       CL is destroyed.\r
-//\r
-\r
-__allshr:\r
-\r
-//\r
-// Handle shifts of 64 bits or more (if shifting 64 bits or more, the result\r
-// depends only on the high order bit of edx).\r
-//\r
-        cmp     cl,64\r
-        jae     short .RETSIGN\r
-\r
-//\r
-// Handle shifts of between 0 and 31 bits\r
-//\r
-        cmp     cl, 32\r
-        jae     short .MORE32\r
-        shrd    eax,edx,cl\r
-        sar     edx,cl\r
-        ret\r
-\r
-//\r
-// Handle shifts of between 32 and 63 bits\r
-//\r
-.MORE32:\r
-        mov     eax,edx\r
-        sar     edx,31\r
-        and     cl,31\r
-        sar     eax,cl\r
-        ret\r
-\r
-//\r
-// Return double precision 0 or -1, depending on the sign of edx\r
-//\r
-.RETSIGN:\r
-        sar     edx,31\r
-        mov     eax,edx\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/allshr.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 __allshr
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// llshr - long shift right
+//
+// Purpose:
+//       Does a signed Long Shift Right
+//       Shifts a long right any number of bits.
+//
+// Entry:
+//       EDX:EAX - long value to be shifted
+//       CL      - number of bits to shift by
+//
+// Exit:
+//       EDX:EAX - shifted value
+//
+// Uses:
+//       CL is destroyed.
+//
+
+__allshr:
+
+//
+// Handle shifts of 64 bits or more (if shifting 64 bits or more, the result
+// depends only on the high order bit of edx).
+//
+        cmp     cl,64
+        jae     short .RETSIGN
+
+//
+// Handle shifts of between 0 and 31 bits
+//
+        cmp     cl, 32
+        jae     short .MORE32
+        shrd    eax,edx,cl
+        sar     edx,cl
+        ret
+
+//
+// Handle shifts of between 32 and 63 bits
+//
+.MORE32:
+        mov     eax,edx
+        sar     edx,31
+        and     cl,31
+        sar     eax,cl
+        ret
+
+//
+// Return double precision 0 or -1, depending on the sign of edx
+//
+.RETSIGN:
+        sar     edx,31
+        mov     eax,edx
+        ret
index 77c196e..3389fa4 100644 (file)
@@ -1,51 +1,51 @@
-/*\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 _atan\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_atan:\r
-        push    ebp\r
-        mov     ebp,esp\r
-        fld     qword ptr [ebp+8]       // Load real from stack\r
-        fld1                            // Load constant 1\r
-        fpatan                          // Take the arctangent\r
-        pop     ebp\r
-        ret\r
+/*
+ * 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 _atan
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_atan:
+        push    ebp
+        mov     ebp,esp
+        fld     qword ptr [ebp+8]       // Load real from stack
+        fld1                            // Load constant 1
+        fpatan                          // Take the arctangent
+        pop     ebp
+        ret
index 537ffd6..1386aef 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/aulldiv_asm.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 __aulldiv\r
-\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// ulldiv - unsigned long divide\r
-//\r
-// Purpose:\r
-//       Does a unsigned long divide of the arguments.  Arguments are\r
-//       not changed.\r
-//\r
-// Entry:\r
-//       Arguments are passed on the stack:\r
-//               1st pushed: divisor (QWORD)\r
-//               2nd pushed: dividend (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX contains the quotient (dividend/divisor)\r
-//       NOTE: this routine removes the parameters from the stack.\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-\r
-__aulldiv:\r
-\r
-        push    ebx\r
-        push    esi\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a/b will\r
-// generate a call to uldiv(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//               |      EBX      |\r
-//               |---------------|\r
-//       ESP---->|      ESI      |\r
-//               -----------------\r
-//\r
-\r
-#undef DVNDLO\r
-#undef DVNDHI\r
-#undef DVSRLO\r
-#undef DVSRHI\r
-#define DVNDLO  [esp + 12]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 16]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 20]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 24]      // stack address of divisor (b)\r
-\r
-//\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-\r
-        mov     eax,DVSRHI // check to see if divisor < 4194304K\r
-        or      eax,eax\r
-        jnz     short ..L1        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // get high order bits of quotient\r
-        mov     ebx,eax         // save high bits of quotient\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // get low order bits of quotient\r
-        mov     edx,ebx         // edx:eax <- quotient hi:quotient lo\r
-        jmp     short ..L2        // restore stack and return\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains DVSRHI\r
-//\r
-\r
-..L1:\r
-        mov     ecx,eax         // ecx:ebx <- divisor\r
-        mov     ebx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-..L3:\r
-        shr     ecx,1           // shift divisor right one bit// hi bit <- 0\r
-        rcr     ebx,1\r
-        shr     edx,1           // shift dividend right one bit// hi bit <- 0\r
-        rcr     eax,1\r
-        or      ecx,ecx\r
-        jnz     short ..L3        // loop until divisor < 4194304K\r
-        div     ebx             // now divide, ignore remainder\r
-        mov     esi,eax         // save quotient\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mul     dword ptr DVSRHI // QUOT * DVSRHI\r
-        mov     ecx,eax\r
-        mov     eax,DVSRLO\r
-        mul     esi             // QUOT * DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short ..L4        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise\r
-// subtract one (1) from the quotient.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short ..L4        // if result > original, do subtract\r
-        jb      short ..L5        // if result < original, we are ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short ..L5        // if less or equal we are ok, else subtract\r
-..L4:\r
-        dec     esi             // subtract 1 from quotient\r
-..L5:\r
-        xor     edx,edx         // edx:eax <- quotient\r
-        mov     eax,esi\r
-\r
-//\r
-// Just the cleanup left to do.  edx:eax contains the quotient.\r
-// Restore the saved registers and return.\r
-//\r
-\r
-..L2:\r
-\r
-        pop     esi\r
-        pop     ebx\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/aulldiv_asm.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 __aulldiv
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// ulldiv - unsigned long divide
+//
+// Purpose:
+//       Does a unsigned long divide of the arguments.  Arguments are
+//       not changed.
+//
+// Entry:
+//       Arguments are passed on the stack:
+//               1st pushed: divisor (QWORD)
+//               2nd pushed: dividend (QWORD)
+//
+// Exit:
+//       EDX:EAX contains the quotient (dividend/divisor)
+//       NOTE: this routine removes the parameters from the stack.
+//
+// Uses:
+//       ECX
+//
+
+__aulldiv:
+
+        push    ebx
+        push    esi
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a/b will
+// generate a call to uldiv(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//               |      EBX      |
+//               |---------------|
+//       ESP---->|      ESI      |
+//               -----------------
+//
+
+#undef DVNDLO
+#undef DVNDHI
+#undef DVSRLO
+#undef DVSRHI
+#define DVNDLO  [esp + 12]       // stack address of dividend (a)
+#define DVNDHI  [esp + 16]       // stack address of dividend (a)
+#define DVSRLO  [esp + 20]      // stack address of divisor (b)
+#define DVSRHI  [esp + 24]      // stack address of divisor (b)
+
+//
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+
+        mov     eax,DVSRHI // check to see if divisor < 4194304K
+        or      eax,eax
+        jnz     short ..L1        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // get high order bits of quotient
+        mov     ebx,eax         // save high bits of quotient
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // get low order bits of quotient
+        mov     edx,ebx         // edx:eax <- quotient hi:quotient lo
+        jmp     short ..L2        // restore stack and return
+
+//
+// Here we do it the hard way.  Remember, eax contains DVSRHI
+//
+
+..L1:
+        mov     ecx,eax         // ecx:ebx <- divisor
+        mov     ebx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+..L3:
+        shr     ecx,1           // shift divisor right one bit// hi bit <- 0
+        rcr     ebx,1
+        shr     edx,1           // shift dividend right one bit// hi bit <- 0
+        rcr     eax,1
+        or      ecx,ecx
+        jnz     short ..L3        // loop until divisor < 4194304K
+        div     ebx             // now divide, ignore remainder
+        mov     esi,eax         // save quotient
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mul     dword ptr DVSRHI // QUOT * DVSRHI
+        mov     ecx,eax
+        mov     eax,DVSRLO
+        mul     esi             // QUOT * DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short ..L4        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
+// subtract one (1) from the quotient.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short ..L4        // if result > original, do subtract
+        jb      short ..L5        // if result < original, we are ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short ..L5        // if less or equal we are ok, else subtract
+..L4:
+        dec     esi             // subtract 1 from quotient
+..L5:
+        xor     edx,edx         // edx:eax <- quotient
+        mov     eax,esi
+
+//
+// Just the cleanup left to do.  edx:eax contains the quotient.
+// Restore the saved registers and return.
+//
+
+..L2:
+
+        pop     esi
+        pop     ebx
+
+        ret     16
index 5ca2d46..9bb8d7a 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/aulldvrm.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 __aulldvrm\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-__aulldvrm:\r
-\r
-// ulldvrm - unsigned long divide and remainder\r
-//\r
-// Purpose:\r
-//       Does a unsigned long divide and remainder of the arguments.  Arguments\r
-//       are not changed.\r
-//\r
-// Entry:\r
-//       Arguments are passed on the stack:\r
-//               1st pushed: divisor (QWORD)\r
-//               2nd pushed: dividend (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX contains the quotient (dividend/divisor)\r
-//       EBX:ECX contains the remainder (divided % divisor)\r
-//       NOTE: this routine removes the parameters from the stack.\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-        push    esi\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a/b will\r
-// generate a call to aulldvrm(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//       ESP---->|      ESI      |\r
-//               -----------------\r
-//\r
-\r
-#undef DVNDLO\r
-#undef DVNDHI\r
-#undef DVSRLO\r
-#undef DVSRHI\r
-#define DVNDLO  [esp + 8]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 8]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 16]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 20]      // stack address of divisor (b)\r
-\r
-//\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-\r
-        mov     eax,DVSRHI // check to see if divisor < 4194304K\r
-        or      eax,eax\r
-        jnz     short .....L1        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // get high order bits of quotient\r
-        mov     ebx,eax         // save high bits of quotient\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // get low order bits of quotient\r
-        mov     esi,eax         // ebx:esi <- quotient\r
-\r
-//\r
-// Now we need to do a multiply so that we can compute the remainder.\r
-//\r
-        mov     eax,ebx         // set up high word of quotient\r
-        mul     dword ptr DVSRLO // HIWORD(QUOT) * DVSR\r
-        mov     ecx,eax         // save the result in ecx\r
-        mov     eax,esi         // set up low word of quotient\r
-        mul     dword ptr DVSRLO // LOWORD(QUOT) * DVSR\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jmp     short .....L2        // complete remainder calculation\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains DVSRHI\r
-//\r
-\r
-.....L1:\r
-        mov     ecx,eax         // ecx:ebx <- divisor\r
-        mov     ebx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-.....L3:\r
-        shr     ecx,1           // shift divisor right one bit// hi bit <- 0\r
-        rcr     ebx,1\r
-        shr     edx,1           // shift dividend right one bit// hi bit <- 0\r
-        rcr     eax,1\r
-        or      ecx,ecx\r
-        jnz     short .....L3        // loop until divisor < 4194304K\r
-        div     ebx             // now divide, ignore remainder\r
-        mov     esi,eax         // save quotient\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mul     dword ptr DVSRHI // QUOT * DVSRHI\r
-        mov     ecx,eax\r
-        mov     eax,DVSRLO\r
-        mul     esi             // QUOT * DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short .....L4        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise\r
-// subtract one (1) from the quotient.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short .....L4        // if result > original, do subtract\r
-        jb      short .....L5        // if result < original, we are ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short .....L5        // if less or equal we are ok, else subtract\r
-.....L4:\r
-        dec     esi             // subtract 1 from quotient\r
-        sub     eax,DVSRLO // subtract divisor from result\r
-        sbb     edx,DVSRHI\r
-.....L5:\r
-        xor     ebx,ebx         // ebx:esi <- quotient\r
-\r
-.....L2:\r
-//\r
-// Calculate remainder by subtracting the result from the original dividend.\r
-// Since the result is already in a register, we will do the subtract in the\r
-// opposite direction and negate the result.\r
-//\r
-\r
-        sub     eax,DVNDLO // subtract dividend from result\r
-        sbb     edx,DVNDHI\r
-        neg     edx             // otherwise, negate the result\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Now we need to get the quotient into edx:eax and the remainder into ebx:ecx.\r
-//\r
-        mov     ecx,edx\r
-        mov     edx,ebx\r
-        mov     ebx,ecx\r
-        mov     ecx,eax\r
-        mov     eax,esi\r
-//\r
-// Just the cleanup left to do.  edx:eax contains the quotient.\r
-// Restore the saved registers and return.\r
-//\r
-\r
-        pop     esi\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/aulldvrm.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 __aulldvrm
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+__aulldvrm:
+
+// ulldvrm - unsigned long divide and remainder
+//
+// Purpose:
+//       Does a unsigned long divide and remainder of the arguments.  Arguments
+//       are not changed.
+//
+// Entry:
+//       Arguments are passed on the stack:
+//               1st pushed: divisor (QWORD)
+//               2nd pushed: dividend (QWORD)
+//
+// Exit:
+//       EDX:EAX contains the quotient (dividend/divisor)
+//       EBX:ECX contains the remainder (divided % divisor)
+//       NOTE: this routine removes the parameters from the stack.
+//
+// Uses:
+//       ECX
+//
+        push    esi
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a/b will
+// generate a call to aulldvrm(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//       ESP---->|      ESI      |
+//               -----------------
+//
+
+#undef DVNDLO
+#undef DVNDHI
+#undef DVSRLO
+#undef DVSRHI
+#define DVNDLO  [esp + 8]       // stack address of dividend (a)
+#define DVNDHI  [esp + 8]       // stack address of dividend (a)
+#define DVSRLO  [esp + 16]      // stack address of divisor (b)
+#define DVSRHI  [esp + 20]      // stack address of divisor (b)
+
+//
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+
+        mov     eax,DVSRHI // check to see if divisor < 4194304K
+        or      eax,eax
+        jnz     short .....L1        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // get high order bits of quotient
+        mov     ebx,eax         // save high bits of quotient
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // get low order bits of quotient
+        mov     esi,eax         // ebx:esi <- quotient
+
+//
+// Now we need to do a multiply so that we can compute the remainder.
+//
+        mov     eax,ebx         // set up high word of quotient
+        mul     dword ptr DVSRLO // HIWORD(QUOT) * DVSR
+        mov     ecx,eax         // save the result in ecx
+        mov     eax,esi         // set up low word of quotient
+        mul     dword ptr DVSRLO // LOWORD(QUOT) * DVSR
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jmp     short .....L2        // complete remainder calculation
+
+//
+// Here we do it the hard way.  Remember, eax contains DVSRHI
+//
+
+.....L1:
+        mov     ecx,eax         // ecx:ebx <- divisor
+        mov     ebx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+.....L3:
+        shr     ecx,1           // shift divisor right one bit// hi bit <- 0
+        rcr     ebx,1
+        shr     edx,1           // shift dividend right one bit// hi bit <- 0
+        rcr     eax,1
+        or      ecx,ecx
+        jnz     short .....L3        // loop until divisor < 4194304K
+        div     ebx             // now divide, ignore remainder
+        mov     esi,eax         // save quotient
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mul     dword ptr DVSRHI // QUOT * DVSRHI
+        mov     ecx,eax
+        mov     eax,DVSRLO
+        mul     esi             // QUOT * DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short .....L4        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we are ok, otherwise
+// subtract one (1) from the quotient.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short .....L4        // if result > original, do subtract
+        jb      short .....L5        // if result < original, we are ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short .....L5        // if less or equal we are ok, else subtract
+.....L4:
+        dec     esi             // subtract 1 from quotient
+        sub     eax,DVSRLO // subtract divisor from result
+        sbb     edx,DVSRHI
+.....L5:
+        xor     ebx,ebx         // ebx:esi <- quotient
+
+.....L2:
+//
+// Calculate remainder by subtracting the result from the original dividend.
+// Since the result is already in a register, we will do the subtract in the
+// opposite direction and negate the result.
+//
+
+        sub     eax,DVNDLO // subtract dividend from result
+        sbb     edx,DVNDHI
+        neg     edx             // otherwise, negate the result
+        neg     eax
+        sbb     edx,0
+
+//
+// Now we need to get the quotient into edx:eax and the remainder into ebx:ecx.
+//
+        mov     ecx,edx
+        mov     edx,ebx
+        mov     ebx,ecx
+        mov     ecx,eax
+        mov     eax,esi
+//
+// Just the cleanup left to do.  edx:eax contains the quotient.
+// Restore the saved registers and return.
+//
+
+        pop     esi
+
+        ret     16
index d6d49b0..a27098e 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/aullrem.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 __aullrem\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// ullrem - unsigned long remainder\r
-//\r
-// Purpose:\r
-//       Does a unsigned long remainder of the arguments.  Arguments are\r
-//       not changed.\r
-//\r
-// Entry:\r
-//       Arguments are passed on the stack:\r
-//               1st pushed: divisor (QWORD)\r
-//               2nd pushed: dividend (QWORD)\r
-//\r
-// Exit:\r
-//       EDX:EAX contains the remainder (dividend%divisor)\r
-//       NOTE: this routine removes the parameters from the stack.\r
-//\r
-// Uses:\r
-//       ECX\r
-//\r
-\r
-__aullrem:\r
-\r
-        push    ebx\r
-\r
-// Set up the local stack and save the index registers.  When this is done\r
-// the stack frame will look as follows (assuming that the expression a%b will\r
-// generate a call to ullrem(a, b)):\r
-//\r
-//               -----------------\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--divisor (b)--|\r
-//               |               |\r
-//               |---------------|\r
-//               |               |\r
-//               |--dividend (a)-|\r
-//               |               |\r
-//               |---------------|\r
-//               | return addr** |\r
-//               |---------------|\r
-//       ESP---->|      EBX      |\r
-//               -----------------\r
-//\r
-\r
-#undef DVNDLO\r
-#undef DVNDHI\r
-#undef DVSRLO\r
-#undef DVSRHI\r
-#define DVNDLO  [esp + 8]       // stack address of dividend (a)\r
-#define DVNDHI  [esp + 8]       // stack address of dividend (a)\r
-#define DVSRLO  [esp + 16]      // stack address of divisor (b)\r
-#define DVSRHI  [esp + 20]      // stack address of divisor (b)\r
-\r
-// Now do the divide.  First look to see if the divisor is less than 4194304K.\r
-// If so, then we can use a simple algorithm with word divides, otherwise\r
-// things get a little more complex.\r
-//\r
-\r
-        mov     eax,DVSRHI // check to see if divisor < 4194304K\r
-        or      eax,eax\r
-        jnz     short ...L1        // nope, gotta do this the hard way\r
-        mov     ecx,DVSRLO // load divisor\r
-        mov     eax,DVNDHI // load high word of dividend\r
-        xor     edx,edx\r
-        div     ecx             // edx <- remainder, eax <- quotient\r
-        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend\r
-        div     ecx             // edx <- final remainder\r
-        mov     eax,edx         // edx:eax <- remainder\r
-        xor     edx,edx\r
-        jmp     short ...L2        // restore stack and return\r
-\r
-//\r
-// Here we do it the hard way.  Remember, eax contains DVSRHI\r
-//\r
-\r
-...L1:\r
-        mov     ecx,eax         // ecx:ebx <- divisor\r
-        mov     ebx,DVSRLO\r
-        mov     edx,DVNDHI // edx:eax <- dividend\r
-        mov     eax,DVNDLO\r
-...L3:\r
-        shr     ecx,1           // shift divisor right one bit// hi bit <- 0\r
-        rcr     ebx,1\r
-        shr     edx,1           // shift dividend right one bit// hi bit <- 0\r
-        rcr     eax,1\r
-        or      ecx,ecx\r
-        jnz     short ...L3        // loop until divisor < 4194304K\r
-        div     ebx             // now divide, ignore remainder\r
-\r
-//\r
-// We may be off by one, so to check, we will multiply the quotient\r
-// by the divisor and check the result against the orignal dividend\r
-// Note that we must also check for overflow, which can occur if the\r
-// dividend is close to 2**64 and the quotient is off by 1.\r
-//\r
-\r
-        mov     ecx,eax         // save a copy of quotient in ECX\r
-        mul     dword ptr DVSRHI\r
-        xchg    ecx,eax         // put partial product in ECX, get quotient in EAX\r
-        mul     dword ptr DVSRLO\r
-        add     edx,ecx         // EDX:EAX = QUOT * DVSR\r
-        jc      short ...L4        // carry means Quotient is off by 1\r
-\r
-//\r
-// do long compare here between original dividend and the result of the\r
-// multiply in edx:eax.  If original is larger or equal, we're ok, otherwise\r
-// subtract the original divisor from the result.\r
-//\r
-\r
-        cmp     edx,DVNDHI // compare hi words of result and original\r
-        ja      short ...L4        // if result > original, do subtract\r
-        jb      short ...L5        // if result < original, we're ok\r
-        cmp     eax,DVNDLO // hi words are equal, compare lo words\r
-        jbe     short ...L5        // if less or equal we're ok, else subtract\r
-...L4:\r
-        sub     eax,DVSRLO // subtract divisor from result\r
-        sbb     edx,DVSRHI\r
-...L5:\r
-\r
-//\r
-// Calculate remainder by subtracting the result from the original dividend.\r
-// Since the result is already in a register, we will perform the subtract in\r
-// the opposite direction and negate the result to make it positive.\r
-//\r
-\r
-        sub     eax,DVNDLO // subtract original dividend from result\r
-        sbb     edx,DVNDHI\r
-        neg     edx             // and negate it\r
-        neg     eax\r
-        sbb     edx,0\r
-\r
-//\r
-// Just the cleanup left to do.  dx:ax contains the remainder.\r
-// Restore the saved registers and return.\r
-//\r
-\r
-...L2:\r
-\r
-        pop     ebx\r
-\r
-        ret     16\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/aullrem.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 __aullrem
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// ullrem - unsigned long remainder
+//
+// Purpose:
+//       Does a unsigned long remainder of the arguments.  Arguments are
+//       not changed.
+//
+// Entry:
+//       Arguments are passed on the stack:
+//               1st pushed: divisor (QWORD)
+//               2nd pushed: dividend (QWORD)
+//
+// Exit:
+//       EDX:EAX contains the remainder (dividend%divisor)
+//       NOTE: this routine removes the parameters from the stack.
+//
+// Uses:
+//       ECX
+//
+
+__aullrem:
+
+        push    ebx
+
+// Set up the local stack and save the index registers.  When this is done
+// the stack frame will look as follows (assuming that the expression a%b will
+// generate a call to ullrem(a, b)):
+//
+//               -----------------
+//               |               |
+//               |---------------|
+//               |               |
+//               |--divisor (b)--|
+//               |               |
+//               |---------------|
+//               |               |
+//               |--dividend (a)-|
+//               |               |
+//               |---------------|
+//               | return addr** |
+//               |---------------|
+//       ESP---->|      EBX      |
+//               -----------------
+//
+
+#undef DVNDLO
+#undef DVNDHI
+#undef DVSRLO
+#undef DVSRHI
+#define DVNDLO  [esp + 8]       // stack address of dividend (a)
+#define DVNDHI  [esp + 8]       // stack address of dividend (a)
+#define DVSRLO  [esp + 16]      // stack address of divisor (b)
+#define DVSRHI  [esp + 20]      // stack address of divisor (b)
+
+// Now do the divide.  First look to see if the divisor is less than 4194304K.
+// If so, then we can use a simple algorithm with word divides, otherwise
+// things get a little more complex.
+//
+
+        mov     eax,DVSRHI // check to see if divisor < 4194304K
+        or      eax,eax
+        jnz     short ...L1        // nope, gotta do this the hard way
+        mov     ecx,DVSRLO // load divisor
+        mov     eax,DVNDHI // load high word of dividend
+        xor     edx,edx
+        div     ecx             // edx <- remainder, eax <- quotient
+        mov     eax,DVNDLO // edx:eax <- remainder:lo word of dividend
+        div     ecx             // edx <- final remainder
+        mov     eax,edx         // edx:eax <- remainder
+        xor     edx,edx
+        jmp     short ...L2        // restore stack and return
+
+//
+// Here we do it the hard way.  Remember, eax contains DVSRHI
+//
+
+...L1:
+        mov     ecx,eax         // ecx:ebx <- divisor
+        mov     ebx,DVSRLO
+        mov     edx,DVNDHI // edx:eax <- dividend
+        mov     eax,DVNDLO
+...L3:
+        shr     ecx,1           // shift divisor right one bit// hi bit <- 0
+        rcr     ebx,1
+        shr     edx,1           // shift dividend right one bit// hi bit <- 0
+        rcr     eax,1
+        or      ecx,ecx
+        jnz     short ...L3        // loop until divisor < 4194304K
+        div     ebx             // now divide, ignore remainder
+
+//
+// We may be off by one, so to check, we will multiply the quotient
+// by the divisor and check the result against the orignal dividend
+// Note that we must also check for overflow, which can occur if the
+// dividend is close to 2**64 and the quotient is off by 1.
+//
+
+        mov     ecx,eax         // save a copy of quotient in ECX
+        mul     dword ptr DVSRHI
+        xchg    ecx,eax         // put partial product in ECX, get quotient in EAX
+        mul     dword ptr DVSRLO
+        add     edx,ecx         // EDX:EAX = QUOT * DVSR
+        jc      short ...L4        // carry means Quotient is off by 1
+
+//
+// do long compare here between original dividend and the result of the
+// multiply in edx:eax.  If original is larger or equal, we're ok, otherwise
+// subtract the original divisor from the result.
+//
+
+        cmp     edx,DVNDHI // compare hi words of result and original
+        ja      short ...L4        // if result > original, do subtract
+        jb      short ...L5        // if result < original, we're ok
+        cmp     eax,DVNDLO // hi words are equal, compare lo words
+        jbe     short ...L5        // if less or equal we're ok, else subtract
+...L4:
+        sub     eax,DVSRLO // subtract divisor from result
+        sbb     edx,DVSRHI
+...L5:
+
+//
+// Calculate remainder by subtracting the result from the original dividend.
+// Since the result is already in a register, we will perform the subtract in
+// the opposite direction and negate the result to make it positive.
+//
+
+        sub     eax,DVNDLO // subtract original dividend from result
+        sbb     edx,DVNDHI
+        neg     edx             // and negate it
+        neg     eax
+        sbb     edx,0
+
+//
+// Just the cleanup left to do.  dx:ax contains the remainder.
+// Restore the saved registers and return.
+//
+
+...L2:
+
+        pop     ebx
+
+        ret     16
index ddbe3bf..7777115 100644 (file)
@@ -1,96 +1,96 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/uallshr.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 __aullshr\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-//\r
-// ullshr - long shift right\r
-//\r
-// Purpose:\r
-//       Does a unsigned Long Shift Right\r
-//       Shifts a long right any number of bits.\r
-//\r
-// Entry:\r
-//       EDX:EAX - long value to be shifted\r
-//       CL      - number of bits to shift by\r
-//\r
-// Exit:\r
-//       EDX:EAX - shifted value\r
-//\r
-// Uses:\r
-//       CL is destroyed.\r
-//\r
-\r
-__aullshr:\r
-\r
-//\r
-// Handle shifts of 64 bits or more (if shifting 64 bits or more, the result\r
-// depends only on the high order bit of edx).\r
-//\r
-        cmp     cl,64\r
-        jae     short ..RETZERO\r
-\r
-//\r
-// Handle shifts of between 0 and 31 bits\r
-//\r
-        cmp     cl, 32\r
-        jae     short ..MORE32\r
-        shrd    eax,edx,cl\r
-        shr     edx,cl\r
-        ret\r
-\r
-//\r
-// Handle shifts of between 32 and 63 bits\r
-//\r
-..MORE32:\r
-        mov     eax,edx\r
-        xor     edx,edx\r
-        and     cl,31\r
-        shr     eax,cl\r
-        ret\r
-\r
-//\r
-// return 0 in edx:eax\r
-//\r
-..RETZERO:\r
-        xor     eax,eax\r
-        xor     edx,edx\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/uallshr.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 __aullshr
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+//
+// ullshr - long shift right
+//
+// Purpose:
+//       Does a unsigned Long Shift Right
+//       Shifts a long right any number of bits.
+//
+// Entry:
+//       EDX:EAX - long value to be shifted
+//       CL      - number of bits to shift by
+//
+// Exit:
+//       EDX:EAX - shifted value
+//
+// Uses:
+//       CL is destroyed.
+//
+
+__aullshr:
+
+//
+// Handle shifts of 64 bits or more (if shifting 64 bits or more, the result
+// depends only on the high order bit of edx).
+//
+        cmp     cl,64
+        jae     short ..RETZERO
+
+//
+// Handle shifts of between 0 and 31 bits
+//
+        cmp     cl, 32
+        jae     short ..MORE32
+        shrd    eax,edx,cl
+        shr     edx,cl
+        ret
+
+//
+// Handle shifts of between 32 and 63 bits
+//
+..MORE32:
+        mov     eax,edx
+        xor     edx,edx
+        and     cl,31
+        shr     eax,cl
+        ret
+
+//
+// return 0 in edx:eax
+//
+..RETZERO:
+        xor     eax,eax
+        xor     edx,edx
+        ret
index 2144b8a..e6cdd45 100644 (file)
@@ -1,58 +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
+/*
+ * 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
index 9c2cc7c..60fd2ce 100644 (file)
@@ -1,44 +1,44 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            comparememory_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _RtlCompareMemory@12          // [4]  (no bug)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlCompareMemory@12:\r
-     xor eax,eax       // count = 0  \r
-     mov ecx, dword [esp + 12 ]  // ecx = Length         \r
-        cmp ecx,0         // if (Length==0) goto .zero\r
-        je 3f\r
-      \r
-     push edi// register that does not to be save eax,ecx,edx to \r
-     push ebx// the stack for protetion\r
-        \r
-     mov edi, dword [esp + (4 + 8)]        // edi = Destination   \r
-     mov edx, dword [esp + (8 + 8)]        // edx = Source      \r
-\r
-1:\r
-     mov bl,byte [edi + eax ]    //  if (src[count]!=des[count]) goto .pop_zero \r
-     cmp byte [edx + eax ],bl      \r
-     jne 2f       \r
-\r
-     inc eax //  count = count + 1\r
-     dec ecx //  Length = Length - 1\r
-     jnz 1b  //  if (Length!=0) goto .loop_1byte\r
-\r
-2:      \r
-     pop ebx // restore regiester \r
-     pop edi   \r
-3:       \r
-     ret 12  // return count\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            comparememory_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _RtlCompareMemory@12          // [4]  (no bug)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlCompareMemory@12:
+     xor eax,eax       // count = 0  
+     mov ecx, dword [esp + 12 ]  // ecx = Length         
+        cmp ecx,0         // if (Length==0) goto .zero
+        je 3f
+      
+     push edi// register that does not to be save eax,ecx,edx to 
+     push ebx// the stack for protetion
+        
+     mov edi, dword [esp + (4 + 8)]        // edi = Destination   
+     mov edx, dword [esp + (8 + 8)]        // edx = Source      
+
+1:
+     mov bl,byte [edi + eax ]    //  if (src[count]!=des[count]) goto .pop_zero 
+     cmp byte [edx + eax ],bl      
+     jne 2f       
+
+     inc eax //  count = count + 1
+     dec ecx //  Length = Length - 1
+     jnz 1b  //  if (Length!=0) goto .loop_1byte
+
+2:      
+     pop ebx // restore regiester 
+     pop edi   
+3:       
+     ret 12  // return count
index b125214..586bb07 100644 (file)
@@ -1,44 +1,44 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            comparememory_ulong_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _RtlCompareMemoryUlong@12          // [5]  (no bug)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlCompareMemoryUlong@12:\r
-     xor eax,eax\r
-     mov ecx, dword [esp + 8 ]   // ecx = Length      \r
-     shr ecx,2         // Length / sizeof(ULONG) \r
-        jz 1f   // if (Length==0) goto .zero \r
-        \r
-     push edi// register that does not to be save eax,ecx,edx to \r
-     push ebx// the stack for protetion\r
-         \r
-     mov edi, dword [esp + (4 + 8)]        // edx = Destination\r
-     mov eax, dword [esp + (12 + 8)]       // ebx = value       \r
-     mov ebx,ecx\r
-     cld\r
-     repe scasd\r
-\r
-     inc ecx\r
-     mov eax,ebx\r
-  \r
-     sub eax,ecx\r
-     shl eax,2\r
-       \r
-     pop ebx\r
-     pop edi\r
-\r
-1:\r
-     ret 12\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            comparememory_ulong_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _RtlCompareMemoryUlong@12          // [5]  (no bug)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlCompareMemoryUlong@12:
+     xor eax,eax
+     mov ecx, dword [esp + 8 ]   // ecx = Length      
+     shr ecx,2         // Length / sizeof(ULONG) 
+        jz 1f   // if (Length==0) goto .zero 
+        
+     push edi// register that does not to be save eax,ecx,edx to 
+     push ebx// the stack for protetion
+         
+     mov edi, dword [esp + (4 + 8)]        // edx = Destination
+     mov eax, dword [esp + (12 + 8)]       // ebx = value       
+     mov ebx,ecx
+     cld
+     repe scasd
+
+     inc ecx
+     mov eax,ebx
+  
+     sub eax,ecx
+     shl eax,2
+       
+     pop ebx
+     pop edi
+
+1:
+     ret 12
index 36219ed..ba4ea36 100644 (file)
@@ -1,50 +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
+/*
+ * 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
index 5ead28e..d288ccd 100644 (file)
@@ -1,61 +1,61 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS Run-Time Library\r
- * PURPOSE:           Debug Routines\r
- * FILE:              lib/rtl/i386/debug.S\r
- * PROGRAMER:         Alex Ionescu (alex@relsoft.net)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _DbgBreakPoint@0\r
-.globl  _DbgBreakPointWithStatus@4\r
-.globl  _DbgUserBreakPoint@0\r
-.globl  _DebugService@20\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_DbgBreakPoint@0:\r
-_DbgUserBreakPoint@0:\r
-    int 3\r
-    ret\r
\r
-_DbgBreakPointWithStatus@4:\r
-    mov eax, [esp+4]\r
-    int 3\r
-    ret 4\r
-\r
-_DebugService@20:\r
-\r
-    /* Setup the stack */\r
-    push ebp\r
-    mov ebp, esp\r
-\r
-    /* Save the registers */\r
-    push ecx\r
-    push ebx\r
-    push edi\r
-    push edi\r
-    push ebx\r
-\r
-    /* Call the Interrupt */\r
-    mov eax, [ebp+8]\r
-    mov ecx, [ebp+12]\r
-    mov edx, [ebp+16]\r
-    mov ebx, [ebp+20]\r
-    mov edi, [ebp+24]\r
-    int 0x2D\r
-    //int 3\r
-\r
-    /* Restore registers */\r
-    pop ebx\r
-    pop edi\r
-    pop edi\r
-    pop ebx\r
-\r
-    /* Return */\r
-    leave\r
-    ret 20\r
-\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS Run-Time Library
+ * PURPOSE:           Debug Routines
+ * FILE:              lib/rtl/i386/debug.S
+ * PROGRAMER:         Alex Ionescu (alex@relsoft.net)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _DbgBreakPoint@0
+.globl  _DbgBreakPointWithStatus@4
+.globl  _DbgUserBreakPoint@0
+.globl  _DebugService@20
+
+/* FUNCTIONS ***************************************************************/
+
+_DbgBreakPoint@0:
+_DbgUserBreakPoint@0:
+    int 3
+    ret
+_DbgBreakPointWithStatus@4:
+    mov eax, [esp+4]
+    int 3
+    ret 4
+
+_DebugService@20:
+
+    /* Setup the stack */
+    push ebp
+    mov ebp, esp
+
+    /* Save the registers */
+    push ecx
+    push ebx
+    push edi
+    push edi
+    push ebx
+
+    /* Call the Interrupt */
+    mov eax, [ebp+8]
+    mov ecx, [ebp+12]
+    mov edx, [ebp+16]
+    mov ebx, [ebp+20]
+    mov edi, [ebp+24]
+    int 0x2D
+    //int 3
+
+    /* Restore registers */
+    pop ebx
+    pop edi
+    pop edi
+    pop ebx
+
+    /* Return */
+    leave
+    ret 20
+
index 567a8c9..7216b81 100644 (file)
@@ -1,50 +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/fabs.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 _fabs\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_fabs:\r
-        push    ebp\r
-        mov     ebp,esp\r
-        fld     qword ptr [ebp+8]       // Load real from stack\r
-        fabs                            // Take the absolute value\r
-        pop     ebp\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/fabs.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 _fabs
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_fabs:
+        push    ebp
+        mov     ebp,esp
+        fld     qword ptr [ebp+8]       // Load real from stack
+        fabs                            // Take the absolute value
+        pop     ebp
+        ret
index 2f5b10a..eaaa9bf 100644 (file)
@@ -1,31 +1,31 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            fillmemory_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _RtlFillMemory@12          //[4]  (no bug)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlFillMemory@12:\r
-    mov ecx,dword [esp + 8 ]     // ecx = Length         \r
-       cmp ecx,0// if (Length==0) goto .zero \r
-       je  2f          \r
-\r
-    mov edx, dword [esp + 4]     // edx = Destination \r
-    mov eax, dword [esp + 12]    // eax = fill                         \r
-1:     \r
-    mov        byte [edx + ecx -1],al   // src[Length - 1] = fill\r
-    dec ecx  // Length = Length - 1\r
-    jnz 1b   // if (Length!=0) goto .loop\r
-2:             \r
-    ret 12   // return\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            fillmemory_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _RtlFillMemory@12          //[4]  (no bug)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlFillMemory@12:
+    mov ecx,dword [esp + 8 ]     // ecx = Length         
+       cmp ecx,0// if (Length==0) goto .zero 
+       je  2f          
+
+    mov edx, dword [esp + 4]     // edx = Destination 
+    mov eax, dword [esp + 12]    // eax = fill                         
+1:     
+    mov        byte [edx + ecx -1],al   // src[Length - 1] = fill
+    dec ecx  // Length = Length - 1
+    jnz 1b   // if (Length!=0) goto .loop
+2:             
+    ret 12   // return
index a4596a3..3889953 100644 (file)
@@ -1,31 +1,31 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            fillmemory_ulong_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _RtlFillMemoryUlong@12          // (no bug) (max optimze code)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlFillMemoryUlong@12:\r
-    mov ecx, dword [esp + 8 ]    // Length         \r
-    shr ecx,2// Length = Length / sizeof(ULONG) \r
-       jz 1f    // if (Length==0) goto .zero\r
-         \r
-    push edi\r
-    mov edi, dword [esp + (4 + 4)]         // Destination\r
-    mov eax, dword [esp + (12 + 4)]        // Fill       \r
-    cld        \r
-    rep stosd// while (Length>0) {Destination[Length-1]=Fill// Length = Length - 1}\r
-    pop edi\r
-1:\r
-    ret 12\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            fillmemory_ulong_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _RtlFillMemoryUlong@12          // (no bug) (max optimze code)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlFillMemoryUlong@12:
+    mov ecx, dword [esp + 8 ]    // Length         
+    shr ecx,2// Length = Length / sizeof(ULONG) 
+       jz 1f    // if (Length==0) goto .zero
+         
+    push edi
+    mov edi, dword [esp + (4 + 4)]         // Destination
+    mov eax, dword [esp + (12 + 4)]        // Fill       
+    cld        
+    rep stosd// while (Length>0) {Destination[Length-1]=Fill// Length = Length - 1}
+    pop edi
+1:
+    ret 12
index cf066b0..f3c9e0f 100644 (file)
@@ -1,58 +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
+/*
+ * 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
index c677602..beb2364 100644 (file)
@@ -1,74 +1,74 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/ftol.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 __ftol\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-/*\r
- * This routine is called by MSVC-generated code to convert from floating point\r
- * to integer representation. The floating point number to be converted is\r
- * on the top of the floating point stack.\r
- */\r
-__ftol:\r
-    /* Set up stack frame */\r
-    push ebp\r
-    mov ebp, esp\r
-    \r
-    /* Set "round towards zero" mode */\r
-    fstcw [ebp-2]\r
-    wait\r
-    mov ax, [ebp-2]\r
-    or ah, 0xC\r
-    mov [ebp-4], ax\r
-    fldcw [ebp-4]\r
-    \r
-    /* Do the conversion */\r
-    fistp qword ptr [ebp-12]\r
-    \r
-    /* Restore rounding mode */\r
-    fldcw [ebp-2]\r
-    \r
-    /* Return value */\r
-    mov eax, [ebp-12]\r
-    mov edx, [ebp-8]\r
-    \r
-    /* Remove stack frame and return*/\r
-    leave\r
-    ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/ftol.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 __ftol
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+/*
+ * This routine is called by MSVC-generated code to convert from floating point
+ * to integer representation. The floating point number to be converted is
+ * on the top of the floating point stack.
+ */
+__ftol:
+    /* Set up stack frame */
+    push ebp
+    mov ebp, esp
+    
+    /* Set "round towards zero" mode */
+    fstcw [ebp-2]
+    wait
+    mov ax, [ebp-2]
+    or ah, 0xC
+    mov [ebp-4], ax
+    fldcw [ebp-4]
+    
+    /* Do the conversion */
+    fistp qword ptr [ebp-12]
+    
+    /* Restore rounding mode */
+    fldcw [ebp-2]
+    
+    /* Return value */
+    mov eax, [ebp-12]
+    mov edx, [ebp-8]
+    
+    /* Remove stack frame and return*/
+    leave
+    ret
index f8e559f..05d6e80 100644 (file)
@@ -1,52 +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/log.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 _log\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_log:\r
-        push    ebp\r
-        mov     ebp,esp\r
-        fld     qword ptr [ebp+8]       // Load real from stack\r
-        fldln2                          // Load log base e of 2\r
-        fxch    st(1)                   // Exchange st, st(1)\r
-        fyl2x                           // Compute the natural log(x)\r
-        pop     ebp\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/log.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 _log
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_log:
+        push    ebp
+        mov     ebp,esp
+        fld     qword ptr [ebp+8]       // Load real from stack
+        fldln2                          // Load log base e of 2
+        fxch    st(1)                   // Exchange st, st(1)
+        fyl2x                           // Compute the natural log(x)
+        pop     ebp
+        ret
index 45f1349..05eb36b 100644 (file)
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/pow.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 _pow\r
\r
- /* DATA ********************************************************************/\r
-\r
-fzero:\r
-        .long   0                       // Floating point zero\r
-        .long   0                       // Floating point zero\r
-\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_pow:\r
-        push    ebp\r
-        mov     ebp,esp\r
-        sub     esp,12                  // Allocate temporary space\r
-        push    edi                     // Save register edi\r
-        push    eax                     // Save register eax\r
-        mov     dword ptr [ebp-12],0    // Set negation flag to zero\r
-        fld     qword ptr [ebp+16]      // Load real from stack\r
-        fld     qword ptr [ebp+8]       // Load real from stack\r
-        mov     edi,offset flat:fzero   // Point to real zero\r
-        fcom    qword ptr [edi]         // Compare x with zero\r
-        fstsw   ax                      // Get the FPU status word\r
-        mov     al,ah                   // Move condition flags to AL\r
-        lahf                            // Load Flags into AH\r
-        and     al,    0b01000101       // Isolate  C0, C2 and C3\r
-        and     ah,    0b10111010       // Turn off CF, PF and ZF\r
-        or      ah,al                   // Set new  CF, PF and ZF\r
-        sahf                            // Store AH into Flags\r
-        jb      __fpow1                 // Re-direct if x < 0\r
-        ja      __fpow3                 // Re-direct if x > 0\r
-        fxch                            // Swap st, st(1)\r
-        fcom    qword ptr [edi]         // Compare y with zero\r
-        fxch                            // Restore x as top of stack\r
-        fstsw   ax                      // Get the FPU status word\r
-        mov     al,ah                   // Move condition flags to AL\r
-        lahf                            // Load Flags into AH\r
-        and     al,    0b01000101       // Isolate  C0, C2 and C3\r
-        and     ah,    0b10111010       // Turn off CF, PF and ZF\r
-        or      ah,al                   // Set new  CF, PF and ZF\r
-        sahf                            // Store AH into Flags\r
-        ja      __fpow3                 // Re-direct if y > 0\r
-        fstp    st(1)                   // Set new stack top and pop\r
-        mov     eax,1                   // Set domain error (EDOM)\r
-        jmp     __fpow5                 // End of case\r
-__fpow1:        fxch                            // Put y on top of stack\r
-        fld    st                       // Duplicate y as st(1)\r
-        frndint                         // Round to integer\r
-        fxch                            // Put y on top of stack\r
-        fcomp                           // y = int(y) ?\r
-        fstsw   ax                      // Get the FPU status word\r
-        mov     al,ah                   // Move condition flags to AL\r
-        lahf                            // Load Flags into AH\r
-        and     al,    0b01000101       // Isolate  C0, C2 and C3\r
-        and     ah,    0b10111010       // Turn off CF, PF and ZF\r
-        or      ah,al                   // Set new  CF, PF and ZF\r
-        sahf                            // Store AH into Flags\r
-        je      __fpow2                 // Proceed if y = int(y)\r
-        fstp    st(1)                   // Set new stack top and pop\r
-        fldz                            // Set result to zero\r
-        fstp    st(1)                   // Set new stack top and pop\r
-        mov     eax,1                   // Set domain error (EDOM)\r
-        jmp     __fpow5                 // End of case\r
-__fpow2:        fist    dword ptr [ebp-12]      // Store y as integer\r
-        and     dword ptr [ebp-12],1    // Set bit if y is odd\r
-        fxch                            // Put x on top of stack\r
-        fabs                            // x = |x|\r
-__fpow3:        fldln2                          // Load log base e of 2\r
-        fxch    st(1)                   // Exchange st, st(1)\r
-        fyl2x                           // Compute the natural log(x)\r
-        fmulp                           // Compute y * ln(x)\r
-        fldl2e                          // Load log base 2(e)\r
-        fmulp   st(1),st                // Multiply x * log base 2(e)\r
-        fst     st(1)                   // Push result\r
-        frndint                         // Round to integer\r
-        fsub    st(1),st                // Subtract\r
-        fxch                            // Exchange st, st(1)\r
-        f2xm1                           // Compute 2 to the (x - 1)\r
-        fld1                            // Load real number 1\r
-        faddp                           // 2 to the x\r
-        fscale                          // Scale by power of 2\r
-        fstp    st(1)                   // Set new stack top and pop\r
-        test    dword ptr [ebp-12],1    // Negation required ?\r
-        jz      __fpow4                 // No, re-direct\r
-        fchs                            // Negate the result\r
-__fpow4:        fstp    qword ptr [ebp-8]       // Save (double)pow(x, y)\r
-        fld     qword ptr [ebp-8]       // Load (double)pow(x, y)\r
-        fxam                            // Examine st\r
-        fstsw   ax                      // Get the FPU status word\r
-        cmp     ah,5                    // Infinity ?\r
-        jne     __fpow6                 // No, end of case\r
-        mov     eax,2                   // Set range error (ERANGE)\r
-                                        // Get errno pointer offset\r
-__fpow5:        int     3\r
-        mov     edi,0                   // TODO: offset flat:__crt_errno\r
-        mov     edi,[edi]               // Get C errno variable pointer\r
-        mov     dword ptr [edi],eax     // Set errno\r
-__fpow6:        pop     eax                     // Restore register eax\r
-        pop     edi                     // Restore register edi\r
-        mov     esp,ebp                 // Deallocate temporary space\r
-        pop     ebp\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/pow.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 _pow
+ /* DATA ********************************************************************/
+
+fzero:
+        .long   0                       // Floating point zero
+        .long   0                       // Floating point zero
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_pow:
+        push    ebp
+        mov     ebp,esp
+        sub     esp,12                  // Allocate temporary space
+        push    edi                     // Save register edi
+        push    eax                     // Save register eax
+        mov     dword ptr [ebp-12],0    // Set negation flag to zero
+        fld     qword ptr [ebp+16]      // Load real from stack
+        fld     qword ptr [ebp+8]       // Load real from stack
+        mov     edi,offset flat:fzero   // Point to real zero
+        fcom    qword ptr [edi]         // Compare x with zero
+        fstsw   ax                      // Get the FPU status word
+        mov     al,ah                   // Move condition flags to AL
+        lahf                            // Load Flags into AH
+        and     al,    0b01000101       // Isolate  C0, C2 and C3
+        and     ah,    0b10111010       // Turn off CF, PF and ZF
+        or      ah,al                   // Set new  CF, PF and ZF
+        sahf                            // Store AH into Flags
+        jb      __fpow1                 // Re-direct if x < 0
+        ja      __fpow3                 // Re-direct if x > 0
+        fxch                            // Swap st, st(1)
+        fcom    qword ptr [edi]         // Compare y with zero
+        fxch                            // Restore x as top of stack
+        fstsw   ax                      // Get the FPU status word
+        mov     al,ah                   // Move condition flags to AL
+        lahf                            // Load Flags into AH
+        and     al,    0b01000101       // Isolate  C0, C2 and C3
+        and     ah,    0b10111010       // Turn off CF, PF and ZF
+        or      ah,al                   // Set new  CF, PF and ZF
+        sahf                            // Store AH into Flags
+        ja      __fpow3                 // Re-direct if y > 0
+        fstp    st(1)                   // Set new stack top and pop
+        mov     eax,1                   // Set domain error (EDOM)
+        jmp     __fpow5                 // End of case
+__fpow1:        fxch                            // Put y on top of stack
+        fld    st                       // Duplicate y as st(1)
+        frndint                         // Round to integer
+        fxch                            // Put y on top of stack
+        fcomp                           // y = int(y) ?
+        fstsw   ax                      // Get the FPU status word
+        mov     al,ah                   // Move condition flags to AL
+        lahf                            // Load Flags into AH
+        and     al,    0b01000101       // Isolate  C0, C2 and C3
+        and     ah,    0b10111010       // Turn off CF, PF and ZF
+        or      ah,al                   // Set new  CF, PF and ZF
+        sahf                            // Store AH into Flags
+        je      __fpow2                 // Proceed if y = int(y)
+        fstp    st(1)                   // Set new stack top and pop
+        fldz                            // Set result to zero
+        fstp    st(1)                   // Set new stack top and pop
+        mov     eax,1                   // Set domain error (EDOM)
+        jmp     __fpow5                 // End of case
+__fpow2:        fist    dword ptr [ebp-12]      // Store y as integer
+        and     dword ptr [ebp-12],1    // Set bit if y is odd
+        fxch                            // Put x on top of stack
+        fabs                            // x = |x|
+__fpow3:        fldln2                          // Load log base e of 2
+        fxch    st(1)                   // Exchange st, st(1)
+        fyl2x                           // Compute the natural log(x)
+        fmulp                           // Compute y * ln(x)
+        fldl2e                          // Load log base 2(e)
+        fmulp   st(1),st                // Multiply x * log base 2(e)
+        fst     st(1)                   // Push result
+        frndint                         // Round to integer
+        fsub    st(1),st                // Subtract
+        fxch                            // Exchange st, st(1)
+        f2xm1                           // Compute 2 to the (x - 1)
+        fld1                            // Load real number 1
+        faddp                           // 2 to the x
+        fscale                          // Scale by power of 2
+        fstp    st(1)                   // Set new stack top and pop
+        test    dword ptr [ebp-12],1    // Negation required ?
+        jz      __fpow4                 // No, re-direct
+        fchs                            // Negate the result
+__fpow4:        fstp    qword ptr [ebp-8]       // Save (double)pow(x, y)
+        fld     qword ptr [ebp-8]       // Load (double)pow(x, y)
+        fxam                            // Examine st
+        fstsw   ax                      // Get the FPU status word
+        cmp     ah,5                    // Infinity ?
+        jne     __fpow6                 // No, end of case
+        mov     eax,2                   // Set range error (ERANGE)
+                                        // Get errno pointer offset
+__fpow5:        int     3
+        mov     edi,0                   // TODO: offset flat:__crt_errno
+        mov     edi,[edi]               // Get C errno variable pointer
+        mov     dword ptr [edi],eax     // Set errno
+__fpow6:        pop     eax                     // Restore register eax
+        pop     edi                     // Restore register edi
+        mov     esp,ebp                 // Deallocate temporary space
+        pop     ebp
+        ret
index f7b8832..bd210db 100644 (file)
@@ -1,30 +1,30 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            prefetchmemory_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  @RtlPrefetchMemoryNonTemporal@8\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-@RtlPrefetchMemoryNonTemporal@8:\r
-       ret         /* Overwritten by ntoskrnl/ke/i386/kernel.c if SSE is supported (see Ki386SetProcessorFeatures() ) */\r
-\r
-       mov eax, [_Ke386CacheAlignment]    // Get cache line size\r
-\r
-       // This is fastcall, so ecx = address, edx = size\r
-fetch_next_line:\r
-       prefetchnta byte ptr [ecx]  // prefechnta(address)\r
-       add ecx, eax                // address = address + cache_line_size\r
-       sub edx, eax                // count = count - cache_line_size\r
-       ja fetch_next_line          //     goto fetch_next_line\r
-       ret\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            prefetchmemory_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  @RtlPrefetchMemoryNonTemporal@8
+
+/* FUNCTIONS ***************************************************************/
+
+@RtlPrefetchMemoryNonTemporal@8:
+       ret         /* Overwritten by ntoskrnl/ke/i386/kernel.c if SSE is supported (see Ki386SetProcessorFeatures() ) */
+
+       mov eax, [_Ke386CacheAlignment]    // Get cache line size
+
+       // This is fastcall, so ecx = address, edx = size
+fetch_next_line:
+       prefetchnta byte ptr [ecx]  // prefechnta(address)
+       add ecx, eax                // address = address + cache_line_size
+       sub edx, eax                // count = count - cache_line_size
+       ja fetch_next_line          //     goto fetch_next_line
+       ret
index cc07531..3021e62 100644 (file)
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:  ranom.asm\r
- * PURPOSE:         Random number generator functions\r
- * PROGRAMMER:      Magnus Olsen (magnusolsen@greatlord.com)\r
- * UPDATE HISTORY:\r
- *        Created 27/07/2005\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl _RtlRandom@4        // [1] (no bug) (max optimze code)\r
-.globl _RtlUniform@4   // [2] (no bug) (max optimze code)\r
-.globl _SavedValue      // [3] (no bug) (max optimze code)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlRandom@4:   \r
-    // load pointer    \r
-    mov ecx,[esp+4]    \r
-    mov eax,[ecx]\r
-\r
-    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  \r
-    lea        edx,[eax + eax * 8]\r
-\r
-    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   \r
-    neg        eax\r
-\r
-    cmp        eax,-1\r
-       je      .RtlRandom_Rand1\r
-       cmp     eax, 2147483646\r
-       je      .RtlRandom_Rand1\r
-\r
-       cmp     eax, 2147483647\r
-       je      .RtlRandom_Rand2\r
-    \r
-    test eax,eax\r
-    jns .RtlRandom_Rand3\r
-\r
-    // else {    \r
-       mov     edx,eax\r
-       and     edx,1\r
-       add     eax,edx\r
-    and        eax,2147483647     \r
-    mov [ecx],eax             \r
-    jmp .RtlRandom_Seed      \r
-    \r
-.RtlRandom_Rand1:\r
-    // if (Result == 0xffffffff || Result == 0x7ffffffe)\r
-    add eax, 2\r
-    and eax, 2147483647    \r
-    mov [ecx],eax             \r
-    jmp .RtlRandom_Seed      \r
-\r
-.RtlRandom_Rand2:\r
-    // else if (Result == 0x7fffffff)\r
-    xor eax,eax    \r
-    mov [ecx],eax             \r
-    jmp .RtlRandom_Seed\r
-\r
-.RtlRandom_Rand3:    \r
-    // else if ((Result & 0x80000000) == 0)\r
-    mov  edx,eax\r
-    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that\r
-    and edx,1\r
-    add eax,edx\r
-    mov [ecx],eax             \r
-        \r
-.RtlRandom_Seed:   \r
-    mov eax,[ecx]    \r
-\r
-    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  \r
-    lea        edx,[eax + eax * 8]\r
-\r
-    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   09-18\r
-    neg        eax\r
-\r
-    cmp        eax,-1\r
-       je      .RtlRandom_Seed1\r
-       cmp     eax, 2147483646\r
-       je      .RtlRandom_Seed1\r
-\r
-       cmp     eax, 2147483647\r
-       je      .RtlRandom_Seed2\r
-    \r
-    test eax,eax\r
-    jns .RtlRandom_Seed3\r
-\r
-    // else {    \r
-    mov        edx,eax\r
-       and     edx,1\r
-       add     eax,edx\r
-    and        eax,2147483647     \r
-\r
-    // end \r
-    mov edx,[ecx]\r
-    mov [ecx],eax \r
-    \r
-    mov ecx,eax // pos\r
-    and ecx, 0x7f // pos = seed & 0x7f    \r
-    mov eax,ecx//       \r
-    mov eax, [_SavedValue + ecx*4]\r
-    mov [_SavedValue + ecx*4], edx       \r
-    ret 4\r
-         \r
-.RtlRandom_Seed1:\r
-    // if (Result == 0xffffffff || Result == 0x7ffffffe)\r
-    add eax, 2\r
-    and eax, 2147483647    \r
-\r
-    // end \r
-    mov edx,[ecx]\r
-    mov [ecx],eax \r
-    \r
-    mov ecx,eax // pos\r
-    and ecx, 0x7f // pos = seed & 0x7f    \r
-    mov eax,ecx//       \r
-    mov eax, [_SavedValue + ecx*4]    \r
-    mov [_SavedValue + ecx*4], edx       \r
-    ret 4\r
-\r
-.RtlRandom_Seed2:\r
-    // else if (Result == 0x7fffffff)\r
-    xor eax,eax    \r
-\r
-    // end \r
-    mov edx,[ecx]\r
-    mov [ecx],eax \r
-    \r
-    mov ecx,eax // pos\r
-    and ecx, 0x7f // pos = seed & 0x7f    \r
-    mov eax,ecx//       \r
-    mov eax, [_SavedValue + ecx*4]    \r
-    mov [_SavedValue + ecx*4], edx       \r
-    ret 4\r
-      \r
-.RtlRandom_Seed3:    \r
-    // else if ((Result & 0x80000000) == 0)\r
-    mov  edx,eax\r
-    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that\r
-    and edx,1\r
-    add eax,edx               \r
-    \r
-    // end \r
-    mov edx,[ecx]\r
-    mov [ecx],eax \r
-    \r
-    mov ecx,eax // pos\r
-    and ecx, 0x7f // pos = seed & 0x7f    \r
-    mov eax,ecx//       \r
-    mov eax, [_SavedValue + ecx*4]    \r
-    mov [_SavedValue + ecx*4], edx       \r
-    ret 4\r
-\r
-// prototype: ULONG STDCALL RtlUniform (PULONG Seed)\r
-_RtlUniform@4:\r
-    // load pointer\r
-    mov ecx,[esp+4]\r
-    mov eax,[ecx]\r
-    \r
-    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  \r
-    lea        edx,[eax + eax * 8]\r
-\r
-    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   09-18\r
-    neg        eax\r
-\r
-    cmp        eax,-1\r
-       je      .RtlUniform_jump1\r
-       cmp     eax, 2147483646\r
-       je      .RtlUniform_jump1\r
-\r
-       cmp     eax, 2147483647\r
-       je      .RtlUniform_jump2\r
-    \r
-    test eax,eax\r
-    jns .RtlUniform_jump3\r
-\r
-    // else {    \r
-       mov     edx,eax\r
-       and     edx,1\r
-       add     eax,edx\r
-    and        eax,2147483647     \r
-    mov [ecx],eax             \r
-    ret 4      \r
-   \r
-.RtlUniform_jump1:\r
-    // if (Result == 0xffffffff || Result == 0x7ffffffe)\r
-    add eax, 2\r
-    and eax, 2147483647    \r
-    mov [ecx],eax             \r
-    ret 4      \r
-\r
-.RtlUniform_jump2:\r
-    // else if (Result == 0x7fffffff)\r
-    xor eax,eax    \r
-    mov [ecx],eax             \r
-    ret 4\r
-\r
-.RtlUniform_jump3:    \r
-    // else if ((Result & 0x80000000) == 0)\r
-    mov  edx,eax\r
-    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that\r
-    and edx,1\r
-    add eax,edx\r
-    mov [ecx],eax             \r
-    ret 4\r
-\r
-.data\r
-// SavedValue[128] \r
-_SavedValue:   \r
-    .long 0x4c8bc0aa, 0x4c022957, 0x2232827a, 0x2f1e7626\r
-       .long 0x7f8bdafb, 0x5c37d02a, 0x0ab48f72, 0x2f0c4ffa\r
-       .long 0x290e1954, 0x6b635f23, 0x5d3885c0, 0x74b49ff8\r
-       .long 0x5155fa54, 0x6214ad3f, 0x111e9c29, 0x242a3a09\r
-       .long 0x75932ae1, 0x40ac432e, 0x54f7ba7a, 0x585ccbd5\r
-       .long 0x6df5c727, 0x0374dad1, 0x7112b3f1, 0x735fc311\r
-       .long 0x404331a9, 0x74d97781, 0x64495118, 0x323e04be\r
-       .long 0x5974b425, 0x4862e393, 0x62389c1d, 0x28a68b82\r
-       .long 0x0f95da37, 0x7a50bbc6, 0x09b0091c, 0x22cdb7b4\r
-       .long 0x4faaed26, 0x66417ccd, 0x189e4bfa, 0x1ce4e8dd\r
-       .long 0x5274c742, 0x3bdcf4dc, 0x2d94e907, 0x32eac016\r
-       .long 0x26d33ca3, 0x60415a8a, 0x31f57880, 0x68c8aa52\r
-       .long 0x23eb16da, 0x6204f4a1, 0x373927c1, 0x0d24eb7c\r
-       .long 0x06dd7379, 0x2b3be507, 0x0f9c55b1, 0x2c7925eb\r
-       .long 0x36d67c9a, 0x42f831d9, 0x5e3961cb, 0x65d637a8\r
-       .long 0x24bb3820, 0x4d08e33d, 0x2188754f, 0x147e409e\r
-       .long 0x6a9620a0, 0x62e26657, 0x7bd8ce81, 0x11da0abb\r
-       .long 0x5f9e7b50, 0x23e444b6, 0x25920c78, 0x5fc894f0\r
-       .long 0x5e338cbb, 0x404237fd, 0x1d60f80f, 0x320a1743\r
-       .long 0x76013d2b, 0x070294ee, 0x695e243b, 0x56b177fd\r
-       .long 0x752492e1, 0x6decd52f, 0x125f5219, 0x139d2e78\r
-       .long 0x1898d11e, 0x2f7ee785, 0x4db405d8, 0x1a028a35\r
-       .long 0x63f6f323, 0x1f6d0078, 0x307cfd67, 0x3f32a78a\r
-       .long 0x6980796c, 0x462b3d83, 0x34b639f2, 0x53fce379\r
-       .long 0x74ba50f4, 0x1abc2c4b, 0x5eeaeb8d, 0x335a7a0d\r
-       .long 0x3973dd20, 0x0462d66b, 0x159813ff, 0x1e4643fd\r
-       .long 0x06bc5c62, 0x3115e3fc, 0x09101613, 0x47af2515\r
-       .long 0x4f11ec54, 0x78b99911, 0x3db8dd44, 0x1ec10b9b\r
-       .long 0x5b5506ca, 0x773ce092, 0x567be81a, 0x5475b975\r
-       .long 0x7a2cde1a, 0x494536f5, 0x34737bb4, 0x76d9750b\r
-       .long 0x2a1f6232, 0x2e49644d, 0x7dddcbe7, 0x500cebdb\r
-       .long 0x619dab9e, 0x48c626fe, 0x1cda3193, 0x52dabe9d\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:  ranom.asm
+ * PURPOSE:         Random number generator functions
+ * PROGRAMMER:      Magnus Olsen (magnusolsen@greatlord.com)
+ * UPDATE HISTORY:
+ *        Created 27/07/2005
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl _RtlRandom@4        // [1] (no bug) (max optimze code)
+.globl _RtlUniform@4   // [2] (no bug) (max optimze code)
+.globl _SavedValue      // [3] (no bug) (max optimze code)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlRandom@4:   
+    // load pointer    
+    mov ecx,[esp+4]    
+    mov eax,[ecx]
+
+    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  
+    lea        edx,[eax + eax * 8]
+
+    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   
+    neg        eax
+
+    cmp        eax,-1
+       je      .RtlRandom_Rand1
+       cmp     eax, 2147483646
+       je      .RtlRandom_Rand1
+
+       cmp     eax, 2147483647
+       je      .RtlRandom_Rand2
+    
+    test eax,eax
+    jns .RtlRandom_Rand3
+
+    // else {    
+       mov     edx,eax
+       and     edx,1
+       add     eax,edx
+    and        eax,2147483647     
+    mov [ecx],eax             
+    jmp .RtlRandom_Seed      
+    
+.RtlRandom_Rand1:
+    // if (Result == 0xffffffff || Result == 0x7ffffffe)
+    add eax, 2
+    and eax, 2147483647    
+    mov [ecx],eax             
+    jmp .RtlRandom_Seed      
+
+.RtlRandom_Rand2:
+    // else if (Result == 0x7fffffff)
+    xor eax,eax    
+    mov [ecx],eax             
+    jmp .RtlRandom_Seed
+
+.RtlRandom_Rand3:    
+    // else if ((Result & 0x80000000) == 0)
+    mov  edx,eax
+    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that
+    and edx,1
+    add eax,edx
+    mov [ecx],eax             
+        
+.RtlRandom_Seed:   
+    mov eax,[ecx]    
+
+    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  
+    lea        edx,[eax + eax * 8]
+
+    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   09-18
+    neg        eax
+
+    cmp        eax,-1
+       je      .RtlRandom_Seed1
+       cmp     eax, 2147483646
+       je      .RtlRandom_Seed1
+
+       cmp     eax, 2147483647
+       je      .RtlRandom_Seed2
+    
+    test eax,eax
+    jns .RtlRandom_Seed3
+
+    // else {    
+    mov        edx,eax
+       and     edx,1
+       add     eax,edx
+    and        eax,2147483647     
+
+    // end 
+    mov edx,[ecx]
+    mov [ecx],eax 
+    
+    mov ecx,eax // pos
+    and ecx, 0x7f // pos = seed & 0x7f    
+    mov eax,ecx//       
+    mov eax, [_SavedValue + ecx*4]
+    mov [_SavedValue + ecx*4], edx       
+    ret 4
+         
+.RtlRandom_Seed1:
+    // if (Result == 0xffffffff || Result == 0x7ffffffe)
+    add eax, 2
+    and eax, 2147483647    
+
+    // end 
+    mov edx,[ecx]
+    mov [ecx],eax 
+    
+    mov ecx,eax // pos
+    and ecx, 0x7f // pos = seed & 0x7f    
+    mov eax,ecx//       
+    mov eax, [_SavedValue + ecx*4]    
+    mov [_SavedValue + ecx*4], edx       
+    ret 4
+
+.RtlRandom_Seed2:
+    // else if (Result == 0x7fffffff)
+    xor eax,eax    
+
+    // end 
+    mov edx,[ecx]
+    mov [ecx],eax 
+    
+    mov ecx,eax // pos
+    and ecx, 0x7f // pos = seed & 0x7f    
+    mov eax,ecx//       
+    mov eax, [_SavedValue + ecx*4]    
+    mov [_SavedValue + ecx*4], edx       
+    ret 4
+      
+.RtlRandom_Seed3:    
+    // else if ((Result & 0x80000000) == 0)
+    mov  edx,eax
+    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that
+    and edx,1
+    add eax,edx               
+    
+    // end 
+    mov edx,[ecx]
+    mov [ecx],eax 
+    
+    mov ecx,eax // pos
+    and ecx, 0x7f // pos = seed & 0x7f    
+    mov eax,ecx//       
+    mov eax, [_SavedValue + ecx*4]    
+    mov [_SavedValue + ecx*4], edx       
+    ret 4
+
+// prototype: ULONG STDCALL RtlUniform (PULONG Seed)
+_RtlUniform@4:
+    // load pointer
+    mov ecx,[esp+4]
+    mov eax,[ecx]
+    
+    // Result = *Seed * 0xffffffed + 0x7fffffc3 // take now 3 cycles  
+    lea        edx,[eax + eax * 8]
+
+    lea eax,[eax + edx * 2 + 2147483709 ]  //  + 2147483709   09-18
+    neg        eax
+
+    cmp        eax,-1
+       je      .RtlUniform_jump1
+       cmp     eax, 2147483646
+       je      .RtlUniform_jump1
+
+       cmp     eax, 2147483647
+       je      .RtlUniform_jump2
+    
+    test eax,eax
+    jns .RtlUniform_jump3
+
+    // else {    
+       mov     edx,eax
+       and     edx,1
+       add     eax,edx
+    and        eax,2147483647     
+    mov [ecx],eax             
+    ret 4      
+   
+.RtlUniform_jump1:
+    // if (Result == 0xffffffff || Result == 0x7ffffffe)
+    add eax, 2
+    and eax, 2147483647    
+    mov [ecx],eax             
+    ret 4      
+
+.RtlUniform_jump2:
+    // else if (Result == 0x7fffffff)
+    xor eax,eax    
+    mov [ecx],eax             
+    ret 4
+
+.RtlUniform_jump3:    
+    // else if ((Result & 0x80000000) == 0)
+    mov  edx,eax
+    xor edx,-1  // not edx  lock all clock until it finsish, but xor does not do that
+    and edx,1
+    add eax,edx
+    mov [ecx],eax             
+    ret 4
+
+.data
+// SavedValue[128] 
+_SavedValue:   
+    .long 0x4c8bc0aa, 0x4c022957, 0x2232827a, 0x2f1e7626
+       .long 0x7f8bdafb, 0x5c37d02a, 0x0ab48f72, 0x2f0c4ffa
+       .long 0x290e1954, 0x6b635f23, 0x5d3885c0, 0x74b49ff8
+       .long 0x5155fa54, 0x6214ad3f, 0x111e9c29, 0x242a3a09
+       .long 0x75932ae1, 0x40ac432e, 0x54f7ba7a, 0x585ccbd5
+       .long 0x6df5c727, 0x0374dad1, 0x7112b3f1, 0x735fc311
+       .long 0x404331a9, 0x74d97781, 0x64495118, 0x323e04be
+       .long 0x5974b425, 0x4862e393, 0x62389c1d, 0x28a68b82
+       .long 0x0f95da37, 0x7a50bbc6, 0x09b0091c, 0x22cdb7b4
+       .long 0x4faaed26, 0x66417ccd, 0x189e4bfa, 0x1ce4e8dd
+       .long 0x5274c742, 0x3bdcf4dc, 0x2d94e907, 0x32eac016
+       .long 0x26d33ca3, 0x60415a8a, 0x31f57880, 0x68c8aa52
+       .long 0x23eb16da, 0x6204f4a1, 0x373927c1, 0x0d24eb7c
+       .long 0x06dd7379, 0x2b3be507, 0x0f9c55b1, 0x2c7925eb
+       .long 0x36d67c9a, 0x42f831d9, 0x5e3961cb, 0x65d637a8
+       .long 0x24bb3820, 0x4d08e33d, 0x2188754f, 0x147e409e
+       .long 0x6a9620a0, 0x62e26657, 0x7bd8ce81, 0x11da0abb
+       .long 0x5f9e7b50, 0x23e444b6, 0x25920c78, 0x5fc894f0
+       .long 0x5e338cbb, 0x404237fd, 0x1d60f80f, 0x320a1743
+       .long 0x76013d2b, 0x070294ee, 0x695e243b, 0x56b177fd
+       .long 0x752492e1, 0x6decd52f, 0x125f5219, 0x139d2e78
+       .long 0x1898d11e, 0x2f7ee785, 0x4db405d8, 0x1a028a35
+       .long 0x63f6f323, 0x1f6d0078, 0x307cfd67, 0x3f32a78a
+       .long 0x6980796c, 0x462b3d83, 0x34b639f2, 0x53fce379
+       .long 0x74ba50f4, 0x1abc2c4b, 0x5eeaeb8d, 0x335a7a0d
+       .long 0x3973dd20, 0x0462d66b, 0x159813ff, 0x1e4643fd
+       .long 0x06bc5c62, 0x3115e3fc, 0x09101613, 0x47af2515
+       .long 0x4f11ec54, 0x78b99911, 0x3db8dd44, 0x1ec10b9b
+       .long 0x5b5506ca, 0x773ce092, 0x567be81a, 0x5475b975
+       .long 0x7a2cde1a, 0x494536f5, 0x34737bb4, 0x76d9750b
+       .long 0x2a1f6232, 0x2e49644d, 0x7dddcbe7, 0x500cebdb
+       .long 0x619dab9e, 0x48c626fe, 0x1cda3193, 0x52dabe9d
index ea07179..3051e25 100644 (file)
@@ -1,50 +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
+/*
+ * 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
index 1758008..a97b699 100644 (file)
@@ -1,50 +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/sqrt.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 _sqrt\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_sqrt:\r
-        push    ebp\r
-        mov     ebp,esp\r
-        fld     qword ptr [ebp+8]       // Load real from stack\r
-        fsqrt                           // Take the square root\r
-        pop     ebp\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/sqrt.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 _sqrt
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_sqrt:
+        push    ebp
+        mov     ebp,esp
+        fld     qword ptr [ebp+8]       // Load real from stack
+        fsqrt                           // Take the square root
+        pop     ebp
+        ret
index 9a034f4..5d6ed98 100644 (file)
@@ -1,53 +1,53 @@
-/*\r
- * COPYRIGHT:         See COPYING in the top level directory\r
- * PROJECT:           ReactOS kernel\r
- * PURPOSE:           Run-Time Library\r
- * FILE:              lib/rtl/i386/tan.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 _tan\r
\r
-.intel_syntax noprefix\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_tan:\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
-        fptan                           // Take the tangent\r
-        fstp    dword ptr [ebp-4]       // Throw away the constant 1\r
-        mov     esp,ebp                 // Deallocate temporary space\r
-        pop     ebp\r
-        ret\r
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Run-Time Library
+ * FILE:              lib/rtl/i386/tan.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 _tan
+.intel_syntax noprefix
+
+/* FUNCTIONS ***************************************************************/
+
+_tan:
+        push    ebp
+        mov     ebp,esp
+        sub     esp,4                   // Allocate temporary space
+        fld     qword ptr [ebp+8]       // Load real from stack
+        fptan                           // Take the tangent
+        fstp    dword ptr [ebp-4]       // Throw away the constant 1
+        mov     esp,ebp                 // Deallocate temporary space
+        pop     ebp
+        ret
index 2ebd9e1..79ef777 100644 (file)
@@ -1,61 +1,61 @@
-/* \r
- * COPYRIGHT:       See COPYING in the top level directory\r
- * PROJECT:         ReactOS kernel\r
- * FILE:            zeromemory_asm.S\r
- * PURPOSE:         Memory functions\r
- * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)\r
- *                  Alex Ionescu (alex@relsoft.net)\r
- *                  Magnus Olsen (magnusolsen@greatlord.com)\r
- */\r
-\r
-.intel_syntax noprefix\r
-\r
-/* GLOBALS ****************************************************************/\r
-\r
-.globl  _RtlZeroMemory@8          // (no bug) (max optimze code)\r
-\r
-/* FUNCTIONS ***************************************************************/\r
-\r
-_RtlZeroMemory@8:     \r
-    mov ecx,dword [esp + 8 ]     // Length     \r
-    cmp ecx,0// if (Length==0) goto .zero  \r
-       je 3f           \r
-\r
-    pushad   // Save all register on the stack      \r
-    mov edi, dword [esp + (4 + 32)]        // Destination \r
-    xor eax,eax        // ZeroFillByte = 0\r
-\r
-// code for take four byte each time it loop\r
-    mov ebx,ecx        // temp_Length = Length    \r
-    shr ecx,2// Length = Length / sizeof(ULONG)      \r
-    jz 1f    // if (Length==0) goto .1byte\r
-       \r
-    shl ecx,2// Length = Length * sizeof(ULONG)  \r
-    sub ebx,ecx        // temp_Length = temp_Length - Length// \r
-    jz 2f    // if (temp_Length==0) goto .4byte\r
-\r
-// move 4byte and 1byte\r
-    shr ecx,2// Length = Length / sizeof(ULONG)      \r
-    cld      // clear d flag \r
-    rep stosd// while (Length!=0) { (ULONG *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }  \r
-    mov ecx,ebx        // Length = temp_Length \r
-    rep stosb// while (Length!=0) { (UCHAR *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }  \r
-    popad    // restore register \r
-    ret 8    // return  \r
-     \r
-// move 1byte  \r
-1: \r
-    mov ecx,dword [esp + (12 +32) ]        // Length       \r
-    cld      // clear d flag \r
-    rep stosb// while (Length!=0) { (UCHAR *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }\r
-    popad    // restore register\r
-    ret 8    // return\r
-\r
-// move 4bytes     \r
-2:\r
-    shr ecx,2// Length = Length / sizeof(ULONG)      \r
-    cld      // clear d flag \r
-    rep stosd// while (Length!=0) { (ULONG *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 } \r
-    popad    // restore register \r
-3:\r
-    ret 8    // return\r
+/* 
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS kernel
+ * FILE:            zeromemory_asm.S
+ * PURPOSE:         Memory functions
+ * PROGRAMMERS:     Patrick Baggett (baggett.patrick@gmail.com)
+ *                  Alex Ionescu (alex@relsoft.net)
+ *                  Magnus Olsen (magnusolsen@greatlord.com)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS ****************************************************************/
+
+.globl  _RtlZeroMemory@8          // (no bug) (max optimze code)
+
+/* FUNCTIONS ***************************************************************/
+
+_RtlZeroMemory@8:     
+    mov ecx,dword [esp + 8 ]     // Length     
+    cmp ecx,0// if (Length==0) goto .zero  
+       je 3f           
+
+    pushad   // Save all register on the stack      
+    mov edi, dword [esp + (4 + 32)]        // Destination 
+    xor eax,eax        // ZeroFillByte = 0
+
+// code for take four byte each time it loop
+    mov ebx,ecx        // temp_Length = Length    
+    shr ecx,2// Length = Length / sizeof(ULONG)      
+    jz 1f    // if (Length==0) goto .1byte
+       
+    shl ecx,2// Length = Length * sizeof(ULONG)  
+    sub ebx,ecx        // temp_Length = temp_Length - Length// 
+    jz 2f    // if (temp_Length==0) goto .4byte
+
+// move 4byte and 1byte
+    shr ecx,2// Length = Length / sizeof(ULONG)      
+    cld      // clear d flag 
+    rep stosd// while (Length!=0) { (ULONG *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }  
+    mov ecx,ebx        // Length = temp_Length 
+    rep stosb// while (Length!=0) { (UCHAR *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }  
+    popad    // restore register 
+    ret 8    // return  
+     
+// move 1byte  
+1: 
+    mov ecx,dword [esp + (12 +32) ]        // Length       
+    cld      // clear d flag 
+    rep stosb// while (Length!=0) { (UCHAR *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 }
+    popad    // restore register
+    ret 8    // return
+
+// move 4bytes     
+2:
+    shr ecx,2// Length = Length / sizeof(ULONG)      
+    cld      // clear d flag 
+    rep stosd// while (Length!=0) { (ULONG *) Destination[Length-1]=ZeroFillByte// Legnth = Legnth - 1 } 
+    popad    // restore register 
+3:
+    ret 8    // return