Changeset 15327


Ignore:
Timestamp:
06/11/20 12:25:31 (3 years ago)
Author:
Mark Evenson
Message:

Restore svref optimizations for SIMPLE-VECTOR sorts

Fixes <https://abcl.org/trac/ticket/196>.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/sort.lisp

    r15326 r15327  
    9999       (loop
    100100         (if (funcall ,predicate ,k-b ,k-a)
    101        (progn
    102 ;;         (setf (svref ,aux ,i-aux) ,v-b ;; FIXME Ticket #196
    103          (setf (aref ,aux ,i-aux) ,v-b
    104          ,i-aux (+ ,i-aux 1)
    105          ,i-b (+ ,i-b 1))
     101       (progn
     102                           ,(if (subtypep type 'simple-vector)
     103              `(setf (svref ,aux ,i-aux) ,v-b
     104                                       ,i-aux (+ ,i-aux 1)
     105               ,i-b (+ ,i-b 1))
     106                                `(setf (aref ,aux ,i-aux) ,v-b
     107                                       ,i-aux (+ ,i-aux 1)
     108               ,i-b (+ ,i-b 1)))
    106109         (when (= ,i-b ,end-b) (return))
    107110         (setf ,v-b (,ref ,b ,i-b)
     
    109112               `(,k-b (funcall ,key ,v-b))
    110113               `(,k-b ,v-b))))
    111        (progn
    112 ;;         (setf (svref ,aux ,i-aux) ,v-a ;; FIXME Ticket #196
    113          (setf (aref ,aux ,i-aux) ,v-a
    114          ,i-aux (+ ,i-aux 1)
    115          ,i-a (+ ,i-a 1))
     114       (progn
     115                           ,(if (subtypep type 'simple-vector)
     116              `(setf (svref ,aux ,i-aux) ,v-a
     117               ,i-aux (+ ,i-aux 1)
     118               ,i-a (+ ,i-a 1))
     119                                `(setf (aref ,aux ,i-aux) ,v-a
     120                                       ,i-aux (+ ,i-aux 1)
     121               ,i-a (+ ,i-a 1)))
    116122         (when (= ,i-a ,end-a)
    117123           (setf ,a ,b
     
    125131               `(,k-a ,v-a))))))))
    126132      (loop
    127 ;;        (setf (svref ,aux ,i-aux) ,v-a ;; FIXME Ticket #196
    128         (setf (aref ,aux ,i-aux) ,v-a
    129         ,i-a (+ ,i-a 1))
     133              ,(if (subtypep type 'simple-vector)
     134             `(setf (svref ,aux ,i-aux) ,v-a
     135                          ,i-a (+ ,i-a 1))
     136             `(setf (aref ,aux ,i-aux) ,v-a
     137                          ,i-a (+ ,i-a 1)))
    130138        (when (= ,i-a ,end-a) (return))
    131139        (setf ,v-a (,ref ,a ,i-a)
     
    164172                ,mid ,end ,aux ,start ,predicate)))))
    165173   (let ((,maux (make-array ,mend)))
    166 ;;     (declare (type simple-vector ,maux))
    167      (declare (type vector ,maux))
     174           (declare (type ,maux ,type))
    168175     (,merge-sort-call ,msequence ,mstart ,mend ,mpredicate ,mkey ,maux nil))))))
    169176
Note: See TracChangeset for help on using the changeset viewer.