Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;*****************************************************************************
  2. ;*
  3. ;*                            Open Watcom Project
  4. ;*
  5. ;*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
  6. ;*
  7. ;*  ========================================================================
  8. ;*
  9. ;*    This file contains Original Code and/or Modifications of Original
  10. ;*    Code as defined in and that are subject to the Sybase Open Watcom
  11. ;*    Public License version 1.0 (the 'License'). You may not use this file
  12. ;*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
  13. ;*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
  14. ;*    provided with the Original Code and Modifications, and is also
  15. ;*    available at www.sybase.com/developer/opensource.
  16. ;*
  17. ;*    The Original Code and all software distributed under the License are
  18. ;*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  19. ;*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
  20. ;*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
  21. ;*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
  22. ;*    NON-INFRINGEMENT. Please see the License for the specific language
  23. ;*    governing rights and limitations under the License.
  24. ;*
  25. ;*  ========================================================================
  26. ;*
  27. ;* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
  28. ;*               DESCRIBE IT HERE!
  29. ;*
  30. ;*****************************************************************************
  31.  
  32.  
  33. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  34. ;<>
  35. ;<> __FSC compares EAX with EDX
  36. ;<>       if EAX > EDX,  1 is returned in EAX
  37. ;<>       if EAX = EDX,  0 is returned in EAX
  38. ;<>       if EAX < EDX, -1 is returned in EAX
  39. ;<>
  40. ;<>  =========    ===           =======
  41. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  42. include mdef.inc
  43. include struct.inc
  44.  
  45.         modstart        fsc386
  46.  
  47.         xdefp   __FSC
  48.  
  49.         defpe   __FSC
  50.         _guess    have_cmp      ; guess - comparison done
  51.           xor     EAX,EDX       ; - check if signs differ
  52.           _if     ns            ; - if signs are the same
  53.             xor     EAX,EDX     ; - - restore EAX
  54.             sub     EAX,EDX     ; - - find difference, EAX=0 if equal
  55.             _quif   e,have_cmp  ; - - done if mantissas also equal
  56.                                 ; - - carry=1 iff |EAX| < |EDX|
  57.             rcr     EAX,1       ; - - EAX sign set iff |EAX| < |EDX|
  58.             xor     EDX,EAX     ; - - EDX sign set iff EAX < EDX
  59.             not     EDX         ; - - EDX sign set iff EAX > EDX
  60.           _endif                ; - endif
  61.           sub     EAX,EAX       ; - clear result
  62.           _shl    EDX,1         ; - carry=1 iff EAX > EDX
  63.           adc     EAX,EAX       ; - EAX = 1 iff EAX > EDX, else EAX = 0
  64.           _shl    EAX,1         ; - EAX = 2 iff EAX > EDX, else EAX = 0
  65.           dec     EAX           ; - EAX = 1 iff EAX > EDX, else EAX = -1
  66.         _endguess               ; endguess
  67.         ret                     ; return with sign in EAX, conditions set
  68.         endproc __FSC
  69.  
  70.         endmod
  71.         end
  72.