Changeset 9264


Ignore:
Timestamp:
Apr 24, 2008, 7:30:39 PM (11 years ago)
Author:
rme
Message:

x862-vref1: don't need add'l imm reg in 16-bit case (at least)

x862-invoke-fn: save temp0 in spill area around spread-lexpr/spread-list

x862-lambda-list: use arg_y for keyvect reg on x8632

x862-i386-syscall: eliminate simple-foreign-args; always vpush/vpop arg_z
around the code that evaluates argspecs into the C frame.

File:
1 edited

Legend:

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

    r9043 r9264  
    17311731                   (! misc-ref-c-s16 temp src index-known-fixnum)
    17321732                   (! misc-ref-c-u16 temp src index-known-fixnum))
    1733                  (with-additional-imm-reg ()
    1734                    (with-imm-target () idx-reg
    1735                      (if index-known-fixnum
    1736                        (x862-absolute-natural seg idx-reg nil (+ (arch::target-misc-data-offset arch) (ash index-known-fixnum 1)))
    1737                        (! scale-16bit-misc-index idx-reg unscaled-idx))
    1738                      (if is-signed
    1739                        (! misc-ref-s16 temp src idx-reg)
    1740                        (! misc-ref-u16 temp src idx-reg)))))
     1733                 (with-imm-target () idx-reg
     1734                   (if index-known-fixnum
     1735                     (x862-absolute-natural seg idx-reg nil (+ (arch::target-misc-data-offset arch) (ash index-known-fixnum 1)))
     1736                     (! scale-16bit-misc-index idx-reg unscaled-idx))
     1737                   (if is-signed
     1738                     (! misc-ref-s16 temp src idx-reg)
     1739                     (! misc-ref-u16 temp src idx-reg))))
    17411740               (! box-fixnum target temp))))
    17421741          ;; Down to the dregs.
     
    27072706          (x862-set-nargs seg (%i- nargs 1))
    27082707                                        ; .SPspread-lexpr-z & .SPspreadargz preserve temp1
     2708          (target-arch-case
     2709           (:x8632
     2710            (! save-node-register-to-spill-area *x862-temp0*)))
    27092711          (if (eq spread-p 0)
    2710             (! spread-lexpr)
     2712            (! spread-lexpr)
    27112713            (! spread-list))
     2714          (target-arch-case
     2715           (:x8632
     2716            (! load-node-register-from-spill-area *x862-temp0*)))
     2717
    27122718          (when (and tail-p *x862-register-restore-count*)
    27132719            (x862-restore-nvrs seg *x862-register-restore-ea* *x862-register-restore-count* nil)))
     
    54725478           (old-top *x862-top-vstack-lcell*)
    54735479           (argreg ($ *x862-temp0*))
    5474            (keyvectreg ($ x8664::arg_x))
     5480           (keyvectreg (target-arch-case
     5481                        (:x8632 ($ x8632::arg_y))
     5482                        (:x8664 ($ x8664::arg_x))))
    54755483           (doadlword (dpb nkeys (byte 8 16) (dpb numopt (byte 8 8) (dpb numreq (byte 8 0) 0 )))))
    54765484      (declare (fixnum numopt nkeys numreq vtotal doadlword))
    5477       (target-arch-case (:x8632 (error "x862-spread-lambda-list: fix me")))
    54785485      (when (or (> numreq 255) (> numopt 255) (> nkeys 255))
    54795486        (error "A lambda list can contain a maximum of 255 required, 255 optional, and 255 keywords args"))
     
    89728979         (*x862-cstack* *x862-cstack*)
    89738980         (offset 0)
    8974          (simple-foreign-args nil)
    89758981         (nwords 0))
    89768982    (dolist (argspec argspecs)
     
    89798985         (incf nwords 2))
    89808986        (t (incf nwords))))
    8981     (when (null argspecs)
    8982       (setq simple-foreign-args t))
    89838987    (! alloc-c-frame nwords)
    89848988    (x862-open-undo $undo-x86-c-frame)
    8985     (unless simple-foreign-args
    8986       (x862-vpush-register seg (x862-one-untargeted-reg-form seg idx x8632::arg_z)))
     8989    (x862-vpush-register seg (x862-one-untargeted-reg-form seg idx x8632::arg_z))
    89878990    ;; Evaluate each form into the C frame, according to the
    89888991    ;; matching argspec.
     
    90149017               (! set-c-arg reg offset)
    90159018               (incf offset)))))))
    9016     (unless simple-foreign-args
    9017       (x862-vpop-register seg ($ x8632::arg_z)))
     9019    (x862-vpop-register seg ($ x8632::arg_z))
    90189020    (case resultspec
    90199021      ((:unsigned-doubleword :signed-doubleword)
Note: See TracChangeset for help on using the changeset viewer.