Changeset 14787


Ignore:
Timestamp:
May 6, 2011, 4:19:53 AM (14 years ago)
Author:
Gary Byers
Message:

Try to straighten out ARM2-GET-FLOAT and supporting vinsns.

Location:
trunk/source/compiler/ARM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/ARM/arm-vinsns.lisp

    r14772 r14787  
    658658      (src :address))
    659659     ((src :address)
    660       (index :s32)))
    661   (add src src index)
     660      (index :lisp)))
     661  (add src src (:asr index (:$ arm::fixnumshift)))
    662662  (fldd dest (:@ src (:$ 0))))
    663663
     
    683683    (((dest :single-float))
    684684     ((src :address)
    685       (index :s16const))
    686      ((temp :u32)))
    687   (ldr temp (:@ src (:$ index)))
    688   (fmsr dest temp))
     685      (index :s16const)))
     686  (flds dest (:@ src (:$ index))))
    689687
    690688(define-arm-vinsn (mem-ref-single-float :predicatable)
    691     (((dest :single-float))
     689    (((dest :single-float)
     690      (src :address))
    692691     ((src :address)
    693       (index :lisp))
    694      ((temp :u32)))
    695   (ldr temp (:@ src (:asr index (:$ arm::fixnumshift))))
    696   (fmsr dest temp))
     692      (index :lisp)))
     693  (add src  src (:asr index (:$ arm::fixnumshift)))
     694  (flds dest (:@ src (:$ 0))))
    697695
    698696(define-arm-vinsn (mem-set-c-single-float :predicatable)
  • trunk/source/compiler/ARM/arm2.lisp

    r14778 r14787  
    67736773                   (! mem-ref-c-single-float fp-reg ptrreg fixoffset)))
    67746774               (with-imm-target () (ptrreg :address)
    6775                  (with-imm-target (ptrreg) (offsetreg :s32)
    6776                  (arm2-two-targeted-reg-forms seg
    6777                                               ptr ptrreg
    6778                                               offset offsetreg)
    6779                  (let* ((last (dll-node-pred seg)))
    6780                    (if (and (typep last 'vinsn)
     6775                 (with-node-target (ptrreg) offsetreg
     6776                   (multiple-value-setq (ptrreg offsetreg)
     6777                     (arm2-two-untargeted-reg-forms seg
     6778                                                    ptr ptrreg
     6779                                                    offset offsetreg))
     6780                   (let* ((last (dll-node-pred seg)))
     6781                     (if (and (typep last 'vinsn)
    67816782                              (eq (vinsn-template-name (vinsn-template last)) 'lri)
    6782                               (typep (setq fixoffset (svref (vinsn-variable-parts last) 1))
     6783                              (typep (setq fixoffset (ash (svref (vinsn-variable-parts last) 1) (- arm::fixnumshift)))
    67836784                                     '(signed-byte 10))
    67846785                              (not (logtest fixoffset #x3)))
    6785                      (progn
    6786                        (remove-dll-node last)
    6787                        (if double-p
    6788                          (! mem-ref-c-double-float fp-reg ptrreg fixoffset)
    6789                          (! mem-ref-c-single-float fp-reg ptrreg fixoffset)))
    6790                      (progn
    6791                        (if double-p
    6792                          (! mem-ref-double-float fp-reg ptrreg offsetreg)
    6793                          (! mem-ref-single-float fp-reg ptrreg offsetreg))))))))
     6786                       (progn
     6787                         (elide-vinsn last)
     6788                         (if double-p
     6789                           (! mem-ref-c-double-float fp-reg ptrreg fixoffset)
     6790                           (! mem-ref-c-single-float fp-reg ptrreg fixoffset)))
     6791                       (progn
     6792                         (if double-p
     6793                           (! mem-ref-double-float fp-reg ptrreg offsetreg)
     6794                           (! mem-ref-single-float fp-reg ptrreg offsetreg))))))))
    67946795             (<- fp-reg))
    67956796           (^)))))
Note: See TracChangeset for help on using the changeset viewer.