Changeset 11554


Ignore:
Timestamp:
Dec 27, 2008, 3:50:43 AM (11 years ago)
Author:
rme
Message:

Looks the C compiler on FreeBSD returns small structs in registers.
It appears to be the same technique as used on Darwin.

http://gcc.gnu.org/onlinedocs/gcc/Incompatibilities.html

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lib/ffi-freebsdx8632.lisp

    r11553 r11554  
    11(in-package "CCL")
    22
     3;;; On FreeBSD, the C compiler returns small structures in registers
     4;;; (just like on Darwin, apparently).
    35(defun x86-freebsd32::record-type-returns-structure-as-first-arg (rtype)
    4   (x8632::record-type-returns-structure-as-first-arg rtype))
     6  (when (and rtype
     7             (not (typep rtype 'unsigned-byte))
     8             (not (member rtype *foreign-representation-type-keywords*
     9                          :test #'eq)))
     10    (let* ((ftype (if (typep rtype 'foreign-type)
     11                    rtype
     12                    (parse-foreign-type rtype)))
     13           (nbits (ensure-foreign-type-bits ftype)))
     14      (not (member nbits '(8 16 32 64))))))
    515
    616(defun x86-freebsd32::expand-ff-call (callform args &key (arg-coerce #'null-coerce-foreign-arg) (result-coerce #'null-coerce-foreign-result))
Note: See TracChangeset for help on using the changeset viewer.