help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: inline function expansion


From: Basile Starynkevitch
Subject: Re: inline function expansion
Date: Sun, 7 May 2023 19:51:42 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0


On 5/7/23 16:32, Lynn Winebarger wrote:
Hi,

Is there a function that will let us see the result of inline function
expansion at the source level?   I see "byte-compile-preprocess" and
"byte-compile-inline-expand" as possibilities, but neither has a
docstring.

If I use define-inline, I would like to be able to verify that the
result is what I expect, or vice versa, that I understand what the
result will be well enough to have the correct expectation.

Thanks,
Lynn



My understand of the current trunk, updated and compiled daily from git, on Linux x86-64/64 Debian or Linux Ubuntu 12.2.0)GNU Emacs 30.0.50 Development version d5ab8b6f2459 on master branch; build date 2023-05-07 is that such a function cannot exist.


On recent GNU emacs, the internal fonctions are JIT compiled (using gcclibjit from GCC 13) by the gccasmjit library, and we get:

rimski.x86_64 ~ 19:38 .0 % ldd /usr/local/bin/emacs-30.0.50-trunk
    linux-vdso.so.1 (0x00007ffea99f2000)
    libtiff.so.6 => /lib/x86_64-linux-gnu/libtiff.so.6 (0x00007f84ce7d6000)     libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f84ce753000)     libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f84ce71b000)
    libgif.so.7 => /lib/x86_64-linux-gnu/libgif.so.7 (0x00007f84ce710000)
    libwebpdemux.so.2 => /lib/x86_64-linux-gnu/libwebpdemux.so.2 (0x00007f84ce70a000)     libwebp.so.7 => /lib/x86_64-linux-gnu/libwebp.so.7 (0x00007f84cdd91000)     libgtk-3.so.0 => /lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007f84cd400000)     libgdk-3.so.0 => /lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007f84cdc95000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f84ce6ea000)
    libpango-1.0.so.0 => /lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f84cdc2b000)     libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f84cd318000)     libcairo.so.2 => /lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f84cd1f1000)     libgdk_pixbuf-2.0.so.0 => /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007f84ce6b9000)     libgio-2.0.so.0 => /lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007f84cd01f000)     libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f84ccfbe000)     libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f84cce77000)
    libSM.so.6 => /lib/x86_64-linux-gnu/libSM.so.6 (0x00007f84ce6ae000)
    libICE.so.6 => /lib/x86_64-linux-gnu/libICE.so.6 (0x00007f84cdc0c000)
    libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f84ccd39000)
    libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f84ccceb000)     libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f84cdbff000)     libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f84cdbfa000)     libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f84cdbf2000)     libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f84cdbdb000)     libxml2.so.2 => /lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f84ccb01000)     libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f84ccacf000)     libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f84ccaa2000)     libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f84cc9d8000)     libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f84cc98a000)     libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f84cc78f000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f84cc6a6000)
    libjansson.so.4 => /lib/x86_64-linux-gnu/libjansson.so.4 (0x00007f84cc696000)     libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f84cc613000)     libgccjit.so.0 => /lib/x86_64-linux-gnu/libgccjit.so.0 (0x00007f84ca400000)
    libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007f84cc5ff000)
    libXcomposite.so.1 => /lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007f84cdbd2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f84ca000000)
    libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f84ca34c000)     liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f84ca31a000)     libLerc.so.4 => /lib/x86_64-linux-gnu/libLerc.so.4 (0x00007f84ca295000)     libjbig.so.0 => /lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f84ca284000)     libdeflate.so.0 => /lib/x86_64-linux-gnu/libdeflate.so.0 (0x00007f84ca271000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f84ce87c000)
    libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f84ca26a000)     libpangocairo-1.0.so.0 => /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f84ca259000)     libpangoft2-1.0.so.0 => /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f84ca23f000)     libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007f84ca222000)     libcairo-gobject.so.2 => /lib/x86_64-linux-gnu/libcairo-gobject.so.2 (0x00007f84ca217000)     libatk-1.0.so.0 => /lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007f84c9fd8000)     libepoxy.so.0 => /lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007f84c9ea3000)     libatk-bridge-2.0.so.0 => /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 (0x00007f84c9e67000)     libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f84c9e21000)     libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007f84c9e10000)     libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007f84ca20b000)     libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007f84ca206000)     libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f84c9e04000)     libXdamage.so.1 => /lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f84c9dff000)     libthai.so.0 => /lib/x86_64-linux-gnu/libthai.so.0 (0x00007f84c9df2000)     libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f84c9dcb000)     libpixman-1.so.0 => /lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007f84c9d1f000)     libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f84c9d1a000)
    libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f84c9cf0000)
    libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f84c9ce0000)     libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f84c9cd3000)     libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007f84c9c8f000)
    libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f84c9c84000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f84c9bea000)     libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f84c9be1000)
    libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f84c9bca000)
    libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f84c9afa000)     libicuuc.so.72 => /lib/x86_64-linux-gnu/libicuuc.so.72 (0x00007f84c98fb000)     libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f84c98ee000)     libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f84c98c3000)     libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f84c9784000)     libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f84c9763000)     libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f84c95af000)     libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f84c9598000)     libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007f84c9548000)     libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007f84c9500000)     libisl.so.23 => /lib/x86_64-linux-gnu/libisl.so.23 (0x00007f84c9200000)
    libmpc.so.3 => /lib/x86_64-linux-gnu/libmpc.so.3 (0x00007f84c94dc000)
    libmpfr.so.6 => /lib/x86_64-linux-gnu/libmpfr.so.6 (0x00007f84c9423000)     libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f84c8e00000)     libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f84c91dc000)     libatspi.so.0 => /lib/x86_64-linux-gnu/libatspi.so.0 (0x00007f84c91a3000)     libdatrie.so.1 => /lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007f84c9418000)
    libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f84c9412000)
    libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f84c940a000)     libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007f84c916c000)
    libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f84c915f000)
    libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f84c9153000)
    libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f84c8cb8000)
    liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f84c9130000)
    libicudata.so.72 => /lib/x86_64-linux-gnu/libicudata.so.72 (0x00007f84c6e00000)     libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f84c910d000)     libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f84c90e7000)


Notice the dependency on libgccjit.so.0, which is provided by GCC 12 or GCC 13 suitably configured


That thing is used in GNU emacs source code. Look into its ffile emacs/src/comp.c (line 553, etc... 4689)


On the same system the Ubuntu emacs don't use libgccjit.

But perhaps I misunderstood your question?


Regards.


NB. My pet open source project is http://refpersys.org/ (an inference engine project, GPLv3+) and source code on https://github.com/RefPerSys/RefPerSys .... feel free to contact me (Basile Starynkevitch) by email to basile@starynkevitch.net or basile.starynkevitch@cea.fr (both near Paris in France)  about it.

--
Basile Starynkevitch                  <basile@starynkevitch.net>
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]