Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
553 serge 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