lua-users home
lua-l archive

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


Adam D. Moss wrote:
> On a tangent, Mike, are you waiting for the final 5.1 release
> before issuing a LuaJIT update?  With the Coco/old-glibc problem
> avoided I was very impressed at the stability of LuaJIT 1.0.3
> and was hoping to make it my 'standard' Lua for developing
> against before too long.

I had to stop working on LuaJIT for the past weeks. I'm not sure
when I can continue working on 1.0.4. There's still a lot to be
done before I can release it (it's broken for many corner cases
right now). This is more or less independent of the Lua release

Here's the incomplete changelog to whet your appetite:

- Faster loads of FP constants. Remove narrow-to-wide store-to-load
  forwarding stalls.
- C stack is kept 16 byte aligned (mandatory for Mac OS X/x86).
  [Regression: slower for deeply recursive calls (ackermann, takfp).]
- Improved hinting for table keys derived from table values (t1[t2[x]]).
- Lookup hinting now works with arbitrary object types and
  supports chained lookups, too (__index).
- Use adaptive deoptimization for uncommon fallback cases. If
  runtime verification for a hint fails, the function is
  recompiled on-the-fly (instead of encoding the fallback case).
  Regular programs will hardly ever trigger deoptimization.
- The trace module prints a notice about deoptimization.
- Deoptimize calls with a type mismatch or a mismatch for an
  inlined function.
- Inlined OP_MOD (%). With better accuracy than the C variant, too.
- Inlined most math.* functions.
- Inlined string.len and string.sub.

[Some benchmarks (random, nsievebits, fasta, nbody, fannkuch)
 already run between 30%-100% faster than with 1.0.3.]

TODO list:

- Change function prologue to cope with 5.1-beta modifications.
- Fix all corner cases having to do with inlining.
- Inline pairs and ipairs iterators.
- Inline some of the base library functions.
- Inline table.insert and table.remove.
- Inline more string functions (main problem: libc NLS macros).
- Inline coroutine.yield and maybe coroutine.resume.
- Maybe inline OP_CONCAT for some common cases.
- Shortcut recursive calls to JIT compiled functions.
- Partially inline the C callgate. Maybe remove closure callgates.
- Stack frame reorganization.
- Smoother fallback to partial deoptimization.
- Lots of doc updates.
- Update to new set of benchmarks.
- Plus many long term goals (new optimizer, better integer opts,
  profiling support etc.).

But you know ... I'd rather work full time on LuaJIT than do
other things ... I have so many more ideas ...