Changeset 13532


Ignore:
Timestamp:
Mar 15, 2010, 6:30:41 AM (9 years ago)
Author:
gb
Message:

Don't try to special-case (TRUNCATE MOST-NEGATIVE-FIXNUM some-other-fixnum);
the cases that requires special treatment are when some-other-fixnum is -1 (or
0), and they're already handled in %FIXNUM-TRUNCATE now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-0/l0-numbers.lisp

    r13392 r13532  
    11401140         #+32-bit-target
    11411141         `(target::with-stack-short-floats ((fnum ,number)
    1142                                            (f2))
     1142                                            (f2))
    11431143           (let ((res (%unary-truncate (%short-float/-2! fnum ,divisor f2))))
    11441144             (values res
    11451145                     (%short-float--2 fnum (%short-float*-2! (%short-float res f2) ,divisor f2)))))
    1146           #+64-bit-target
     1146         #+64-bit-target
    11471147         `(let* ((temp (%short-float ,number))
    11481148                 (res (%unary-truncate (/ (the short-float temp)
     
    11521152             (the short-float (* (the short-float (%short-float res))
    11531153                                 (the short-float ,divisor)))))))
    1154          )
     1154       )
    11551155    (number-case number
    11561156      (fixnum
    1157        (if (eql number target::target-most-negative-fixnum)
    1158          (if (zerop divisor)
    1159            (error 'division-by-zero :operation 'truncate :operands (list number divisor))
    1160            (with-small-bignum-buffers ((bn number))
    1161              (multiple-value-bind (quo rem) (truncate bn divisor)
    1162                (if (eq quo bn)
    1163                  (values number rem)
    1164                  (values quo rem)))))
    1165          (number-case divisor
    1166            (fixnum (if (eq divisor 1) (values number 0) (%fixnum-truncate number divisor)))
    1167            (bignum (values 0 number))
    1168            (double-float (truncate-rat-dfloat number divisor))
    1169            (short-float (truncate-rat-sfloat number divisor))
    1170            (ratio (let ((q (truncate (* number (%denominator divisor)) ; this was wrong
    1171                                      (%numerator divisor))))
    1172                     (values q (- number (* q divisor))))))))
     1157       (number-case divisor
     1158         (fixnum (if (eq divisor 1) (values number 0) (%fixnum-truncate number divisor)))
     1159         (bignum (values 0 number))
     1160         (double-float (truncate-rat-dfloat number divisor))
     1161         (short-float (truncate-rat-sfloat number divisor))
     1162         (ratio (let ((q (truncate (* number (%denominator divisor)) ; this was wrong
     1163                                   (%numerator divisor))))
     1164                  (values q (- number (* q divisor)))))))
    11731165      (bignum (number-case divisor
    11741166                (fixnum (if (eq divisor 1) (values number 0)
     
    11991191                                    (/ (the short-float number)
    12001192                                       (the short-float divisor)))))
    1201                             (values res
    1202                                     (- (the short-float number)
    1203                                        (* (the short-float (%short-float res))
    1204                                           (the short-float divisor))))))
     1193                          (values res
     1194                                  (- (the short-float number)
     1195                                     (* (the short-float (%short-float res))
     1196                                        (the short-float divisor))))))
    12051197                       ((fixnum bignum ratio)
    12061198                        #+32-bit-target
    12071199                        (target::with-stack-short-floats ((fdiv divisor)
    1208                                                          (f2))
     1200                                                          (f2))
    12091201                          (let ((res (%unary-truncate (%short-float/-2! number fdiv f2))))
    12101202                            (values res
Note: See TracChangeset for help on using the changeset viewer.