[Vm-dev] GNUification, Clang
eliot.miranda at gmail.com
Mon Sep 16 16:22:13 UTC 2013
On Sun, Sep 15, 2013 at 4:30 AM, Ian Piumarta <piumarta at speakeasy.net>wrote:
> Gnuification does two things:
> 1. explicitly assigns registers to the most-often used local variables
> within the interpret() loop so that the compiler keeps them in registers
> all the time, and
> 2. removes the overhead of the interpret() loop by inserting at the end of
> every bytecode's implementation an explicit fetch of the next bytecode and
> a jump to its implementation.
> Both of these rely on GNU extensions to C in order to work (hence the
> name). The transformations are source-to-source by recognising the
> standard C declarations and control constructs present in the generated
> interp.c file's interpret() procedure and replacing them with GNU-optimised
> ones. It is applied after generation of the source files, by an awk
> script, and so after VMMaker has already finished its work. For Unix, the
> commands to do this can be found in unix/vm/build.cmake and the awk script
> is in unix/cmake/gnuify.awk.
Actually John McIntosh replaced awk with a Smalltalk script, much nicer.
See Gnuifier in e.g. the Cog VMMaker.
> The optimal assignment of registers to variables was determined
> empirically and might be usefully revisited given the number of years that
> has passed since the original experiments were performed and the changes
> that have occurred both in GCC's back end and in processor architecture.
> AFAIK, clang/LLVM accepts the same language as GCC so it is not clear that
> there is anything more it can do for us. If anyone knows of something new
> in clang of potential benefit then I'd be happy to try to extend or modify
> the gnuification step to take advantage of it.
> On Sep 15, 2013, at 00:24 , Casey Ransberger wrote:
> > I'd like to understand what goes on with the GNUify step. Where in
> VMMaker should I look to start understanding that part? Is there
> documentation somewhere I should look at to educate myself about it?
> > I remember that at one point there was some discussion of performance
> issues after building the system with Clang. I'm curious about that. Still
> a thing, or just stuff the LLVM crowd hadn't gotten round to optimizing at
> the time? Would "Clangification" help? Hence, wanting to know what
> GNUification does.
> > Again, sorry about the noise. Googling "gnuify squeak vm" seems to give
> me commit messages, which isn't really what I'm after.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Vm-dev