Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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. ;==     Name:           I8M,U8M                                        ==
  35. ;==     Operation:      integer eight byte multiply                    ==
  36. ;==     Inputs:         EDX;EAX   integer M1                           ==
  37. ;==                     ECX;EBX   integer M2                           ==
  38. ;==     Outputs:        EDX;EAX   product                              ==
  39. ;==     Volatile:       ECX, EBX destroyed                             ==
  40. ;========================================================================
  41. include mdef.inc
  42. include struct.inc
  43.  
  44.         modstart        i8m
  45.  
  46.         xdefp   __I8M
  47.         xdefp   __U8M
  48.  
  49.         defpe   __I8M
  50.         defpe   __U8M
  51.  
  52.         test    edx,edx         ; first check for easy (hiwords == 0) case
  53.         jnz     L1
  54.         test    ecx,ecx
  55.         jnz     L1
  56.         mul     ebx
  57.         ret
  58.  
  59. L1:     push    eax             ; save M1.l
  60.         push    edx             ; save M1.h
  61.         mul     ecx             ; calc M1.l * M2.h -> eax
  62.         mov     ecx,eax         ; save M1.l * M2.h in ecx
  63.         pop     eax             ; get  M1.h in eax
  64.         mul     ebx             ; calc M1.h * M2.l -> eax
  65.         add     ecx,eax         ; add  above to previous total
  66.         pop     eax             ; get  M1.l in eax
  67.         mul     ebx             ; calc M1.l * M2.l -> edx:eax
  68.         add     edx,ecx         ; add previous hiword contribs to hiword
  69.         ret                     ; and return!!!
  70.  
  71.         endproc __U8M
  72.         endproc __I8M
  73.  
  74.         endmod
  75.         end
  76.