[Ecls-list] More on special variables and multithreading

Juan Jose Garcia-Ripoll juanjose.garciaripoll at googlemail.com
Sun Jan 24 20:40:10 UTC 2010

On Sun, Jan 24, 2010 at 8:30 PM, Samium Gromoff <_deepfire at feelingofgreen.ru
> wrote:

> What about that expensive per-function environment access call, is it
> possible to eliminate it in the inlined calls, so that the value
> obtained by the caller is used?

The functions which are now inlined never called ecl_process_env(), since
they got the environment as an argument. For example,
ecl_bds_bind(env,symbol,new_value), binds a special variable in the current
lisp environment.

There is still one ecl_process_env() call per compiled function, though, and
some other ECL functions use ecl_process_env() internally. The latter can be
changed, but requires auditing ECL carefully.

Finally let me remark that the performance of ecl_process_env() indeed is
platform-dependent, as it was pointed out here. On a modern linux using the
x86_64 architecture, something like

void ecl_deliver_fpe(void) {
        cl_env_ptr env = ecl_process_env();

gets translated into

.globl ecl_deliver_fpe
        .type   ecl_deliver_fpe, @function
        .loc 1 498 0
        .loc 1 500 0
        movq    cl_env_p at GOTPCREL(%rip), %rax
        .loc 1 498 0
        pushq   %rbx

but on Mac OS X it does not: it always involve a function call.


Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/ecl-devel/attachments/20100124/d805f342/attachment.html>

More information about the ecl-devel mailing list