Changeset 5811


Ignore:
Timestamp:
Jan 29, 2007, 3:37:35 AM (18 years ago)
Author:
Gary Byers
Message:

Flesh out darwinppc32 callback stuff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/lib/ffi-darwinppc32.lisp

    r5805 r5811  
    2121(defun darwin32::record-type-has-single-scalar-field (record-type)
    2222  (when (eq (foreign-record-type-kind record-type) :struct)
    23     (ensure-foreign-type-bits record-type)
     23    (require-foreign-type-bits record-type)
    2424    (let* ((fields (foreign-record-type-fields record-type)))
    2525      (when (null (cdr fields))
     
    203203                     ,(if use-fp-args fp-args-ptr stack-ptr)
    204204                     ,(if use-fp-args (* 8 (1- fp-arg-num))
    205                           `(+ ,offset ,bias)))))                   
     205                          (+ offset bias)))))                   
    206206          (let* ((name (car argvars))
    207207                 (spec (car argspecs))
     
    212212                  (progn
    213213                    (rlets (list name (foreign-record-type-name argtype)))
    214                     (inits `(setf ,(%foreign-access-form name rtype 0 (foreign-record-field-name (car (foreign-record-type-fields argtype))))
    215                              (next-scalar-arg type0))))
    216                   (lets (list name (next-scalar-arg argtype)))))
     214                    (inits `(setf ,(%foreign-access-form name type0 0 nil)
     215                             ,(next-scalar-arg type0))))
     216                  (progn (setq delta (* (ceiling (foreign-record-type-bits argtype) 32) 4))
     217                    (lets (list name `(%inc-ptr ,stack-ptr ,offset ))))))
    217218              (lets (list name (next-scalar-arg argtype))))
    218219            (when (or (typep argtype 'foreign-pointer-type)
     
    228229      (let* ((field0 (car (foreign-record-type-fields return-type))))
    229230        (setq result (%foreign-access-form struct-return-arg
    230                                            return-type
     231                                           (foreign-record-field-type field0)
    231232                                           0
    232                                            (foreign-record-field-name field0))
     233                                           nil)
    233234              return-type (foreign-record-field-type field0))))
    234235    (let* ((return-type-keyword (foreign-type-to-representation-type return-type))
     
    243244                                 (:unsigned-doubleword '%%get-unsigned-longlong)
    244245                                 ((:double-float :single-float)
    245                                   (setq stack-ptr `(%get-ptr ,stack-ptr ,(- ppc64::c-frame.unused-1 ppc64::c-frame.param0)))
    246246                                  '%get-double-float)
    247247                                 (:unsigned-fullword '^get-unsigned-long)
Note: See TracChangeset for help on using the changeset viewer.