On Tue, Oct 2, 2012 at 1:14 PM, Matthew Mondor <span dir="ltr"><<a href="mailto:mm_lists@pulsar-zone.net" target="_blank">mm_lists@pulsar-zone.net</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I noticed many calls to ecl_to_pointer() expanding to<br>
ecl_foreign_data_pointer_safe() calls even with (optimize (safety 0)).<br>
But interestingly in cmp/sysfun.lsp, I saw the following line:<br>
<br>
(def-inline si:foreign-data-p :always (t) :bool "@0;ECL_FOREIGN_DATA_P(#0)")<br></blockquote><div><br></div><div>Note the "-p". This is a type predicate, which only checks whether a lisp object contains a pointer or not.</div>

<div><br></div><div>ecl_to_pointer() is a C macro and expands to the *_safe version internally. C compilation is not conditioned by lisp proclamations.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I also noticed that my DECLAIM to inline the accessor functions do not<br>
appear to work, so there also always are function calls made to<br>
access/set structure fields no matter the SPEED/SAFETY level.  This is<br>
not terrible, although if such small functions could be inlined it'd be<br>
nice.  Since the inline declamations appeared to work in other contexts<br>
for small functions, I wondered if perhaps it's a limitation of<br>
functions using C-INLINE. </blockquote><br><div>The thing is that ECL does not keep code across compilations and not even in compiled images. This means that the INLINE declaration is not useful right now outside the same file (but even then, I am not sure when it is active. I would have to look it up)</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> 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).</blockquote><div><br></div><div>When I really want to inline something portably I use compiler macros. DEFINE-COMPILER-MACRO allows you to define more precisely the expansion you want and is the mechanism used by ECL's optimizer right now.</div>

</div><div><br></div><div>Juanjo<br clear="all"><div><br></div>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>


</div>