Changeset 5765
- Timestamp:
- Jan 21, 2007, 5:15:23 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/compiler/X86/x862.lisp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/compiler/X86/x862.lisp
r5603 r5765 8396 8396 (ngpr-args 0) 8397 8397 (simple-foreign-args nil) 8398 (fp-loads ())) 8398 (fp-loads ()) 8399 (return-registers ())) 8399 8400 (declare (fixnum nshort-floats ndouble-floats nfpr-args ngpr-args narg-words 8400 8401 gpr-offset other-offset single-float-offset double-float-offset)) … … 8409 8410 (incf nsingle-floats) 8410 8411 (incf nother-words))) 8411 (t (incf ngpr-args) 8412 (if (> ngpr-args 6) 8413 (incf nother-words))))) 8412 (:registers (setq return-registers t)) 8413 (t 8414 (if (typep argspec 'unsigned-byte) 8415 (incf nother-words argspec) 8416 (progn 8417 (incf ngpr-args) 8418 (if (> ngpr-args 6) 8419 (incf nother-words))))))) 8414 8420 (let* ((total-words (+ nother-words nsingle-floats ndouble-floats))) 8415 8421 (when (null argspecs) … … 8435 8441 (absptr (acode-absolute-ptr-p valform))) 8436 8442 (case spec 8443 (:registers 8444 (x862-vpush-register seg (x862-one-untargeted-reg-form seg valform x8664::arg_z))) 8437 8445 (:double-float 8438 8446 (let* ((df ($ x8664::fp1 :class :fpr :mode :double-float))) … … 8471 8479 (incf other-offset))))) 8472 8480 (t 8473 (with-imm-target () (valreg :natural) 8474 (let* ((reg (x862-unboxed-integer-arg-to-reg seg valform valreg spec))) 8475 (incf ngpr-args) 8476 (cond ((<= ngpr-args 6) 8477 (! set-c-arg reg gpr-offset) 8478 (incf gpr-offset)) 8479 (t 8480 (! set-c-arg reg other-offset) 8481 (incf other-offset))))))))) 8481 (if (typep spec 'unsigned-byte) 8482 (progn 8483 (with-imm-target () (ptr :address) 8484 (x862-one-targeted-reg-form seg valform ptr) 8485 (with-imm-target (ptr) (r :natural) 8486 (dotimes (i spec) 8487 (! mem-ref-c-doubleword r ptr (ash i x8664::word-shift)) 8488 (! set-c-arg r other-offset) 8489 (incf other-offset))))) 8490 (with-imm-target () (valreg :natural) 8491 (let* ((reg (x862-unboxed-integer-arg-to-reg seg valform valreg spec))) 8492 (incf ngpr-args) 8493 (cond ((<= ngpr-args 6) 8494 (! set-c-arg reg gpr-offset) 8495 (incf gpr-offset)) 8496 (t 8497 (! set-c-arg reg other-offset) 8498 (incf other-offset)))))))))) 8482 8499 (do* ((fpreg x8664::fp0 (1+ fpreg)) 8483 8500 (reloads (nreverse fp-loads) (cdr reloads))) … … 8490 8507 (! reload-double-c-arg ($ fpreg :class :fpr :mode :double-float) from) 8491 8508 (! reload-single-c-arg ($ fpreg :class :fpr :mode :single-float) from)))) 8509 (if use-registers 8510 (x862-vpop-register seg ($ x8664::arg_y))) 8492 8511 (if simple-foreign-args 8493 8512 (x862-one-targeted-reg-form seg address x8664::arg_z) 8494 8513 (x862-vpop-register seg ($ x8664::arg_z))) 8495 8514 (x862-lri seg x8664::rax (min 8 nfpr-args)) 8496 (! ff-call) 8515 (if use-registers 8516 (! ff-call-returning-registers) 8517 (! ff-call) ) 8497 8518 (x862-close-undo) 8498 8519 (when vreg
Note:
See TracChangeset
for help on using the changeset viewer.
