VirtualBox

source: vbox/trunk/src/VBox/Runtime/common/math/watcom/I8D-x86-32.asm@ 96206

Last change on this file since 96206 was 93115, checked in by vboxsync, 3 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.5 KB
Line 
1; $Id: I8D-x86-32.asm 93115 2022-01-01 11:31:46Z vboxsync $
2;; @file
3; BS3Kit - 32-bit Watcom C/C++, 64-bit signed integer division.
4;
5
6;
7; Copyright (C) 2007-2022 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27%include "iprt/asmdefs.mac"
28
29
30BEGINCODE
31
32extern __U8D
33
34
35;;
36; 64-bit signed integer division.
37;
38; @returns EDX:EAX Quotient, ECX:EBX Remainder.
39; @param EDX:EAX Dividend.
40; @param ECX:EBX Divisor
41;
42global __I8D
43__I8D:
44 ;
45 ; We use __U8D to do the work, we take care of the signedness.
46 ;
47 or edx, edx
48 js .negative_dividend
49
50 or ecx, ecx
51 js .negative_divisor_positive_dividend
52 jmp __U8D
53
54
55.negative_divisor_positive_dividend:
56 ; negate the divisor, do unsigned division, and negate the quotient.
57 neg ecx
58 neg ebx
59 sbb ecx, 0
60
61 call __U8D
62
63 neg edx
64 neg eax
65 sbb edx, 0
66 ret
67
68.negative_dividend:
69 neg edx
70 neg eax
71 sbb edx, 0
72
73 or ecx, ecx
74 js .negative_dividend_negative_divisor
75
76.negative_dividend_positive_divisor:
77 ; negate the dividend (above), do unsigned division, and negate both quotient and remainder
78 call __U8D
79
80 neg edx
81 neg eax
82 sbb edx, 0
83
84.return_negated_remainder:
85 neg ecx
86 neg ebx
87 sbb ecx, 0
88 ret
89
90.negative_dividend_negative_divisor:
91 ; negate both dividend (above) and divisor, do unsigned division, and negate the remainder.
92 neg ecx
93 neg ebx
94 sbb ecx, 0
95
96 call __U8D
97 jmp .return_negated_remainder
98
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette