Ignore:
Timestamp:
Nov 2, 2008, 9:22:47 AM (11 years ago)
Author:
gb
Message:

Get rid of X862-CR-BIT-FOR-LOGICAL-COMPARISON and use the almost-identical
X862-CR-BIT-FOR-UNSIGNED-COMPARISON in X862-COMPARE-LOGICAL-REGISTERS; ensure
that inversion is handled there.

This seems to fix the "wrong answer" part of ticket:373, but I think
that we've got to do something on ia32 to ensure that the extra
temporary imm register gets set restored to node-ness regardless of
whether or not we branch after the compare. (I'm also a little
concerned that we're doing the mark-as-imm too early. e.g. if X is
some expression that involves a function call and we've done
(mark-as-imm reg-for-y ...)).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/x862.lisp

    r11276 r11286  
    37223722
    37233723
    3724 (defun x862-cr-bit-for-logical-comparison (cr-bit true-p)
    3725   (declare (fixnum cr-bit))
    3726   (let* ((unsigned
    3727           (case cr-bit
    3728             (#.x86::x86-l-bits x86::x86-b-bits)
    3729             (#.x86::x86-le-bits x86::x86-be-bits )
    3730             (#.x86::x86-g-bits x86::x86-a-bits)
    3731             (#.x86::x86-ge-bits x86::x86-ae-bits)
    3732             (t cr-bit))))
    3733     (declare (fixnum unsigned))
    3734     (if true-p
    3735       unsigned
    3736       (logxor unsigned 1))))
     3724
    37373725                 
    37383726(defun x862-compare-natural-registers (seg vreg xfer ireg jreg cr-bit true-p)
     
    37403728    (if vreg
    37413729      (progn
    3742         (setq cr-bit (x862-cr-bit-for-logical-comparison cr-bit true-p))
     3730        (setq cr-bit (x862-cr-bit-for-unsigned-comparison cr-bit))
    37433731        (! compare ireg jreg)
    37443732        (regspec-crf-gpr-case
     
    37473735         (progn
    37483736           (ensuring-node-target (target dest)
     3737             (if (not true-p)
     3738               (setq cr-bit (logxor 1 cr-bit)))
    37493739             (! cr-bit->boolean target cr-bit))
    37503740           (^))))
     
    75187508         (keyword (if (and atype
    75197509                           (let* ((dims (array-ctype-dimensions atype)))
    7520                              (and (not (atom dims))
    7521                                   (= (length dims) 1)))
     7510                             (or (eq dims '*)
     7511                                 (and (not (atom dims))
     7512                                      (= (length dims) 1))))
    75227513                           (not (array-ctype-complexp atype)))
    75237514                    (funcall
     
    75357526         (keyword (if (and atype
    75367527                           (let* ((dims (array-ctype-dimensions atype)))
    7537                              (and (not (atom dims))
    7538                                  (= (length dims) 1)))
     7528                             (or (eq dims '*)
     7529                                 (and (not (atom dims))
     7530                                      (= (length dims) 1))))
    75397531                           (not (array-ctype-complexp atype)))
    75407532                    (funcall
     
    86768668         (keyword (and atype
    86778669                       (let* ((dims (array-ctype-dimensions atype)))
    8678                          (and (typep dims 'list)
    8679                               (= 2 (length dims))))
     8670                         (or (eq dims '*)
     8671                             (and (typep dims 'list)
     8672                                  (= 2 (length dims)))))
    86808673                       (not (array-ctype-complexp atype))
    86818674                       (funcall
     
    87158708         (keyword (and atype
    87168709                       (let* ((dims (array-ctype-dimensions atype)))
    8717                          (unless (atom dims)
    8718                            (= 3 (length dims))))
     8710                         (or (eq dims '*)
     8711                             (unless (atom dims)
     8712                               (= 3 (length dims)))))
    87198713                       (not (array-ctype-complexp atype))
    87208714                       (funcall
Note: See TracChangeset for help on using the changeset viewer.