Changeset 371


Ignore:
Timestamp:
Jan 24, 2004, 3:27:19 PM (21 years ago)
Author:
Gary Byers
Message:

Don't use LOAD-TIME-VALUE to reference vinsn-template cell; look up the
template at runtime. Change some vinsn usage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/PPC/ppc2.lisp

    r348 r371  
    2626(defconstant ppc2-debug-vinsns-bit 1)
    2727(defconstant ppc2-debug-lcells-bit 2)
     28(defparameter *ppc2-target-lcell-size* 0)
     29(defparameter *ppc2-target-node-size* 0)
     30
     31
    2832
    2933
     
    5054                    (unless ,template-temp
    5155                      (warn "VINSN \"~A\" not defined" ,template-name-var))
    52                     `(%emit-vinsn ,',segvar (load-time-value (get-vinsn-template-cell ',,template-name-var (backend-p2-vinsn-templates *target-backend*))) (backend-p2-vinsn-templates *target-backend*) ,@,args-var))))
     56                    `(%emit-vinsn ,',segvar ',,template-name-var (backend-p2-vinsn-templates *target-backend*) ,@,args-var))))
    5357       (macrolet ((<- (,retvreg-var)
    5458                    `(ppc2-copy-register ,',segvar ,',vreg-var ,,retvreg-var))
     
    195199
    196200(defun ppc2-reserve-vstack-lcells (n)
    197   (dotimes (i n) (ppc2-new-vstack-lcell :reserved 4 0 nil)))
     201  (dotimes (i n) (ppc2-new-vstack-lcell :reserved *ppc2-target-lcell-size* 0 nil)))
    198202
    199203(defun ppc2-vstack-mark-top ()
     
    370374           (*ppc2-vstack* 0)
    371375           (*ppc2-cstack* 0)
     376           (*ppc2-target-lcell-size* (backend-target-lisp-node-size *target-backend*))
     377           (*ppc2-target-node-size* *ppc2-target-lcell-size*)
    372378           (*ppc2-all-lcells* ())
    373379           (*ppc2-top-vstack-lcell* nil)
     
    672678        (! save-nvrs (- 32 n))))
    673679    (dotimes (i n)
    674       (ppc2-new-vstack-lcell :regsave 4 0 (- ppc::save0 i)))
    675     (incf *ppc2-vstack* (the fixnum (* n 4)))
     680      (ppc2-new-vstack-lcell :regsave *ppc2-target-lcell-size* 0 (- ppc::save0 i)))
     681    (incf *ppc2-vstack* (the fixnum (* n *ppc2-target-node-size*)))
    676682    (setq *ppc2-register-restore-ea* *ppc2-vstack*
    677683          *ppc2-register-restore-count* n)))
     
    716722          (ppc2-init-regvar seg arg reg (ppc2-vloc-ea vloc))
    717723          (ppc2-bind-var seg arg vloc lcell))
    718         (setq vloc (%i+ vloc 4)))))
     724        (setq vloc (%i+ vloc *ppc2-target-node-size*)))))
    719725  (dolist (arg req)
    720726    (if (memq arg passed-in-regs)
     
    724730          (ppc2-init-regvar seg arg reg (ppc2-vloc-ea vloc))
    725731          (ppc2-bind-var seg arg vloc lcell))
    726         (setq vloc (%i+ vloc 4)))))
     732        (setq vloc (%i+ vloc *ppc2-target-node-size*)))))
    727733  (when opt
    728734    (if (ppc2-hard-opt-p opt)
     
    736742              (ppc2-init-regvar seg var reg (ppc2-vloc-ea vloc))
    737743              (ppc2-bind-var seg var vloc lcell))
    738             (setq vloc (+ vloc 4)))))))
     744            (setq vloc (+ vloc *ppc2-target-node-size*)))))))
    739745  (when keys
    740746    (apply #'ppc2-init-keys seg vloc lcells keys)
    741     (setq vloc (+ vloc (%ilsl 3 nkeys))
     747    (setq vloc (+ vloc (* 2 *ppc2-target-node-size* nkeys))
    742748          lcells (nthcdr (+ nkeys nkeys) lcells)))
    743749  (when rest
     
    758764          (ppc2-init-regvar seg rest reg (ppc2-vloc-ea vloc))
    759765          (ppc2-bind-var seg rest vloc (pop lcells)))
    760         (setq vloc (+ vloc 4)))))
     766        (setq vloc (+ vloc *ppc2-target-node-size*)))))
    761767  (ppc2-seq-bind seg (%car auxen) (%cadr auxen)))
    762768
     
    789795            (ppc2-init-regvar seg spvar reg (ppc2-vloc-ea spvloc))
    790796            (ppc2-bind-var seg spvar spvloc splcell))))
    791       (setq vloc (%i+ vloc 4))
    792       (if spvloc (setq spvloc (%i+ spvloc 4))))))
     797      (setq vloc (%i+ vloc *ppc2-target-node-size*))
     798      (if spvloc (setq spvloc (%i+ spvloc *ppc2-target-node-size*))))))
    793799
    794800(defun ppc2-init-keys (seg vloc lcells allow-others keyvars keysupp keyinits keykeys)
     
    859865      (destructuring-bind (&optional zvar yvar xvar &rest stack-args) revargs
    860866        (let* ((nstackargs (length stack-args)))
    861           (ppc2-set-vstack (ash nstackargs 2))
     867          (ppc2-set-vstack (* nstackargs *ppc2-target-node-size*))
    862868          (dotimes (i nstackargs)
    863             (ppc2-new-vstack-lcell :reserved 4 0 nil))
     869            (ppc2-new-vstack-lcell :reserved *ppc2-target-lcell-size* 0 nil))
    864870          (if (>= nargs 3)
    865871            (push (ppc2-vpush-arg-register seg ($ ppc::arg_x) xvar) reg-vars))
     
    13011307                       (! trap-unless-typecode= src safe))
    13021308                     (unless index-known-fixnum
    1303                        (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1309                       (! trap-unless-fixnum unscaled-idx))
    13041310                     (! check-misc-bound unscaled-idx src))
    13051311                   (if (<= subtag ppc32::max-32-bit-ivector-subtag)
     
    13071313                       (cond ((= subtag ppc32::subtag-single-float-vector)
    13081314                              (! misc-ref-c-single-float 0 src index-known-fixnum)
    1309                               (! single->heap target 0))
     1315                              (! single->node target 0))
    13101316                             (t
    13111317                              (with-imm-temps () (temp)
     
    13211327                           (cond ((= subtag ppc32::subtag-single-float-vector)
    13221328                                  (! misc-ref-single-float 0 src idx-reg)
    1323                                   (! single->heap target 0))
     1329                                  (! single->node target 0))
    13241330                                 (t (with-imm-temps
    13251331                                        (idx-reg) (temp)
     
    14011407          (! trap-unless-typecode= src safe))
    14021408        (unless index-known-fixnum
    1403           (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1409          (! trap-unless-fixnum unscaled-idx))
    14041410        (! check-misc-bound unscaled-idx src))
    14051411      (if (and index-known-fixnum (<= index-known-fixnum ppc32::max-64-bit-constant-index))
     
    14451451                    (ash 1 $arh_simple_bit))))
    14461452          (unless i-known-fixnum
    1447             (! trap-unless-tag= unscaled-i ppc32::tag-fixnum))
     1453            (! trap-unless-fixnum unscaled-i))
    14481454          (unless j-known-fixnum
    1449             (! trap-unless-tag= unscaled-j ppc32::tag-fixnum)))
     1455            (! trap-unless-fixnum unscaled-j)))
    14501456        (with-imm-temps () (dim1 idx-reg)
    14511457          (unless constidx
     
    15131519                  (ash 1 $arh_simple_bit))))
    15141520        (unless i-known-fixnum
    1515           (! trap-unless-tag= unscaled-i ppc32::tag-fixnum))
     1521          (! trap-unless-fixnum unscaled-i))
    15161522        (unless j-known-fixnum
    1517           (! trap-unless-tag= unscaled-j ppc32::tag-fixnum)))
     1523          (! trap-unless-fixnum unscaled-j)))
    15181524      (with-imm-temps () (dim1 idx-reg)
    15191525        (unless constidx
     
    15661572          (! trap-unless-typecode= src safe))
    15671573        (unless index-known-fixnum
    1568           (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1574          (! trap-unless-fixnum unscaled-idx))
    15691575        (! check-misc-bound unscaled-idx src))
    15701576      (if (and index-known-fixnum (<= index-known-fixnum ppc32::max-32-bit-constant-index))
     
    15911597          (! trap-unless-typecode= src safe))
    15921598        (unless index-known-fixnum
    1593           (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1599          (! trap-unless-fixnum unscaled-idx))
    15941600        (! check-misc-bound unscaled-idx src))
    15951601      (if (and index-known-fixnum (<= index-known-fixnum ppc32::max-32-bit-constant-index))
     
    16181624              (! trap-unless-typecode= src safe))
    16191625            (unless index-known-fixnum
    1620               (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1626              (! trap-unless-fixnum unscaled-idx))
    16211627            (! check-misc-bound unscaled-idx src)))
    16221628        (if (and index-known-fixnum
     
    17051711                    (! trap-unless-typecode= src safe))
    17061712                  (unless index-known-fixnum
    1707                     (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1713                    (! trap-unless-fixnum unscaled-idx))
    17081714                  (! check-misc-bound unscaled-idx src))
    17091715                (with-imm-temps () (temp)
     
    18541860              (! trap-unless-typecode= src safe))
    18551861            (unless index-known-fixnum
    1856               (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1862              (! trap-unless-fixnum unscaled-idx))
    18571863            (! check-misc-bound unscaled-idx src))
    18581864        (if (and index-known-fixnum
     
    18821888              (! trap-unless-typecode= src safe))
    18831889            (unless index-known-fixnum
    1884               (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     1890              (! trap-unless-fixnum unscaled-idx))
    18851891            (! check-misc-bound unscaled-idx src))
    18861892        (if (and index-known-fixnum
     
    29402946    (prog1
    29412947      (! vpush-register src)
    2942       (ppc2-new-vstack-lcell (or why :node) 4 (or attr 0) info)
    2943       (ppc2-adjust-vstack +4))))
     2948      (ppc2-new-vstack-lcell (or why :node) *ppc2-target-lcell-size* (or attr 0) info)
     2949      (ppc2-adjust-vstack *ppc2-target-node-size*))))
    29442950
    29452951(defun ppc2-vpush-register-arg (seg src)
     
    29522958      (! vpop-register dest)
    29532959      (setq *ppc2-top-vstack-lcell* (lcell-parent *ppc2-top-vstack-lcell*))
    2954       (ppc2-adjust-vstack -4))))
     2960      (ppc2-adjust-vstack (- *ppc2-target-node-size*)))))
    29552961
    29562962(defun ppc2-copy-register (seg dest src)
     
    31003106                        (! double->heap dest src))
    31013107                       (#.hard-reg-class-fpr-mode-single
    3102                         (! single->heap dest src)))))
     3108                        (! single->node dest src)))))
    31033109                  (if (and src-fpr dest-fpr)
    31043110                    (unless (eql dest-fpr src-fpr)
     
    33633369          (! svar-bind)))
    33643370      (ppc2-open-undo $undospecial)
    3365       (ppc2-new-vstack-lcell :special-value 4 0 sym)
    3366       (ppc2-new-vstack-lcell :special 4 (ash 1 $vbitspecial) sym)
    3367       (ppc2-new-vstack-lcell :special-link 4 0 sym)
    3368       (ppc2-adjust-vstack 12))))
     3371      (ppc2-new-vstack-lcell :special-value *ppc2-target-lcell-size* 0 sym)
     3372      (ppc2-new-vstack-lcell :special *ppc2-target-lcell-size* (ash 1 $vbitspecial) sym)
     3373      (ppc2-new-vstack-lcell :special-link *ppc2-target-lcell-size* 0 sym)
     3374      (ppc2-adjust-vstack (* 3 *ppc2-target-node-size*)))))
    33693375
    33703376; Store the contents of EA - which denotes either a vframe location
     
    38573863    (let* ((src (ppc2-one-untargeted-reg-form seg listform ppc::arg_z)))
    38583864      (when safe
    3859         (! trap-unless-tag= src ppc32::tag-list))
     3865        (! trap-unless-list src))
    38603866      (if vreg
    38613867        (ensuring-node-target (target vreg)
     
    38833889          (! trap-unless-typecode= src safe))
    38843890        (unless index-known-fixnum
    3885           (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     3891          (! trap-unless-fixnum unscaled-idx))
    38863892        (! check-misc-bound unscaled-idx src))
    38873893      (when vreg
     
    39123918          (! trap-unless-typecode= src safe))
    39133919        (unless index-known-fixnum
    3914           (! trap-unless-tag= unscaled-idx ppc32::tag-fixnum))
     3920          (! trap-unless-fixnum unscaled-idx))
    39153921        (! check-misc-bound unscaled-idx src))
    39163922      (if (and index-known-fixnum (<= index-known-fixnum ppc32::max-32-bit-constant-index))
     
    48054811                    (declare (fixnum flags nkeys nprev))
    48064812                    (dotimes (i (the fixnum (+ nkeys nkeys)))
    4807                       (ppc2-new-vstack-lcell :reserved 4 0 nil))
     4813                      (ppc2-new-vstack-lcell :reserved *ppc2-target-lcell-size* 0 nil))
    48084814                    (! misc-ref-c-node ppc::temp3 ppc::nfn (1+ (backend-immediate-index keyvect)))
    48094815                    (ppc2-lwi seg ppc::imm2 (ash flags ppc32::fixnumshift))
     
    48664872                      (! save-lisp-context-offset-ool nbytes-vpushed)))
    48674873                  (ppc2-set-vstack nbytes-vpushed)
    4868                   (setq optsupvloc (- *ppc2-vstack* (ash num-opt 2)))))))
     4874                  (setq optsupvloc (- *ppc2-vstack* (* num-opt *ppc2-target-node-size*)))))))
    48694875          ;; Caller's context is saved; *ppc2-vstack* is valid.  Might still have method-var
    48704876          ;; to worry about.
     
    52975303(defppc2 ppc2-uvsize uvsize (seg vreg xfer v)
    52985304  (let* ((misc-reg (ppc2-one-untargeted-reg-form seg v ppc::arg_z)))
    5299     (unless *ppc2-reckless* (! trap-unless-tag= misc-reg ppc32::tag-misc))
     5305    (unless *ppc2-reckless* (! trap-unless-uvector misc-reg))
    53005306    (if vreg
    53015307      (ensuring-node-target (target vreg)
     
    53215327(defppc2 ppc2-endp endp (seg vreg xfer cc form)
    53225328  (let* ((formreg (ppc2-one-untargeted-reg-form seg form ppc::arg_z)))
    5323     (! trap-unless-tag= formreg ppc32::tag-list)
     5329    (! trap-unless-list formreg)
    53245330    (multiple-value-bind (cr-bit true-p) (acode-condition-to-ppc-cr-bit cc)
    53255331      (ppc2-compare-register-to-nil seg vreg xfer formreg  cr-bit true-p))))
     
    58655871    (let* ((nreg (ppc2-one-untargeted-reg-form seg n ppc::arg_z)))
    58665872      (unless (acode-fixnum-form-p n)
    5867         (! trap-unless-tag= nreg ppc32::tag-fixnum))
     5873        (! trap-unless-fixnum nreg))
    58685874      (ppc2-vpush-register seg nreg))
    58695875     (ppc2-multiple-value-body seg form) ; sets nargs
     
    60586064             (multiple-value-bind (r1 r2) (ppc2-two-untargeted-reg-forms seg f0 r1 f1 r2)
    60596065               (if (= (hard-regspec-class vreg) hard-reg-class-fpr)
    6060                  (let* ((vreg-val (hard-regspec-value vreg)))
    6061                    (declare (fixnum vreg-val))
    6062                    (if (or (= vreg-val (hard-regspec-value r1))
    6063                            (= vreg-val (hard-regspec-value r2)))
    6064                      (with-fp-target (r1 r2) (result :double-float)
    6065                        (! ,vinsn result r1 r2)
    6066                        (<- result))
    6067                      (! ,vinsn vreg r1 r2)))
     6066                 (! ,vinsn vreg r1 r2)
    60686067                 (with-fp-target (r1 r2) (result :double-float)
    60696068                   (! ,vinsn result r1 r2)
     
    60826081             (multiple-value-bind (r1 r2) (ppc2-two-untargeted-reg-forms seg f0 r1 f1 r2)
    60836082               (if (= (hard-regspec-class vreg) hard-reg-class-fpr)
    6084                  (let* ((vreg-val (hard-regspec-value vreg)))
    6085                    (declare (fixnum vreg-val))
    6086                    (if (or (= vreg-val (hard-regspec-value r1))
    6087                            (= vreg-val (hard-regspec-value r2)))
    6088                      (with-fp-target (r1 r2) (result :single-float)
    6089                        (! ,vinsn result r1 r2)
    6090                        (<- result))
    6091                      (! ,vinsn vreg r1 r2)))
     6083                 (! ,vinsn vreg r1 r2)
    60926084                 (with-fp-target (r1 r2) (result :single-float)
    60936085                   (! ,vinsn result r1 r2)
     
    77807772                                              (old-stack (ppc2-encode-stack)))
    77817773  (ecase (backend-name *target-backend*)
    7782     (:linuxppc (! alloc-eabi-c-frame 0))
    7783     (:darwinppc (! alloc-c-frame 0)))
     7774    (:linuxppc32 (! alloc-eabi-c-frame 0))
     7775    (:darwinppc32 (! alloc-c-frame 0)))
    77847776    (ppc2-open-undo $undo-ppc-c-frame)
    77857777    (ppc2-undo-body seg vreg xfer body old-stack))
Note: See TracChangeset for help on using the changeset viewer.