Ignore:
Timestamp:
Dec 22, 2009, 10:28:03 PM (10 years ago)
Author:
gz
Message:

Improved compilation for some fixnum operations, %svref (r13247-r13253 from trunk)

Location:
branches/working-0711/ccl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711/ccl

  • branches/working-0711/ccl/compiler/X86/x862.lisp

    r13165 r13332  
    13011301    (if *x862-open-code-inline*
    13021302      (let* ((no-overflow (backend-get-next-label)))
    1303         (! set-bigits-and-header-for-fixnum-overflow target (aref *backend-labels* (or labelno no-overflow)))
    1304         (! %allocate-uvector target)
    1305         (! set-bigits-after-fixnum-overflow target)
    1306         (when labelno
    1307           (-> labelno))
     1303        (! handle-fixnum-overflow-inline target (aref *backend-labels* (or labelno no-overflow)))
     1304        (when labelno (-> labelno))
    13081305        (@ no-overflow))
    13091306      (if labelno
     
    25112508                                                  value result-reg)))
    25122509                (:x8664
    2513                  (multiple-value-setq (src unscaled-idx result-reg)
    2514                    (x862-three-untargeted-reg-forms seg
     2510                 (if (and index-known-fixnum
     2511                          (not safe)
     2512                          (nx2-constant-index-ok-for-type-keyword index-known-fixnum type-keyword))
     2513                   (multiple-value-setq (src result-reg unscaled-idx)
     2514                     (x862-two-untargeted-reg-forms seg
    25152515                                                  vector src
    2516                                                   index unscaled-idx
    2517                                                   value result-reg))))))
     2516                                                  value result-reg))
     2517                   (multiple-value-setq (src unscaled-idx result-reg)
     2518                     (x862-three-untargeted-reg-forms seg
     2519                                                      vector src
     2520                                                      index unscaled-idx
     2521                                                      value result-reg)))))))
    25182522        (when safe
    25192523          (let* ((*available-backend-imm-temps* *available-backend-imm-temps*)
     
    29842988    (or (x86-constant-form-p form)
    29852989        ;(eq (acode-operator form) (%nx1-operator bound-special-ref))
     2990        (and (eq (acode-operator form) (%nx1-operator %svref))
     2991             (destructuring-bind (v i) (acode-operands form)
     2992               (let* ((idx (acode-fixnum-form-p i)))
     2993                 (and idx
     2994                      (nx2-constant-index-ok-for-type-keyword idx :simple-vector)
     2995                      (consp (setq v (acode-unwrapped-form-value v)))
     2996                      (eq (acode-operator v) (%nx1-operator lexical-reference))
     2997                      (let* ((var (cadr v)))
     2998                        (unless (%ilogbitp $vbitsetq (nx-var-bits var))
     2999                          (var-nvr var)))))))
    29863000        (if (eq (acode-operator form) (%nx1-operator lexical-reference))
    29873001          (not (%ilogbitp $vbitsetq (nx-var-bits (%cadr form))))))))
     
    43704384              (progn
    43714385                (nx-set-var-bits var (%ilogior (%ilsl $vbitpunted 1) bits))
     4386                (let* ((vtype (var-inittype var)))
     4387                  (when (and vtype (not (eq t vtype)))
     4388                    (setq puntval (make-acode (%nx1-operator typed-form)
     4389                                              vtype
     4390                                              puntval
     4391                                              nil))))
    43724392                (nx2-replace-var-refs var puntval)
    43734393                (x862-set-var-ea seg var puntval))
Note: See TracChangeset for help on using the changeset viewer.