Changeset 16429


Ignore:
Timestamp:
Jun 19, 2015, 6:50:15 AM (4 years ago)
Author:
gb
Message:

THREE-TARGETED-REG-FORMS. Needs to do something like PSETQ (uses 2
temp registers) should probably happen later.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/lscan/source/compiler/X86/x862.lisp

    r16427 r16429  
    13321332     
    13331333      (do* ((offset 0 (1+ offset))
    1334             (nargs (length args) (1- nargs))
    1335             (nregargs (min nargs 3))
    1336             (regarg 0))
     1334            (nargs (length args) (1- nargs)))
     1335
    13371336           ((null args) ())
    1338         (declare (type (signed-byte 16) offset nargs nregargs regarg))
     1337        (declare (type (signed-byte 16) offset nargs ))
    13391338        (let* ((var (pop args))
    1340                (reg nil))
     1339               (reg (?)))
    13411340             
    13421341          (cond ((> nargs 3)
    1343                  (setq reg (?))
    13441342                 (setf (lreg-spill-offset reg) offset
    13451343                       (lreg-flags reg)
    13461344                       (logior lreg-flag-spill lreg-flag-pre-spill)))
    13471345                ((= nargs 3)
    1348                  (setq reg ($ x8664::arg_x))
    1349                  (! incoming-register-arg reg regarg nregargs)
    1350                  (incf regarg))
     1346                 (! copy-incoming-register-arg reg ($ x8664::arg_x)))
     1347
    13511348                ((= nargs 2)
    1352                  (setq reg ($ x8664::arg_y))
    1353                  (! incoming-register-arg reg regarg  nregargs)
    1354                  (incf regarg))
     1349                 (! copy-incoming-register-arg reg ($ x8664::arg_y)))
     1350
    13551351                ((= nargs 1)
    1356                  (setq reg ($ x8664::arg_z))
    1357                  (! incoming-register-arg reg regarg nregargs)))
     1352                 (! copy-incoming-register-arg reg ($ x8664::arg_z))))
    13581353            (setf (var-lreg var) reg)))
    13591354      ())))
     
    14101405      (unless *x862-reckless*
    14111406        (! check-exact-nargs nargs))
    1412       (if *backend-use-linear-scan*
    1413         (progn
    1414 
    1415         (let* ((args (reverse rev-fixed-args))
    1416                (frame-offset (- nargs 3)))
    1417           (if (>= frame-offset 0)
    1418             (! save-lisp-context-no-stack-args)
    1419             (! save-lisp-context-offset (* frame-offset *x862-target-node-size*)))
    1420 
    1421           (!  reserve-spill-area)
    1422           (@ (setq *x862-fixed-self-tail-call-label* (backend-get-next-label)))
    1423 
    1424           (do* ((offset 0 (1+ offset))
    1425                 (nargs (length args) (1- nargs))
    1426                 (nregargs (min nargs 3))
    1427                 (regarg 0))
    1428                
    1429                
    1430                ((null args) ())
    1431             (let* ((var (pop args))
    1432                    (reg nil))
    1433              
    1434               (cond ((> nargs 3)
    1435                      (setq reg (?))
    1436                      (setf (lreg-spill-offset reg) offset
    1437                            (lreg-flags reg)
    1438                            (logior lreg-flag-spill lreg-flag-pre-spill)))
    1439                     ((= nargs 3)
    1440                      (setq reg ($ x8664::arg_x))
    1441                      (! incoming-register-arg reg regarg nregargs)
    1442                      (incf regarg))
    1443                     ((= nargs 2)
    1444                      (setq reg ($ x8664::arg_y))
    1445                      (! incoming-register-arg reg regarg  nregargs))
    1446                     ((= nargs 1)
    1447                      (setq reg ($ x8664::arg_z))
    1448                      (! incoming-register-arg reg regarg nregargs)))
    1449               (setf (var-lreg var) reg)))))
    1450              
    1451                  
    14521407               
    14531408               
    1454         (x862-argregs-entry seg rev-fixed-args)))))
     1409        (x862-argregs-entry seg rev-fixed-args))))
    14551410
    14561411;;; No more &optional args than register args; all &optionals default
     
    41104065
    41114066
     4067
    41124068(defun x862-three-targeted-reg-forms (seg aform areg bform breg cform creg)
     4069  (if *backend-use-linear-scan*
     4070  (with-x86-local-vinsn-macros (seg)
     4071    (let* ((atemp (x862-one-lreg-form Seg aform (?)))
     4072           (btemp (x862-one-lreg-form seg bform (?)))
     4073           (ctemp (x862-one-lreg-form seg cform (?))))
     4074      (when (or (lreg-wired atemp) (lreg-wired btemp) (lreg-wired ctemp))
     4075        (break))
     4076      (let* ((g0 (?))
     4077             (g1 (?)))       
     4078        (! copy-gpr! g0 atemp)
     4079        (! copy-gpr! g1 btemp)
     4080        (! copy-gpr! creg ctemp)
     4081        (! copy-gpr! areg g0)
     4082        (! copy-gpr! breg g1))))
     4083   
    41134084  (let* ((bnode (nx2-node-gpr-p breg))
    41144085         (cnode (nx2-node-gpr-p creg))
     
    41514122        (x862-one-targeted-reg-form seg aform areg)
    41524123        (x862-elide-pushes seg apushed (x862-pop-register seg areg))))
    4153     (values areg breg creg)))
     4124    (values areg breg creg))))
    41544125
    41554126(defun x862-four-targeted-reg-forms (seg aform areg bform breg cform creg dform dreg)
Note: See TracChangeset for help on using the changeset viewer.