[Ecls-list] ECL_FOREIGN_DATA_P(), ecl_foreign_data_pointer_safe(), etc

Matthew Mondor mm_lists at pulsar-zone.net
Tue Oct 2 11:14:40 UTC 2012


Hello again,

When reviving my old ecl-unix code, I wanted to isolate the various FFI
hacks I put in it to another file and actually ended mostly
reimplementing them.  This also made me look at the C and assembly
results when for instance looking at what C structure accessors looked
like.

I noticed many calls to ecl_to_pointer() expanding to
ecl_foreign_data_pointer_safe() calls even with (optimize (safety 0)).
But interestingly in cmp/sysfun.lsp, I saw the following line:

(def-inline si:foreign-data-p :always (t) :bool "@0;ECL_FOREIGN_DATA_P(#0)")

Was this an attempt to inline such cases?  Although there seems to be a
difference between data and pointer?

I also noticed that my DECLAIM to inline the accessor functions do not
appear to work, so there also always are function calls made to
access/set structure fields no matter the SPEED/SAFETY level.  This is
not terrible, although if such small functions could be inlined it'd be
nice.  Since the inline declamations appeared to work in other contexts
for small functions, I wondered if perhaps it's a limitation of
functions using C-INLINE.  I also thought about perhaps generating
small C functions with the inline directive via CLINES instead of using
C-INLINE too, which could be another approach (I'd also have to check
how to get those to register CL symbols and be ECL friendly then).

(the aforementioned code is http://cvs.pulsar-zone.net/cgi-bin/cvsweb.cgi/~checkout~/mmondor/mmsoftware/cl/test/mmffi.lisp)

Thanks,
-- 
Matt




More information about the ecl-devel mailing list