tamarin-redux->tamarin-central merge complete

Jeff Dyer jodyer at adobe.com
Tue Dec 22 13:49:18 PST 2009

tamarin-central has been updated with the changes made to tamarin-redux since the last merge to tamarin-central (April 2009). Below you will find a description of this update.

Enjoy, and Happy Holidays!


# # #


The last merge from tamarin-redux to tamarin-central was done almost eight months ago (this is not normal; our intent is to update TC no less often than once month). Since then there have been numerous changes relating to space and speed optimizations, nanojit sharing, out of memory handing, api versioning, code cleanup (e.g. inline hygiene) and lots of old fashioned bug fixes.


Non-Adobe contributions to this release of Tamarin-Central:

- Nanojit MIPS back-end support
  Chris Dearman< chris at mips.com>

- ARM optimizations and back-end improvements
  Jacob Bramley <Jacob.Bramley at arm.com>
  Rodolph Perfetta <Rodolph.Perfetta at arm.com>

- NanoJIT improvments from the TraceMonkey of Mozilla
  Dave Mandelin <dmandelin at mozilla.com>
  Dave Anderson <dvander at alliedmods.net>
  Graydon Hoare <graydon at mozilla.com> [*]
  Nick Nethercote <nnethercote at mozilla.com>
  Andreas Gal <gal at uci.edu>
  Vladimir Vukicevic <vladimir at pobox.com>

- Solaris support
   Leon Sha <leon.sha at sun.com>

- Removal of unbounded or deep recursion in builtins
  Peter Varga <pvarga at info.u-szeged.hu>
  Zsolt Vilagos <vilagos at info.u-szeged.hu>
  Akos Kiss <akiss at inf.u-szeged.hu>

[*] Graydon was instrumental in the heroic NanoJIT merge that allows TraceMonkey and Tamarin to now share the same NanoJIT code base.


Here is a detailed, though somewhat processed list of changes by bug:

