Changeset 5907


Ignore:
Timestamp:
Feb 13, 2007, 4:33:19 PM (18 years ago)
Author:
Gary Byers
Message:

Callback arguments: update offset/delta for each scalar, not each arg.

Fix some backquoting/indentation.

File:
1 edited

Legend:

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

    r5881 r5907  
    159159                                                  field-accessor-list)
    160160                                           ,valform)))))))
    161                    (do-fields (foreign-record-type-fields rtype) nil ))
    162                  `(progn ,@(forms) nil))))))))
     161                   (do-fields (foreign-record-type-fields rtype) nil ))))))
     162      `(progn ,@(forms) nil))))
    163163
    164164;;; "Return" the structure R of foreign type RTYPE, by storing the
     
    244244                                      (setq field-form `(float ,field-form 0.0d0)))
    245245                                    (forms `(setf ,valform ,field-form))))))))
    246                    (do-fields (foreign-record-type-fields rtype) nil ))
    247                  `(progn ,@(forms) nil))))))))
     246                   (do-fields (foreign-record-type-fields rtype) nil ))))))
     247      `(progn ,@(forms) nil))))
    248248                                 
    249249
     
    334334                  (%stack-block ((,regbuf (+ (* 8 8) (* 8 13))))
    335335                    ,call
    336                     ,@(darwin64::struct-from-regbuf-values result-temp struct-result-type regbuf)))
     336                    ,(darwin64::struct-from-regbuf-values result-temp struct-result-type regbuf)))
    337337                call))))))))
    338338           
     
    369369              (argspecs argspecs (cdr argspecs))
    370370              (fp-arg-num 0)
    371               (offset 0 (+ offset delta))
    372               (delta 8 8)
    373               (bias 0 0)
     371              (offset 0)
     372              (delta 0)
     373              (bias 0)
    374374              (use-fp-args nil nil))
    375375             ((null argvars)
    376376              (values (rlets) (lets) (dynamic-extent-names) (inits) rtype fp-regs-form (- ppc64::c-frame.savelr ppc64::c-frame.param0)))
    377377          (flet ((next-scalar-arg (argtype)
    378                    `(,(cond
    379                        ((typep argtype 'foreign-single-float-type)
    380                         (if (< (incf fp-arg-num) 14)
    381                           (progn
    382                             (setq use-fp-args t)
    383                             '%get-single-float-from-double-ptr)
    384                           (progn
    385                             '%get-single-float)))
    386                        ((typep argtype 'foreign-double-float-type)
    387                         (setq delta 8)
    388                         (if (< (incf fp-arg-num) 14)
    389                           (setq use-fp-args t))
    390                         '%get-double-float)
    391                        ((and (typep argtype 'foreign-integer-type)
    392                              (= (foreign-integer-type-bits argtype) 64)
    393                              (foreign-integer-type-signed argtype))
    394                         (setq delta 8)
    395                         '%%get-signed-longlong)
    396                        ((and (typep argtype 'foreign-integer-type)
    397                              (= (foreign-integer-type-bits argtype) 64)
    398                              (not (foreign-integer-type-signed argtype)))
    399                         (setq delta 8)
    400                         '%%get-unsigned-longlong)
    401                        ((or (typep argtype 'foreign-pointer-type)
    402                             (typep argtype 'foreign-array-type))
    403                         '%get-ptr)
    404                        (t
    405                         (cond ((typep argtype 'foreign-integer-type)
    406                                (let* ((bits (foreign-integer-type-bits argtype))
    407                                       (signed (foreign-integer-type-signed argtype)))
    408                                  (cond ((<= bits 8)
    409                                         (setq bias 7)
    410                                         (if signed
    411                                           '%get-signed-byte '
    412                                           '%get-unsigned-byte))
    413                                        ((<= bits 16)
    414                                         (setq bias 6)
    415                                         (if signed
    416                                           '%get-signed-word
    417                                           '%get-unsigned-word))
    418                                        ((<= bits 32)
    419                                         (setq bias 4)
    420                                         (if signed
    421                                           '%get-signed-long
    422                                           '%get-unsigned-long))
    423                                        (t
    424                                         (error "Don't know how to access foreign argument of type ~s" (unparse-foreign-type argtype))))))
    425                               (t
    426                                (error "Don't know how to access foreign argument of type ~s" (unparse-foreign-type argtype))))))
    427                      ,(if use-fp-args fp-args-ptr stack-ptr)
    428                      ,(if use-fp-args (* 8 (1- fp-arg-num))
    429                           (+ offset bias)))))                   
     378                   (setq delta 8 bias 0)
     379                   (prog1
     380                       `(,(cond
     381                           ((typep argtype 'foreign-single-float-type)
     382                            (if (< (incf fp-arg-num) 14)
     383                              (progn
     384                                (setq use-fp-args t)
     385                                '%get-single-float-from-double-ptr)
     386                              (progn
     387                                '%get-single-float)))
     388                           ((typep argtype 'foreign-double-float-type)
     389                            (if (< (incf fp-arg-num) 14)
     390                              (setq use-fp-args t))
     391                            '%get-double-float)
     392                           ((and (typep argtype 'foreign-integer-type)
     393                                 (= (foreign-integer-type-bits argtype) 64)
     394                                 (foreign-integer-type-signed argtype))
     395                            (setq delta 8)
     396                            '%%get-signed-longlong)
     397                           ((and (typep argtype 'foreign-integer-type)
     398                                 (= (foreign-integer-type-bits argtype) 64)
     399                                 (not (foreign-integer-type-signed argtype)))
     400                            (setq delta 8)
     401                            '%%get-unsigned-longlong)
     402                           ((or (typep argtype 'foreign-pointer-type)
     403                                (typep argtype 'foreign-array-type))
     404                            '%get-ptr)
     405                           (t
     406                            (cond ((typep argtype 'foreign-integer-type)
     407                                   (let* ((bits (foreign-integer-type-bits argtype))
     408                                          (signed (foreign-integer-type-signed argtype)))
     409                                     (cond ((<= bits 8)
     410                                            (setq bias 7)
     411                                            (if signed
     412                                              '%get-signed-byte '
     413                                              '%get-unsigned-byte))
     414                                           ((<= bits 16)
     415                                            (setq bias 6)
     416                                            (if signed
     417                                              '%get-signed-word
     418                                              '%get-unsigned-word))
     419                                           ((<= bits 32)
     420                                            (setq bias 4)
     421                                            (if signed
     422                                              '%get-signed-long
     423                                              '%get-unsigned-long))
     424                                           (t
     425                                            (error "Don't know how to access foreign argument of type ~s" (unparse-foreign-type argtype))))))
     426                                  (t
     427                                   (error "Don't know how to access foreign argument of type ~s" (unparse-foreign-type argtype))))))
     428                         ,(if use-fp-args fp-args-ptr stack-ptr)
     429                         ,(if use-fp-args (* 8 (1- fp-arg-num))
     430                              (+ offset bias)))
     431                     (incf offset delta))))
    430432          (let* ((name (car argvars))
    431433                 (spec (car argspecs))
     
    434436              (if (darwin64::record-type-contains-union argtype)
    435437                (progn (setq delta (* (ceiling (foreign-record-type-bits argtype) 64) 8))
    436                        (lets (list name `(%inc-ptr ,stack-ptr ,offset ))))
     438                       (lets (list name `(%inc-ptr ,stack-ptr ,offset )))
     439                       (incf offset delta))
    437440
    438441                 (labels ((do-fields (fields accessors)
Note: See TracChangeset for help on using the changeset viewer.