Changeset 12308


Ignore:
Timestamp:
Jun 25, 2009, 10:31:15 PM (10 years ago)
Author:
gz
Message:

r12241 from trunk (fix in non-optimized ff-call)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711/ccl/level-0/X86/x86-def.lisp

    r11069 r12308  
    588588  (restore-simple-frame)
    589589  (single-value-return))
     590
     591(defx86lapfunction %do-ff-call-return-registers ((fp-regs 8)(nfp 0) (frame arg_x) (regbuf arg_y) (entry arg_z))
     592  (popq (% ra0))
     593  (popq (% rax))
     594  (popq (% temp0))
     595  (movq (% rbp) (@  (% rsp)))
     596  (movq (% rsp) (% rbp))
     597  (movq (% ra0) (@ 8 (% rbp)))
     598  (macptr-ptr temp0 temp0)
     599  (sarq ($ x8664::fixnumshift) (% rax))
     600  (movq (@ (% temp0)) (% fp0))
     601  (movq (@ 8 (% temp0)) (% fp1))
     602  (movq (@ 16 (% temp0)) (% fp2))
     603  (movq (@ 24 (% temp0)) (% fp3))
     604  (movq (@ 32 (% temp0)) (% fp4))
     605  (movq (@ 40 (% temp0)) (% fp5))
     606  (movq (@ 48 (% temp0)) (% fp6))
     607  (movq (@ 56 (% temp0)) (% fp7))
     608  (call-subprim .SPffcall-return-registers)
     609  (movq (:rcontext x8664::tcr.foreign-sp) (% mm5))
     610  (movq (% mm5) (@ (% frame)))
     611  (movq (% frame) (:rcontext x8664::tcr.foreign-sp))
     612  (movl ($ nil) (%l arg_z))
     613  (restore-simple-frame)
     614  (single-value-return))
    590615 
    591616
     
    593618  (declare (dynamic-extent specs-and-vals))
    594619  (let* ((len (length specs-and-vals))
    595          (total-words 0))
     620         (total-words 0)
     621         (regbuf nil))
    596622    (declare (fixnum len total-words))
    597623    (let* ((result-spec (or (car (last specs-and-vals)) :void))
     
    618644                        :signed-byte :unsigned-byte)
    619645              (incf total-words))
     646             (:registers )
    620647             (t (if (typep spec 'unsigned-byte)
    621648                  (incf total-words spec)
     
    680707                               (setf (%get-single-float argptr other-offset) val)
    681708                               (incf other-offset 8))))
     709                       (:registers (setq regbuf val))
    682710                       (t
    683711                        (let* ((p 0))
     
    687715                            (incf p 8)
    688716                            (incf other-offset 8)))))))
    689                  (%do-ff-call (min n-fp-args 8) frame fp-args entry)
     717                 (if regbuf
     718                   (%do-ff-call-return-registers fp-args (min n-fp-args 8) frame regbuf entry)
     719                   (%do-ff-call (min n-fp-args 8) frame fp-args entry))
    690720                 (ecase result-spec
    691721                   (:void nil)
Note: See TracChangeset for help on using the changeset viewer.