Hi there, I have a question about pypy's compilation process when producing an executable from an RPython source program.
Apparently when I compile my program with --opt=JIT, my code gets included 3 times in the resulting executable. I made a little experiment where I included a magic number in my RPython code and counted how often it showed up in the generated executable. With ahead of time compilation (--opt=3) my magic number appeared once: $ PERLIO=:raw perl -nE '$c++ while m/\xef\xbe\xad\xde/g; END{say $c}' ./rpython-deadbeef.aot 1 And with --opt=JIT it appeared 3 times: $ PERLIO=:raw perl -nE '$c++ while m/\xef\xbe\xad\xde/g; END{say $c}' ./rpython-deadbeef.jit 3 When I investigated, it turns out that the JIT-capable executable has one copy of my program in bytecode form and two copies in machine code form. To understand the machine-code copies I inspected the intermediate "implement.c" file that pypy generated and found out that my interpreter code appears in two functions, one named pypy_g_mainloop_1 and one named pypy_g_portal. These two functions were completely identical, other than the function names that show up in the debugging messages. I understand why pypy would create a separate bytecode version of my program but why is it generating two seemingly-identical machine code versions of it? Thanks in advance, Hugo _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev