Changeset 5907
- Timestamp:
- Feb 13, 2007, 4:33:19 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/lib/ffi-darwinppc64.lisp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lib/ffi-darwinppc64.lisp
r5881 r5907 159 159 field-accessor-list) 160 160 ,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)))) 163 163 164 164 ;;; "Return" the structure R of foreign type RTYPE, by storing the … … 244 244 (setq field-form `(float ,field-form 0.0d0))) 245 245 (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)))) 248 248 249 249 … … 334 334 (%stack-block ((,regbuf (+ (* 8 8) (* 8 13)))) 335 335 ,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))) 337 337 call)))))))) 338 338 … … 369 369 (argspecs argspecs (cdr argspecs)) 370 370 (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) 374 374 (use-fp-args nil nil)) 375 375 ((null argvars) 376 376 (values (rlets) (lets) (dynamic-extent-names) (inits) rtype fp-regs-form (- ppc64::c-frame.savelr ppc64::c-frame.param0))) 377 377 (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)))) 430 432 (let* ((name (car argvars)) 431 433 (spec (car argspecs)) … … 434 436 (if (darwin64::record-type-contains-union argtype) 435 437 (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)) 437 440 438 441 (labels ((do-fields (fields accessors)
Note:
See TracChangeset
for help on using the changeset viewer.
