Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/softint/generic/division.c

    r1b20da0 ra35b458  
    4545        unsigned int result;
    4646        int steps = sizeof(unsigned int) * 8;
    47        
     47
    4848        *remainder = 0;
    4949        result = 0;
    50        
     50
    5151        if (b == 0) {
    5252                /* FIXME: division by zero */
    5353                return 0;
    5454        }
    55        
     55
    5656        if (a < b) {
    5757                *remainder = a;
    5858                return 0;
    5959        }
    60        
     60
    6161        for (; steps > 0; steps--) {
    6262                /* shift one bit to remainder */
    6363                *remainder = ((*remainder) << 1) | (( a >> 31) & 0x1);
    6464                result <<= 1;
    65                
     65
    6666                if (*remainder >= b) {
    6767                        *remainder -= b;
     
    7070                a <<= 1;
    7171        }
    72        
     72
    7373        return result;
    7474}
     
    7979        unsigned long long result;
    8080        int steps = sizeof(unsigned long long) * 8;
    81        
     81
    8282        *remainder = 0;
    8383        result = 0;
    84        
     84
    8585        if (b == 0) {
    8686                /* FIXME: division by zero */
    8787                return 0;
    8888        }
    89        
     89
    9090        if (a < b) {
    9191                *remainder = a;
    9292                return 0;
    9393        }
    94        
     94
    9595        for (; steps > 0; steps--) {
    9696                /* shift one bit to remainder */
    9797                *remainder = ((*remainder) << 1) | ((a >> 63) & 0x1);
    9898                result <<= 1;
    99                
     99
    100100                if (*remainder >= b) {
    101101                        *remainder -= b;
     
    104104                a <<= 1;
    105105        }
    106        
     106
    107107        return result;
    108108}
     
    113113        unsigned int rem;
    114114        int result = (int) divandmod32(ABSVAL(a), ABSVAL(b), &rem);
    115        
     115
    116116        if (SGN(a) == SGN(b))
    117117                return result;
    118        
     118
    119119        return -result;
    120120}
     
    125125        unsigned long long rem;
    126126        long long result = (long long) divandmod64(ABSVAL(a), ABSVAL(b), &rem);
    127        
     127
    128128        if (SGN(a) == SGN(b))
    129129                return result;
    130        
     130
    131131        return -result;
    132132}
     
    151151        unsigned int rem;
    152152        divandmod32(a, b, &rem);
    153        
     153
    154154        /* if divident is negative, remainder must be too */
    155155        if (!(SGN(a)))
    156156                return -((int) rem);
    157        
     157
    158158        return (int) rem;
    159159}
     
    164164        unsigned long long rem;
    165165        divandmod64(a, b, &rem);
    166        
     166
    167167        /* if divident is negative, remainder must be too */
    168168        if (!(SGN(a)))
    169169                return -((long long) rem);
    170        
     170
    171171        return (long long) rem;
    172172}
     
    192192        unsigned int rem;
    193193        int result = (int) divandmod32(ABSVAL(a), ABSVAL(b), &rem);
    194        
     194
    195195        if (SGN(a) == SGN(b)) {
    196196                *c = rem;
    197197                return result;
    198198        }
    199        
     199
    200200        *c = -rem;
    201201        return -result;
     
    212212        unsigned long long rem;
    213213        long long result = (int) divandmod64(ABSVAL(a), ABSVAL(b), &rem);
    214        
     214
    215215        if (SGN(a) == SGN(b)) {
    216216                *c = rem;
    217217                return result;
    218218        }
    219        
     219
    220220        *c = -rem;
    221221        return -result;
     
    226226        unsigned long long rem;
    227227        long long result = (int) divandmod64(ABSVAL(a), ABSVAL(b), &rem);
    228        
     228
    229229        if (SGN(a) == SGN(b)) {
    230230                *c = rem;
    231231                return result;
    232232        }
    233        
     233
    234234        *c = -rem;
    235235        return -result;
Note: See TracChangeset for help on using the changeset viewer.