source: trunk/source/lib/ffi-freebsdx8632.lisp @ 11554

Last change on this file since 11554 was 11554, checked in by rme, 12 years ago

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 size: 1.2 KB
Line 
1(in-package "CCL")
2
3;;; On FreeBSD, the C compiler returns small structures in registers
4;;; (just like on Darwin, apparently).
5(defun x86-freebsd32::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))))))
15
16(defun x86-freebsd32::expand-ff-call (callform args &key (arg-coerce #'null-coerce-foreign-arg) (result-coerce #'null-coerce-foreign-result))
17  (x8632::expand-ff-call callform args :arg-coerce arg-coerce :result-coerce result-coerce))
18
19(defun x86-freebsd32::generate-callback-bindings (stack-ptr fp-args-ptr argvars argspecs result-spec struct-result-name)
20  (x8632::generate-callback-bindings stack-ptr fp-args-ptr argvars argspecs result-spec struct-result-name))
21
22(defun x86-freebsd32::generate-callback-return-value (stack-ptr fp-args-ptr result return-type struct-return-arg)
23  (x8632::generate-callback-return-value stack-ptr fp-args-ptr result return-type struct-return-arg))
24
Note: See TracBrowser for help on using the repository browser.