Changeset 7773 for branches


Ignore:
Timestamp:
Nov 28, 2007, 2:31:41 PM (17 years ago)
Author:
R. Matthew Emerson
Message:

Still more cases where additional imm regs are needed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/compiler/X86/x862.lisp

    r7764 r7773  
    44314431                                                                      ptr
    44324432                                                                      ptr-reg)))
    4433                           (! mem-set-c-constant-doubleword intval ptr-reg offval))))
     4433                          (target-word-size-case
     4434                           (32
     4435                            (! mem-set-c-constant-fullword intval ptr-reg offval))
     4436                           (64
     4437                            (! mem-set-c-constant-doubleword intval ptr-reg offval))))))
    44344438                     (t
    4435                       (with-imm-target () (ptr-reg :address)
    4436                         (with-imm-target (ptr-reg) (offsetreg :signed-natural)
    4437                           (x862-two-targeted-reg-forms seg ptr ptr-reg offset ($ *x862-arg-z*))
    4438                           (! fixnum->signed-natural offsetreg *x862-arg-z*)
    4439                           (! mem-set-constant-doubleword intval ptr-reg offsetreg)))))
     4439                      (with-additional-imm-reg ()
     4440                        (with-imm-target () (ptr-reg :address)
     4441                          (with-imm-target (ptr-reg) (offsetreg :signed-natural)
     4442                            (x862-two-targeted-reg-forms seg ptr ptr-reg offset ($ *x862-arg-z*))
     4443                            (! fixnum->signed-natural offsetreg *x862-arg-z*)
     4444                            (target-word-size-case
     4445                             (32 (! mem-set-constant-fullword intval ptr-reg offsetreg))
     4446                             (64 (! mem-set-constant-doubleword intval ptr-reg offsetreg))))))))
    44404447               (if for-value
    4441                  (with-imm-target () (val-reg :s64)
     4448                 (with-imm-target () (val-reg (target-word-size-case (32 :s32) (64 :s64)))
    44424449                   (x862-lri seg val-reg intval)
    44434450                   (<- (set-regspec-mode val-reg (gpr-mode-name-value :address))))))
     
    44494456               (multiple-value-bind (address node)
    44504457                   (address-and-node-regs)
    4451                  (with-imm-target (address) (ptr-reg :address)
    4452                    (x862-pop-register seg ptr-reg)
    4453                    (! mem-set-c-doubleword address ptr-reg offval))
     4458                 (with-additional-imm-reg ()
     4459                   (with-imm-target (address) (ptr-reg :address)
     4460                     (x862-pop-register seg ptr-reg)
     4461                     (target-word-size-case
     4462                      (32 (! mem-set-c-fullword address ptr-reg offval))
     4463                      (64 (! mem-set-c-doubleword address ptr-reg offval)))))
    44544464                 (if for-value
    44554465                   (<- node))))
    44564466              (t
    44574467               (with-imm-target () (ptr-reg :address)
    4458                  (with-imm-target (ptr-reg) (offset-reg :address)
    4459                    (x862-two-targeted-reg-forms seg ptr ptr-reg offset ($ *x862-arg-z*))
    4460                    (! fixnum->signed-natural offset-reg *x862-arg-z*)
    4461                    (! fixnum-add2 ptr-reg offset-reg)
    4462                    (x862-push-register seg ptr-reg)))
     4468                 (with-additional-imm-reg ()
     4469                   (with-imm-target (ptr-reg) (offset-reg :address)
     4470                     (x862-two-targeted-reg-forms seg ptr ptr-reg offset ($ *x862-arg-z*))
     4471                     (! fixnum->signed-natural offset-reg *x862-arg-z*)
     4472                     (! fixnum-add2 ptr-reg offset-reg)
     4473                     (x862-push-register seg ptr-reg))))
    44634474               (multiple-value-bind (address node)
    44644475                   (address-and-node-regs)
    4465                  (with-imm-target (address) (ptr-reg :address)
    4466                    (x862-pop-register seg ptr-reg)
    4467                    (! mem-set-c-doubleword address ptr-reg 0))
     4476                 (with-additional-imm-reg ()
     4477                   (with-imm-target (address) (ptr-reg :address)
     4478                     (x862-pop-register seg ptr-reg)
     4479                     (target-word-size-case
     4480                      (32 (! mem-set-c-fullword address ptr-reg 0))
     4481                      (64 (! mem-set-c-doubleword address ptr-reg 0)))))
    44684482                 (if for-value
    44694483                   (<- node))))))
     
    77137727               (let* ((src (x862-macptr-arg-to-reg seg ptr ($ *x862-imm0* :mode :address))))
    77147728                 (if triv-p
    7715                    (with-imm-temps (src) (x)
    7716                      (if (acode-fixnum-form-p offset)
    7717                        (x862-lri seg x (acode-fixnum-form-p offset))
    7718                        (! fixnum->signed-natural x (x862-one-untargeted-reg-form seg offset *x862-arg-z*)))
    7719                      (! mem-ref-natural dest src x))
     7729                   (with-additional-imm-reg ()
     7730                     (with-imm-temps (src) (x)
     7731                       (if (acode-fixnum-form-p offset)
     7732                         (x862-lri seg x (acode-fixnum-form-p offset))
     7733                         (! fixnum->signed-natural x (x862-one-untargeted-reg-form seg offset *x862-arg-z*)))
     7734                       (! mem-ref-natural dest src x)))
    77207735                   (progn
    77217736                     (! temp-push-unboxed-word src)
    77227737                     (x862-open-undo $undostkblk)
    77237738                     (let* ((oreg (x862-one-untargeted-reg-form seg offset *x862-arg-z*)))
    7724                        (with-imm-temps () (src x)
    7725                          (! temp-pop-unboxed-word src)
    7726                          (x862-close-undo)
    7727                          (! fixnum->signed-natural x oreg)
    7728                          (! mem-ref-natural dest src x))))))))
     7739                       (with-additional-imm-reg (*x862-arg-z*)
     7740                         (with-imm-temps () (src x)
     7741                           (! temp-pop-unboxed-word src)
     7742                           (x862-close-undo)
     7743                           (! fixnum->signed-natural x oreg)
     7744                           (! mem-ref-natural dest src x)))))))))
    77297745           (^)))))
    77307746
     
    81028118           (x862-form seg nil xfer offset))
    81038119          ((typep fixoffset '(signed-byte 16))
    8104            (with-imm-target () (val :natural)
    8105              (! lisp-word-ref-c val
    8106                 (x862-one-untargeted-reg-form seg base *x862-arg-z*)
    8107                 fixoffset)
    8108              (<- val))
     8120           (format t "~&in constant offset branch")
     8121           (with-imm-target () (val :natural)
     8122             (! lisp-word-ref-c val
     8123                (x862-one-untargeted-reg-form seg base *x862-arg-z*)
     8124                fixoffset)
     8125             (<- val))
    81098126           (^))
    81108127          (t (multiple-value-bind (breg oreg)
    81118128                 (x862-two-untargeted-reg-forms seg base *x862-arg-y* offset *x862-arg-z*)
     8129               (format t "~&in general offset branch")
    81128130               (with-imm-target () (otemp :s32)
    81138131                 (! fixnum->signed-natural otemp oreg)
    8114                  (with-imm-target () (val :natural)
    8115                    (! lisp-word-ref val breg otemp)
    8116                    (<- val)))
     8132                 (with-additional-imm-reg (otemp)
     8133                   (with-imm-target () (val :natural)
     8134                     (! lisp-word-ref val breg otemp)
     8135                     (<- val))))
    81178136               (^))))))
    81188137
     
    91299148        (let* ((u31y (and (typep fix-y '(unsigned-byte 31)) fix-y)))
    91309149          (if (not u31y)
    9131             (with-imm-target () (xreg :natural)
    9132               (with-imm-target (xreg) (yreg :natural)
    9133                 (x862-two-targeted-reg-forms seg x xreg y yreg)
    9134                 (! %natural- xreg xreg yreg))
    9135               (<- xreg))
     9150            (with-additional-imm-reg ()
     9151              (with-imm-target () (xreg :natural)
     9152                (with-imm-target (xreg) (yreg :natural)
     9153                  (x862-two-targeted-reg-forms seg x xreg y yreg)
     9154                  (! %natural- xreg yreg))
     9155                (<- xreg)))
    91369156            (progn
    91379157              (with-imm-target () (xreg :natural)
    91389158                (x862-one-targeted-reg-form seg x xreg)
    9139                 (! %natural--c xreg xreg u31y)
     9159                (! %natural--c xreg u31y)
    91409160                (<- xreg))))
    91419161          (^))))))
Note: See TracChangeset for help on using the changeset viewer.