Bug      Description
------   ----------------------
409695 - add --help to configure.py
429673 - special case for winmo atan2 support (r+=robb)
456852 - different runtime errors when -Dforcemir set in acceptance test run (r+stejohns,lhansen)
457960 - Use plain GC allocations for LIR memory (bug 457960 r=rreitmai+) 
458279 - MOPS opcodes need to be optimized on CodegenLIR/nanojit (in progress)
465582 - Enable use of LIR_jtbl for compiling OP_lookupswitch, on backends that support it (bug 465582 r=nnethercote+ rreitmai+) 
469162 - CodegenLIR branchIns (r+edwsmith)
474654 - Performance fix for ia32 int->double conversion #474654 (edwsmith+)
477228 - (ARM jit) and jitmax enhancements
481171 - only throw VerifyError when target of backedge is not a label (bug 481171 r=lhansen+) 
481230 - AS debugging of variables
481942 - using 'in' Dictionaries converts Object to String incorrectly 
482794 - Remove incremental test around write barrier codegen (bug 482794 r=lhansen+) 
483640 - abc interpreter not building after CallStackNode changes
483649 - ppc64 fmr instruction fix (r=edwsmith)
486410 - AS debugging (r=stejohns/edwsmith)
487199 - Make it possible to move a VM instance between threads in a process 
487593 - Add support for --disable-feature to the x-platform build scripts.
488733 - Make mark stack resilient to out-of-memory conditions: use PleaseAlloc 
488738 - Don't use system memory for GCHeap Regions
489345 - OOM Implementation 
489860 - PPC back-end branch fix
490378 - Add new premark() callback to GCCallbacks, called from StartIncrementalScan (bug 490378 r=lhansen+) 
490380 - New code allocator (CodeAlloc) for nanojit (bug 490380 r=rreitmai+ lhansen+) 
490521 - move buildbot scripts and config into tamarin repository
491717 - asm_fneg in i386 assembler for SunPro CC is strange; thread safety concern 
491828 - Debugger functionality is not thread safe / multi-vm aware 
492027 - MarkItem in page recursion could blow out the stack 
492373 - Add solaris sparc build slave to the build configuration
493866 - fix bug in x64 jit, relying on undefined C behavior (Bug 493866 r=edwsmith+) 
494209 - add a 'deep' testing phase to the build system
494957 - verify-all now functioning correctly.
496988 - VFP was failing with released resource
497669 - Standard MSVC longjump cannot be used with Tamarin if Tamarin is compiled with C++ exception support 
498798 - Improve early binding of constructor (bug 498798 r=rreitmai+) 
499296 - GCHeap leak messages should be DEBUG only 
499672 - Verifier changed to use fixed memory (bug 499672 r=tharwood+ sr=lhansen+) 
499692 - implement performance and memory sampler hooks for external scripting languages: GC fix + sampler handles mark stack overflow 
499976 - Added bump-pointer nanojit::Allocator, use it for LIR in LirBuffer (bug 499976 r=rreitmai+ r=graydon+) 
499980 - class BitSet doesn't need GC support (bug 499980 r=stejohns+) 
500181 - Add cleanup() even to CodeWriter pipeline, use it to clean up fixed mem (bug 500181 r=tharwood+ sr=lhansen+) 
500421 - Add a build slave for running acceptance on P3 CPU.
500441 - Add wordcode interpreter build/test of the release shell
500466 - avmshell crashes on P3 cpu machine with JIT enabled (r+nnethercote,edwsmith)
501108 - Acceptance build scripts need to display how the avmshell was compiled
502078 - Add fpu support for winmo builds via x-platform compile script using --enable-arm-fpu
502269 - ARM JIT saved registers twice
502369 - sparc linux lacks sync_instruction_memory rendering xulrunner unbuildable 
502570 - Shell DomainObject::getClass
502589 - Locate and fix the deeply or unboundedly recursive spot of the builtins of the VM 
503510 - test the building of ESC in the deep phase of the build system.
503874 - Factor gcheap usage out of CodeAlloc into an SPI (bug 503874 r=rreitmai+ graydon+) 
504202 - P4Available changes (r+edwsmith)
504607 - TraceMonkey merge
504777 - Large-object management can make large blocks uncollectable 
504976 - stack limit calculated incorrectly when stack size is unlimited 
505256 - Remove LIR_2 and use a 3-operand form for LIR_cmov/qcmov (bug 505256 r=rreitmai+) 
505502 - TraceMonkey merge
505909 - Remove _startingIns from Assembler (bug 505909 r=rreitmai+) 
506017 - [BuildBot] update the status table at the top of the page to show active builders
506390 - LirWriter no longer needs to be a GC object (bug 506390 r=tharwood+) 
508076 - new and improved api versioning
508651 - Remove NJ_PAGE_SIZE and remove unnecessary valgrind hook code (bug 508651 r=tharwood+ graydon+) 
508801 - Convert CodegenLIR deadvars structures to Allocator, remove GC* (bug 508801 r=tharwood+) 
510038 - Use builtin set type in dependparser.py (bug 510038 r=dshaffer+) 
510281 - uninitialized memory access in BigInteger 
511182 - Sync up with tracemonkey CodeAlloc (bug 511182 r=tharwood+) 
511875 - Remove MethodFrame.dxns = NULL from every method invocation (bug 511875 r=stejohns+) 
512282 - Never skip the stack overflow check (bug 512282 r=tharwood+ sr=lhansen+) 
512286 - Optimize the prologue interrupt check by hiding it behind the stack overflow check (bug 512286 r=stejohns+ sr=lhansen+) 
512485 - Revise Slot access using C++ classes. See docs/slot.txt for full explanation. (code=cbrichford, r=stejohns, sr=edwsmith, bug=512485) 
512563 - Mops test generates datatype misalignment exceptions on ARM when interpreted 
512972 - Rearrange prologue to reduce register pressure and reuse &MethodFrame (bug 512972 r=tharwood+ rreitmai+) 
513007 - nanojit x86 backend: rematerialize stack args instead of spilling (bug 513007 r=nnethercote+ sr=rreitmai+) 
513716 - VMPI_getPrivateResidentPageCount
514331 - Use precomputed Multinames in JIT code (bug 514331 r=rreitmai+) 
514471 - GC policy should take into account global heap pressure
515359 - SPARC CPU detection was not working in runtestBase.py.
515722 - Uses lookup cache to optimize finddef in jit code (bug 515722 r=stejohns+) 
515929 - Compile and test the avmshell with no jit
515935 - String doubling test crashes because length computation goes negative 
516332 - Policy: handle large overshoots of minor allocation budget 
516760 - Optimize OP_istypelate when RHS type is known (bug 516760 r=stejohns+ sr=lhansen+) 
517121 - Avoid loading Toplevel* in jit code
517127 - Specialize op_add for adding ints, move into instr.cpp (bug 517127 r=stejohns+) 
517150 - "Assertion failed: ( int32_t(v) == int8_t(v) )" in NativeX64.cpp [gal] 
517762 - Inline cache for late-bound calls from jit code (bug 517762 r=stejohns+) 
517858 - Mark stack overflow handling
518157 - Atom cleanup phase 1
519199 - build and test the shell using AVMFEATURE_USE_SYSTEM_MALLOC=1
519283 - FixedMalloc should not return NULL when the requested object is too large 
519511 - inline cache optimizations
519980 - Uniform and better range checking for object size overflow 
520596 - add a differential acceptance test pass using a 32bit and 64bit shell in the windows64-deep builder
520809 - Optimize indexed properties
521353 - Fix atom->string formatting for large kIntegerType atoms (64bit only) (bug 521353 r=lhansen+) 
522803 - Fix 64bit safety problem in number_d (bug 522803 r=stejohns+) 
523192 - Use atomKind() and atomPtr instead of explicit masking (bug 523192 sr=stejohns+) 
523348 - Fix Aector and Array callbacks so args can be safely clobbered (bug 523348 r=tharwood+ sr=stejohns+) 
523905 - Fix handling of atom constants in CodegenLIR for 64-bit safety (bug 523905 r=stejohns+) 
524214 - core/XMLObject.cpp: remove crashiness from XMLObject::toXMLString (r=wsharp, bug=524214) 
524473 - GCHeap::Abort called during Sweep leaves GC in inconsistent state for destruction 
524540 - Deadlock when Abort induced during GC::Collect 
524578 - Cumulative changes to finish nanojit merge (bug 524578 r=self, pending=rreitmai?) 
524750 - Move method implementations out of header files and into -inline.h files (in progress)
525445 - cache getQualifiedClassName result (r=edwsmith, bug=525445) 
526858 - GC objects unnecessarily retained due to PrecomputedMultiname using unclean memory as a GCRoot 
527083 - Add new opcodes to allow load/store of 8-bit int, 16-bit int, and 32-bit floats. 
528291 - Implements new subtypeof algorithm (bug 528291 sr=stejohns+) 
528933 - MethodEnv::isInterpreted should just call MethodInfo::isInterpreted (bug 528933 sr=lhansen+) 
529219 - Fix several underrunProtect bugs in X64 backend (bug 529219 r=edwsmith+) 
529284 - OOM deadlock when adding OOMCallback or GC to GCHeap 
529407 - PCRE names conflict in ARM/Linux Debug builds 
529540 - Fix unbounded recursion in Traits::resolveSignatures, etc
529828 - Use a specialised unbox1() for parameter 0, since it is always the correct type (bug 529828 r=stejohns+) 
529833 - We can jit-compile coerceUnboxEnter
530222 - hasCustomConstruct should default to true for builtin pools (r=edwsmith, bug=530222) 
530603 - [Buildbot] Add compilation of winmo ARM with FPU enabled
531270 - Weak references hashtable doesn't shrink if lots of references are created and deleted immediately 
532240 - implement NJ_EXPANDED_LOADSTORE_SUPPORTED for x64 backend (r=edwsmith,r=nnethercote,bug=532240) 
532507 - flush BindingCache entries when an AbcEnv is discarded. (r=edwsmith, bug=532507) 
532883 - Marking with a limited stack is not guaranteed to terminate, or may terminate only very slowly 
533280 - r3289: Emit LIR_live for every LIR_alloc passed to a call (bug 533280 r=rreitmai+) 
534423 - Reduce use of Atom in XML/RegExp when more specific types can be used (in progress)


