Changeset 7216


Ignore:
Timestamp:
Sep 14, 2007, 9:42:29 PM (13 years ago)
Author:
rme
Message:

x8664::imm0 -> *x862-imm0*
Bind *x86-lap-lap-entry-offset* in x862-compile.
Other changes for IA-32.

File:
1 edited

Legend:

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

    r7215 r7216  
    178178(defvar *x862-arg-z* nil)
    179179(defvar *x862-arg-y* nil)
     180(defvar *x862-imm0* nil)
    180181(defvar *x862-temp0* nil)
    181182(defvar *x862-fname* nil)
     
    298299            (x862-copy-register seg ea valreg))
    299300          ((addrspec-vcell-p ea)     ; closed-over vcell
    300            (x862-copy-register seg x8664::arg_z valreg)
     301           (x862-copy-register seg *x862-arg-z* valreg)
    301302           (x862-stack-to-register seg ea x8664::arg_x)
    302303           (x862-lri seg *x862-arg-y* 0)
    303            (! call-subprim-3 x8664::arg_z (subprim-name->offset '.SPgvset) x8664::arg_x *x862-arg-y* x8664::arg_z))
     304           (! call-subprim-3 *x862-arg-z* (subprim-name->offset '.SPgvset) x8664::arg_x *x862-arg-y* *x862-arg-z*))
    304305          ((memory-spec-p ea)    ; vstack slot
    305306           (x862-register-to-stack seg valreg ea))
     
    318319                      (the fixnum (nx-var-bits var))))
    319320      (let* ((ea (var-ea var))
    320              (arg ($ x8664::arg_z))
    321              (result ($ x8664::arg_z)))
     321             (arg ($ *x862-arg-z*))
     322             (result ($ *x862-arg-z*)))
    322323        (x862-do-lexical-reference seg arg ea)
    323324        (x862-set-nargs seg 1)
     
    455456           (*x862-vstack* 0)
    456457           (*x862-cstack* 0)
     458           (*x86-lap-entry-offset* (target-arch-case
     459                                    (:x8632 x8632::fulltag-misc)
     460                                    (:x8664 x8664::fulltag-function)))
    457461           (*x862-result-reg* (target-arch-case
    458462                               (:x8632 x8632::arg_z)
    459463                               (:x8664 x8664::arg_z)))
     464           (*x862-imm0* (target-arch-case (:x8632 x8632::imm0)
     465                                          (:x8664 x8664::imm0)))
    460466           (*x862-arg-z* (target-arch-case (:x8632 x8632::arg_z)
    461467                                           (:x8664 x8664::arg_z)))
     
    572578                        debug-info)
    573579                   (make-x86-lap-label end-code-tag)
    574                    ;; xxx conditionalize for 32 bit here
    575580                   (target-arch-case
    576581                    (:x8664
     
    582587                    (:x8632
    583588                     (make-x86-lap-label srt-tag)
    584                      ;; room for imm word count
    585                      (x86-lap-directive frag-list :short 0)))
     589                     ;; count of 32-bit words between header and
     590                     ;; function boundary marker, inclusive.
     591                     (x86-lap-directive frag-list :short `(ash (+ (:^ ,end-code-tag)
     592                                                                  *x86-lap-entry-offset*) -2))))
    586593                   (x862-expand-vinsns vinsns frag-list instruction)
    587594                   (when (or *x862-double-float-constant-alist*
     
    617624                   
    618625                   (emit-x86-lap-label frag-list end-code-tag)
    619 
     626                   
    620627                   (dolist (c (reverse *x862-constant-alist*))
    621628                     (let* ((vinsn-label (cdr c)))
     
    675682                      (:x8632
    676683                       (let* ((label (find srt-tag *x86-lap-labels* :test #'eq :key #'x86-lap-label-name))
    677                               (start-frag (dll-header-first frag-list))
    678                               (nbytes (frag-list-length frag-list))
    679                               (nwords (ash nbytes (- x8632::word-shift)))
    680684                              (srt-frag (x86-lap-label-frag label))
    681685                              (srt-index (x86-lap-label-offset label)))
     
    686690                               (setf (frag-ref-32 srt-frag srt-index)
    687691                                     (+ (frag-address frag) (reloc-pos reloc)))
    688                                (incf srt-index 4))))
    689                          ;; count of 32-bit immediate elements
    690                          (setf (frag-ref start-frag 0) (logand #xff nwords)
    691                                (frag-ref start-frag 1) (logand #xff00 nwords)))
     692                               (incf srt-index 4)))))
    692693                       (show-frag-bytes frag-list)))
    693 
     694                 
    694695                     (x862-lap-process-regsave-info frag-list regsave-label regsave-mask regsave-addr)
    695696                     (setf (afunc-lfun afunc)
     
    12831284    (if (eq vreg :push)
    12841285      (progn
    1285         (! vpush-fixnum x8664::nil-value)
     1286        (! vpush-fixnum (target-arch-case
     1287                         (:x8632 x8632::nil-value)
     1288                         (:x8664 x8664::nil-value)))
    12861289        (^))
    12871290      (progn
     
    12951298    (if (eq vreg :push)
    12961299      (progn
    1297         (! vpush-fixnum x8664::t-value)
     1300        (! vpush-fixnum (target-arch-case
     1301                         (:x8632 x8632::t-value)
     1302                         (:x8664 x8664::t-value)))
    12981303        (^))
    12991304      (progn
     
    13831388  (with-x86-local-vinsn-macros (seg)
    13841389    (if (typep form 'character)
    1385       (! vpush-fixnum (logior (ash (char-code form) 8) x8664::subtag-character))
     1390      (! vpush-fixnum (logior (ash (char-code form) 8)
     1391                              (arch::target-subtag-char (backend-target-arch *target-backend*))))
    13861392      (let* ((reg (x862-register-constant-p form)))
    13871393        (if reg
     
    14801486      (! box-fixnum node-dest s32-src)
    14811487      (let* ((arg_z ($ *x862-arg-z*))
    1482              (imm0 ($ x8664::imm0 :mode :s32)))
     1488             (imm0 ($ *x862-imm0* :mode :s32)))
    14831489        (x862-copy-register seg imm0 s32-src)
    14841490        (! call-subprim (subprim-name->offset '.SPmakes32))
     
    14961502        (! set-bigits-after-fixnum-overflow node-dest)
    14971503        (@ no-overflow))
    1498       (let* ((arg_z ($ x8664::arg_z))
    1499              (imm0 (make-wired-lreg x8664::imm0 :mode (get-regspec-mode s64-src))))
     1504      (let* ((arg_z ($ *x862-arg-z*))
     1505             (imm0 (make-wired-lreg *x862-imm0* :mode (get-regspec-mode s64-src))))
    15001506        (x862-copy-register seg imm0 s64-src)
    15011507        (! call-subprim (subprim-name->offset '.SPmakes64))
     
    15091515      (! box-fixnum node-dest u32-src)
    15101516      (let* ((arg_z ($ *x862-arg-z*))
    1511              (imm0 ($ x8664::imm0 :mode :u32)))
     1517             (imm0 ($ *x862-imm0* :mode :u32)))
    15121518        (x862-copy-register seg imm0 u32-src)
    15131519        (! call-subprim (subprim-name->offset '.SPmakeu32))
     
    15271533        (@ no-overflow))
    15281534      (let* ((arg_z ($ *x862-arg-z*))
    1529              (imm0 ($ x8664::imm0 :mode :u64)))
     1535             (imm0 ($ *x862-imm0* :mode :u64)))
    15301536        (x862-copy-register seg imm0 u64-src)
    15311537        (! call-subprim (subprim-name->offset '.SPmakeu64))
     
    27392745            (progn
    27402746              (x862-lri seg
    2741                         x8664::imm0
     2747                        *x862-imm0*
    27422748                        (arch::make-vheader vsize (nx-lookup-target-uvector-subtag :function)))
    27432749              (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ vsize 2) 1) (arch::target-word-shift arch)) (target-arch-case  (:x8664 x8664::fulltag-misc))))
     
    28852891            immreg)
    28862892          (progn
    2887             (x862-one-targeted-reg-form seg form (make-wired-lreg x8664::imm0 :mode modeval))))))))
     2893            (x862-one-targeted-reg-form seg form (make-wired-lreg *x862-imm0* :mode modeval))))))))
    28882894
    28892895
     
    29802986             (if (= mode hard-reg-class-gpr-mode-node)
    29812987               ($ *x862-arg-z*)
    2982                (make-wired-lreg x8664::imm0 :mode mode)))
     2988               (make-wired-lreg *x862-imm0* :mode mode)))
    29832989            (t (error "Unknown register class for reg ~s" reg))))))
    29842990
     
    41974203                   (progn
    41984204                       (if intval
    4199                          (x862-lri seg x8664::imm0 intval)
    4200                          (! deref-macptr x8664::imm0 *x862-arg-z*))
    4201                        (values x8664::imm0 *x862-arg-z*)))
    4202                  (values (x862-macptr-arg-to-reg seg val ($ x8664::imm0 :mode :address)) nil))))
     4205                         (x862-lri seg *x862-imm0* intval)
     4206                         (! deref-macptr *x862-imm0* *x862-arg-z*))
     4207                       (values *x862-imm0* *x862-arg-z*)))
     4208                 (values (x862-macptr-arg-to-reg seg val ($ *x862-imm0* :mode :address)) nil))))
    42034209        (unless (typep offval '(signed-byte 32))
    42044210          (setq offval nil))
     
    42764282                     (! gets64)
    42774283                     (! getu64))
    4278                    (! fixnum->signed-natural x8664::imm0 *x862-arg-z*))))
     4284                   (! fixnum->signed-natural *x862-imm0* *x862-arg-z*))))
    42794285
    42804286          (and offval (%i> (integer-length offval) 31) (setq offval nil))
     
    43164322                                       (x862-one-untargeted-reg-form seg ptr ptr-reg)))
    43174323                 (val-to-argz-and-imm0)
    4318                  (with-imm-target (x8664::imm0) (ptr-reg :address)
     4324                 (with-imm-target (*x862-imm0*) (ptr-reg :address)
    43194325                   (x862-pop-register seg ptr-reg)
    43204326                   (case size
    4321                      (8 (! mem-set-c-doubleword x8664::imm0 ptr-reg offval))
    4322                      (4 (! mem-set-c-fullword x8664::imm0 ptr-reg offval))
    4323                      (2 (! mem-set-c-halfword x8664::imm0 ptr-reg offval))
    4324                      (1 (! mem-set-c-byte x8664::imm0 ptr-reg offval))))
     4327                     (8 (! mem-set-c-doubleword *x862-imm0* ptr-reg offval))
     4328                     (4 (! mem-set-c-fullword *x862-imm0* ptr-reg offval))
     4329                     (2 (! mem-set-c-halfword *x862-imm0* ptr-reg offval))
     4330                     (1 (! mem-set-c-byte *x862-imm0* ptr-reg offval))))
    43254331                 (if for-value
    43264332                   (<- *x862-arg-z*)))
     
    43334339                     (x862-push-register seg ptr-reg)))
    43344340                 (val-to-argz-and-imm0)
    4335                  (with-imm-target (x8664::imm0) (ptr-reg :address)
     4341                 (with-imm-target (*x862-imm0*) (ptr-reg :address)
    43364342                   (x862-pop-register seg ptr-reg)
    43374343                   (case size
    4338                      (8 (! mem-set-c-doubleword x8664::imm0 ptr-reg 0))
    4339                      (4 (! mem-set-c-fullword x8664::imm0 ptr-reg 0))
    4340                      (2 (! mem-set-c-halfword x8664::imm0 ptr-reg 0))
    4341                      (1 (! mem-set-c-byte x8664::imm0 ptr-reg 0))))
     4344                     (8 (! mem-set-c-doubleword *x862-imm0* ptr-reg 0))
     4345                     (4 (! mem-set-c-fullword *x862-imm0* ptr-reg 0))
     4346                     (2 (! mem-set-c-halfword *x862-imm0* ptr-reg 0))
     4347                     (1 (! mem-set-c-byte *x862-imm0* ptr-reg 0))))
    43424348                 (if for-value
    43434349                   (< *x862-arg-z*))))
     
    45194525        (cond ((or *x862-open-code-inline* (> nntriv 3))
    45204526               (x862-formlist seg initforms nil)
    4521                (x862-lri seg x8664::imm0 header)
     4527               (x862-lri seg *x862-imm0* header)
    45224528               (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) (target-arch-case  (:x8664 x8664::fulltag-misc))))
    45234529               (! %allocate-uvector vreg)
     
    45344540                       (push nil pending)
    45354541                       (x862-vpush-register seg (x862-one-untargeted-reg-form seg form *x862-arg-z*)))))
    4536                  (x862-lri seg x8664::imm0 header)
     4542                 (x862-lri seg *x862-imm0* header)
    45374543                 (x862-lri seg x8664::imm1 (- (ash (logandc2 (+ n 2) 1) (arch::target-word-shift arch)) (target-arch-case  (:x8664 x8664::fulltag-misc))))
    45384544                 (ensuring-node-target (target vreg)
     
    47664772              (dotimes (i numundo) (x862-close-undo)))
    47674773            (progn
    4768               ;; There are some cases where storing thru x8664::arg_z
     4774              ;; There are some cases where storing thru *x862-arg-z*
    47694775              ;; can be avoided (stores to vlocs, specials, etc.) and
    47704776              ;; some other case where it can't ($test, $vpush.)  The
     
    50175023                     (let* ((tag-label (backend-get-next-label))
    50185024                            (tag-label-value (aref *backend-labels* tag-label)))
    5019                        (x862-lri seg x8664::imm0 (ash numnthrow *x862-target-fixnum-shift*))
     5025                       (x862-lri seg *x862-imm0* (ash numnthrow *x862-target-fixnum-shift*))
    50205026                       (if retval
    50215027                         (! nthrowvalues tag-label-value)
     
    50575063                  (if retval
    50585064                    (progn
    5059                       (x862-lri seg x8664::imm0 vdiff)
     5065                      (x862-lri seg *x862-imm0* vdiff)
    50605066                      (! slide-values))
    50615067                    (! adjust-vsp vdiff)))))
     
    54935499      (if idx-subprim
    54945500        (setq subprim idx-subprim)
    5495         (if index (! lri ($ x8664::imm0) (ash index *x862-target-fixnum-shift*))))
     5501        (if index (! lri ($ *x862-imm0*) (ash index *x862-target-fixnum-shift*))))
    54965502      (if tail-p
    54975503        (! jump-subprim subprim)
     
    56205626                    (x862-lri seg x8664::temp1 (ash flags *x862-target-fixnum-shift*))
    56215627                    (unless (= nprev 0)
    5622                       (x862-lri seg x8664::imm0 (ash nprev *x862-target-fixnum-shift*)))
     5628                      (x862-lri seg *x862-imm0* (ash nprev *x862-target-fixnum-shift*)))
    56235629                    (x86-immediate-label keyvect)
    56245630                    (if (= 0 nprev)
     
    56415647                        (declare (fixnum nprev))
    56425648                        (unless simple
    5643                           (x862-lri seg x8664::imm0 (ash nprev *x862-target-fixnum-shift*)))
     5649                          (x862-lri seg *x862-imm0* (ash nprev *x862-target-fixnum-shift*)))
    56445650                        (if stack-consed-rest
    56455651                          (if simple
     
    56575663                (when hardopt
    56585664                  (x862-reserve-vstack-lcells num-opt)
    5659                   (x862-lri seg x8664::imm0 (ash num-opt *x862-target-fixnum-shift*))
     5665                  (x862-lri seg *x862-imm0* (ash num-opt *x862-target-fixnum-shift*))
    56605666
    56615667                  ;; ! opt-supplied-p wants nargs to contain the
     
    57085714            (do* ((vars arg-regs (cdr vars))
    57095715                  (arg-reg-numbers (target-arch-case
    5710                                     (:x8664 (list x8664::arg_z *x862-arg-y* x8664::arg_x))))
     5716                                    (:x8664 (list *x862-arg-z* *x862-arg-y* x8664::arg_x))))
    57115717                  (arg-reg-num (pop arg-reg-numbers) (pop arg-reg-numbers)))
    57125718                 ((null vars))
     
    58445850  (if (null vreg)
    58455851    (x862-form seg vreg xfer form)
    5846     (let* ((tagreg x8664::imm0))
     5852    (let* ((tagreg *x862-imm0*))
    58475853      (multiple-value-bind (cr-bit true-p) (acode-condition-to-x86-cr-bit cc)
    58485854        (! extract-fulltag tagreg (x862-one-untargeted-reg-form seg form *x862-arg-z*))
     
    61346140      (x862-form seg nil xfer form2))
    61356141    (let* ((const (acode-fixnum-form-p form1))
    6136            (max (target-arch-case (:x8664 63))))
     6142           (max (target-arch-case (:x8632 31) (:x8664 63))))
    61376143      (ensuring-node-target (target vreg)
    61386144        (if const
     
    62606266        (if (zerop fixval)
    62616267          (! compare-reg-to-zero ($ *x862-arg-y*))
    6262           (! compare-s32-constant ($ *x862-arg-y*) (ash fixval x8664::fixnumshift)))
     6268          (! compare-s32-constant ($ *x862-arg-y*) (ash fixval *x862-target-fixnum-shift*)))
    62636269        (! compare ($ *x862-arg-y*) ($ *x862-arg-z*)))
    62646270      (multiple-value-bind (cr-bit true-p) (acode-condition-to-x86-cr-bit cc)
     
    62726278        (@ out-of-line)
    62736279        (when otherform
    6274           (x862-lri seg ($ *x862-arg-z*) (ash fixval x8664::fixnumshift))
     6280          (x862-lri seg ($ *x862-arg-z*) (ash fixval *x862-target-fixnum-shift*))
    62756281          (unless (or fix2 (eq cr-bit x86::x86-e-bits))
    62766282            (! xchg-registers ($ *x862-arg-z*) ($ *x862-arg-y*))))
     
    64616467      (x862-restore-full-lisp-context seg))
    64626468    (unless idx-subprim
    6463       (! lri x8664::imm0 (ash idx *x862-target-fixnum-shift*))
     6469      (! lri *x862-imm0* (ash idx *x862-target-fixnum-shift*))
    64646470      (when (eql subprim (subprim-name->offset '.SPcallbuiltin))
    64656471        (x862-set-nargs seg nargs)))
     
    70807086  (with-x86-local-vinsn-macros (seg vreg xfer)
    70817087    (multiple-value-bind (cr-bit true-p) (acode-condition-to-x86-cr-bit cc)
    7082       (! mask-base-char x8664::imm0 (x862-one-untargeted-reg-form seg form *x862-arg-z*))
    7083       (x862-test-reg-%izerop seg vreg xfer x8664::imm0 cr-bit true-p
     7088      (! mask-base-char *x862-imm0* (x862-one-untargeted-reg-form seg form *x862-arg-z*))
     7089      (x862-test-reg-%izerop seg vreg xfer *x862-imm0* cr-bit true-p
    70847090                             (target-arch-case
    70857091                             
     
    71807186                    (+ nbytes *x862-target-node-size*
    71817187                       (1- *x862-target-dnode-size*))) #x8000))
    7182         (let* ((header x8664::imm0)
     7188        (let* ((header *x862-imm0*)
    71837189               (physsize x8664::imm1))
    71847190          (x862-lri seg header (arch::make-vheader nelements subtag))
     
    74527458             (! mem-ref-c-absolute-natural dest absptr)
    74537459             (if offval
    7454                (let* ((src (x862-macptr-arg-to-reg seg ptr ($ x8664::imm0 :mode :address))))
     7460               (let* ((src (x862-macptr-arg-to-reg seg ptr ($ *x862-imm0* :mode :address))))
    74557461                 (! mem-ref-c-natural dest src offval))
    7456                (let* ((src (x862-macptr-arg-to-reg seg ptr ($ x8664::imm0 :mode :address))))
     7462               (let* ((src (x862-macptr-arg-to-reg seg ptr ($ *x862-imm0* :mode :address))))
    74577463                 (if triv-p
    74587464                   (with-imm-temps (src) (x)
     
    78627868    (x862-one-targeted-reg-form seg form ($ *x862-arg-z*))
    78637869    (! integer-sign)
    7864     (x862-test-reg-%izerop seg vreg xfer x8664::imm0 cr-bit true-p 0)))
     7870    (x862-test-reg-%izerop seg vreg xfer *x862-imm0* cr-bit true-p 0)))
    78657871
    78667872
     
    78967902      (x862-multiple-value-body seg valform) 
    78977903      (x862-one-targeted-reg-form seg valform ($ *x862-arg-z*)))
    7898     (x862-lri seg x8664::imm0 (ash 1 *x862-target-fixnum-shift*))
     7904    (x862-lri seg *x862-imm0* (ash 1 *x862-target-fixnum-shift*))
    78997905    (if mv-pass
    79007906      (! nthrowvalues tag-label-value)
     
    85638569              (t
    85648570               (case resultspec
    8565                  (:signed-byte (! sign-extend-s8 x8664::imm0 x8664::imm0))
    8566                  (:signed-halfword (! sign-extend-s16 x8664::imm0 x8664::imm0))
    8567                  (:signed-fullword (! sign-extend-s32 x8664::imm0 x8664::imm0))
    8568                  (:unsigned-byte (! zero-extend-u8 x8664::imm0 x8664::imm0))
    8569                  (:unsigned-halfword (! zero-extend-u16 x8664::imm0 x8664::imm0))
    8570                  (:unsigned-fullword (! zero-extend-u32 x8664::imm0 x8664::imm0)))               
    8571                (<- (make-wired-lreg x8664::imm0
     8571                 (:signed-byte (! sign-extend-s8 *x862-imm0* *x862-imm0*))
     8572                 (:signed-halfword (! sign-extend-s16 *x862-imm0* *x862-imm0*))
     8573                 (:signed-fullword (! sign-extend-s32 *x862-imm0* *x862-imm0*))
     8574                 (:unsigned-byte (! zero-extend-u8 *x862-imm0* *x862-imm0*))
     8575                 (:unsigned-halfword (! zero-extend-u16 *x862-imm0* *x862-imm0*))
     8576                 (:unsigned-fullword (! zero-extend-u32 *x862-imm0* *x862-imm0*)))               
     8577               (<- (make-wired-lreg *x862-imm0*
    85728578                                    :mode
    85738579                                    (gpr-mode-name-value
     
    87418747              (t
    87428748               (case resultspec
    8743                  (:signed-byte (! sign-extend-s8 x8664::imm0 x8664::imm0))
    8744                  (:signed-halfword (! sign-extend-s16 x8664::imm0 x8664::imm0))
    8745                  (:signed-fullword (! sign-extend-s32 x8664::imm0 x8664::imm0))
    8746                  (:unsigned-byte (! zero-extend-u8 x8664::imm0 x8664::imm0))
    8747                  (:unsigned-halfword (! zero-extend-u16 x8664::imm0 x8664::imm0))
    8748                  (:unsigned-fullword (! zero-extend-u32 x8664::imm0 x8664::imm0)))
    8749                (<- (make-wired-lreg x8664::imm0
     8749                 (:signed-byte (! sign-extend-s8 *x862-imm0* *x862-imm0*))
     8750                 (:signed-halfword (! sign-extend-s16 *x862-imm0* *x862-imm0*))
     8751                 (:signed-fullword (! sign-extend-s32 *x862-imm0* *x862-imm0*))
     8752                 (:unsigned-byte (! zero-extend-u8 *x862-imm0* *x862-imm0*))
     8753                 (:unsigned-halfword (! zero-extend-u16 *x862-imm0* *x862-imm0*))
     8754                 (:unsigned-fullword (! zero-extend-u32 *x862-imm0* *x862-imm0*)))
     8755               (<- (make-wired-lreg *x862-imm0*
    87508756                                    :mode
    87518757                                    (gpr-mode-name-value
Note: See TracChangeset for help on using the changeset viewer.