Ignore:
Timestamp:
Feb 11, 2009, 1:24:14 AM (11 years ago)
Author:
gb
Message:

Propagate r11711 to 1.3.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/1.3/source/compiler/X86/x862.lisp

    r11667 r11713  
    31913191           (csp-p (vinsn-attribute-p push-vinsn :csp)))
    31923192      (when csp-p                       ; vsp case is harder.
    3193         (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
    3194                                    push-vinsn pop-vinsn pushed-reg))
    3195                (popped-reg-is-set (if same-reg
    3196                                     pushed-reg-is-set
    3197                                     (vinsn-sequence-sets-reg-p
    3198                                      push-vinsn pop-vinsn popped-reg))))
    3199           (unless (and pushed-reg-is-set popped-reg-is-set)
    3200             (unless same-reg
    3201               (let* ((copy (if (eq (hard-regspec-class pushed-reg)
    3202                                    hard-reg-class-fpr)
    3203                              (if (= (get-regspec-mode pushed-reg)
    3204                                     hard-reg-class-fpr-mode-double)
    3205                                (! copy-double-float popped-reg pushed-reg)
    3206                                (! copy-single-float popped-reg pushed-reg))
    3207                              (! copy-gpr popped-reg pushed-reg))))
    3208                 (remove-dll-node copy)
    3209                 (if pushed-reg-is-set
    3210                   (insert-dll-node-after copy push-vinsn)
    3211                   (insert-dll-node-before copy push-vinsn))))
    3212             (elide-vinsn push-vinsn)
    3213             (elide-vinsn pop-vinsn)))))))
     3193        (unless (vinsn-sequence-has-attribute-p push-vinsn pop-vinsn :csp :discard)
     3194          (let* ((pushed-reg-is-set (vinsn-sequence-sets-reg-p
     3195                                     push-vinsn pop-vinsn pushed-reg))
     3196                 (popped-reg-is-set (if same-reg
     3197                                      pushed-reg-is-set
     3198                                      (vinsn-sequence-sets-reg-p
     3199                                       push-vinsn pop-vinsn popped-reg))))
     3200            (unless (and pushed-reg-is-set popped-reg-is-set)
     3201              (unless same-reg
     3202                (let* ((copy (if (eq (hard-regspec-class pushed-reg)
     3203                                     hard-reg-class-fpr)
     3204                               (if (= (get-regspec-mode pushed-reg)
     3205                                      hard-reg-class-fpr-mode-double)
     3206                                 (! copy-double-float popped-reg pushed-reg)
     3207                                 (! copy-single-float popped-reg pushed-reg))
     3208                               (! copy-gpr popped-reg pushed-reg))))
     3209                  (remove-dll-node copy)
     3210                  (if pushed-reg-is-set
     3211                    (insert-dll-node-after copy push-vinsn)
     3212                    (insert-dll-node-before copy push-vinsn))))
     3213              (elide-vinsn push-vinsn)
     3214              (elide-vinsn pop-vinsn))))))))
    32143215               
    32153216       
Note: See TracChangeset for help on using the changeset viewer.