Here are other changes, not necessarily tied to a specific bug:

- Extensively revamps the -Dverbose flag.
- support solaris builds with gcc
- Stage one of GCAllocObject removal, ie make MMgc use its own memory instead of system memory
- New blacklist facility.  Use GC::addToBlacklist to put something on
- Make memory leak info work in profiler builds
- XML.dispose guts for AIR's System.xmlDispose (released in 1.5.2)
- provide better api for integer atoms; limit integer atoms to 53-bit precision on 64-bit
- fix getQualifiedClassName behavior for integer atoms to match FP10
- fix  XML wildcard-attribute assignment crash
- move the guts of PlayerAvmDebugger::AppendScopeChain into avmplus itself (with a callback)
- MethodEnv::findproperty needs to allow for non-ScriptObjects in scope chain
- (1) the new code for lastIndexOf() generates substantially inferior x86-32 code 
- build a proper interfaceList for catch traits
- Revise FixedMalloc::FindSizeClass to avoid division 
- even if using indirect thunks, any thunk that has a single call site should emit as a direct call rather than indirect
- optimize Dictionary::nextNameIndex
- nativegen.py now has the smarts to know which native thunks need to unbox 
- enable dxns to be valid when called from native code
- Rework dependent strings to use pointer-and-offset (so as to enable static->dynamic conversions). Enable abc-strings-as-static
- Bunch of String optimizations; see https://bugzilla.mozilla.org/show_bug.cgi?id=512740 for details
- String::containsLatin1 (and related calls) fail for characters > 0x7F. Fixed, and added selftests
- Lots of optimizations to XMLParser to regain lost performance
- Restructure GCHashtable to uses templates instead of virtual methods and options flags to customize as necessary
- Add CodegenLIR::emitConstruct
- NanoJIT merge
       * nanojit's intermediate representation (LIR) expanded to eliminate 8-bit offset restrictions
       * LIR instructions are now variable length
       * general code cleanup and optimization in nanojit
       * support for 8/16 bit loads and stores, and 32bit float loads and stores (for Alchemy opcodes)
       * added a jump-table instruction (jtbl) to support compiling the ABC OP_lookupswitch opcode
       * ARM vector-floating-point support 
       * predicate instruction support for x64 back-end (e.g. cmov) 

More information about the Tamarin-devel mailing list