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. include mdef.inc
  34. include struct.inc
  35.  
  36. .8087
  37.         modstart        _7u8f386
  38.  
  39.         xdefp   __U8FD7
  40.         xdefp   __U8FS7
  41.  
  42. ;;;;two_to_64       dw      0000h, 0000h, 0000h, 43f0h ; removed by JBS
  43.  
  44. ULLMXP1:
  45.         DB  00H, 00H, 80H, 5FH          ; (float)(ULONGLONG_MAX +1)
  46.                                         ; (only exponent set)
  47.  
  48. defpe   __U8FS7
  49.         push    edx                     ; save unsigned int64 (hi)
  50.         push    eax                     ; save unsigned int64 (lo)
  51.         fild    qword ptr [esp]         ; load as int64
  52.         test    byte ptr 07H[esp],80H   ; most significant bit set?
  53.         jns     L$2                     ; no, jump
  54.         fadd    dword ptr cs:ULLMXP1    ; correct int64 to unsigned int64 as
  55.                                         ; as float (because expression is exact
  56.                                         ; in powers of 2, so save 4 bytes)
  57. L$2:
  58.         pop     eax                     ; correct stack
  59.         fstp    dword ptr [esp]         ; save float and pop coproc stack
  60.         pop     eax                     ; return float in eax
  61.         ret
  62. endproc __U8FS7
  63.  
  64. defpe   __U8FD7
  65.         push    edx                     ; save unsigned int64 (hi)
  66.         push    eax                     ; save unsigned int64 (lo)
  67.         fild    qword ptr [esp]         ; load as int64
  68.         test    byte ptr 07H[esp],80H   ; most significant bit set?
  69.         jns     L$3                     ; no, jump
  70.         fadd    dword ptr cs:ULLMXP1    ; correct int64 to unsigned int64 as
  71.                                         ; as float (because expression is exact
  72.                                         ; in powers of 2, so save 4 bytes)
  73. L$3:
  74.         fstp    qword ptr [esp]         ; save double and pop coproc stack
  75.         pop     eax                     ; return double (lo)
  76.         pop     edx                     ; return double (hi)
  77.         ret
  78. endproc __U8FD7
  79.  
  80.         endmod
  81.         end
  82.