Fork me on GitHub

2024.09

Core:

  • When -latomic is needed, don't lose the libs entry [6ed6986b]
  • Hand-Apply fix to minilua for CVE-2014-5461 [570db261]
  • Fix NAN/INFINITY definitions to work on Windows 11 SDK [b7750ec2]
  • We don't have to account for "start" in size calculation ...

Documentation:

GC:

  • A re-imagining of the MVMROOT macros [ac82e446]

JIT:

Spesh:

  • When guarding conc or type and type is known, guard just conc/type [abab265d]

Strings:

  • latin1.c and ascii.c can return str_consts.empty for 0-length string [2a0dc7f1]
  • Split string's "any" union field into "any" and "any_ptr" [f14712b6]

Download

2024.08

Core:

  • include sp_ and prof_ ops in tools/lib/MAST/Ops.pm [70756c46]

Documentation:

GC:

  • fix check for root debug mode [39b9b88c]
  • Add missing MVMROOT to spawn_setup [5e52422f]

JIT:

Spesh:

  • freshen up graph_spesh.raku [17c62f12]

Strings:

  • Store short strings inside string's body [143b5059]
  • Iterate graphemes into in_situ_32 string if able [c7da7396]
  • Fast path for concatenating two in_situ_8 strings [f1108304]
  • Fast path for concatenating two one-grapheme strings [08ee6c8e]
  • Add fast path for calculating hash of in_situ_strings

Download

2024.07

Core:

  • Fix returning from LEAVE to surrounding scope [2c866ae8]
  • Bump mimalloc to 2.1.7 [6d8a4c75]

Documentation:

GC:

JIT:

  • Disable the expression jit by default

Spesh:

Strings:

Download

2024.06

Core:

  • Reapply "Don't lose return value with LEAVE phasers" [51ca012d]
  • Allow serializing of uint64s (#1813) [1bf28177]
  • Add missing _builtinclz definition for MSVC [a7b6e3cf]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2024.05

Core:

  • Cleanup variables in bigint ops error cases [dbdfb399]
  • Silence incorrect GCC warning [c9dd4dd9]
  • Provide some mechanisms for introspecting file mode [fe2080ac]
  • Attach the spawn_result when it contains an error code [f1173cb2]

Documentation:

  • Update bytecode documentation [8ccb8775]

GC:

JIT:

Spesh:

Strings:

  • Just malloc instead of stack+malloc+memcpy when coercing int to string [62e64677][c1eedd50]

Download

2024.04

Core:

  • Increase the size of the int-to-str cache to 65 [f2220d93]
  • Use atomic operations for on SerializationReader's working flag [d5dafa9b]
  • Fix memcmp call [47f518af]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2024.03

Core:

  • Add a GitHub release build workflow (ubuntu, macos, windows) [2a60bd07]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2024.02

Core:

  • Fix uninitialized is_unsigned flag in P6num [a1a18e98]
  • Slightly optimize creating backtraces [6a9c523d]
  • Update libuv to version 1.48.0 [cc00279b]
  • Provide hint for why Rakudo tried to convert from Int to int, when it cannot. [8320c9f4]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2024.01

Core:

  • Add a bunch of *_u stuff [f7753f07] [6c0271c1] [ec1649d5] [e1b2af27] [eae59995] [594df3df] [274cb0f3] [06a7b2c9] [017e0429] [40d1ccd4] [86ed9a19] [444feb52]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.12

Core:

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.11

Core:

  • Add syscall that returns stat times in integer nanoseconds [18604f69]
  • Update libuv to version 1.47.0 [9a6eabfe]
  • Bump minimum supported version to windows 8 [428b821d]
  • Prepare for msvc toolchain c11 atomics [030f8ad0][3e4b6ede]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.10

Core:

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.09

Core:

  • Add stat repr and related syscalls [e149d3de]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.08

Core:

  • Fix incompatible function pointer types with clang16 [871f7bca]
  • Update libuv to version 1.46 [75fe055c]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.06

Core:

  • Fix Windows build [278af767]
  • Use JFS64 instead of TinyMT64 as our PRNG [1550dc7c][495d4f16]
  • Add ops for unix domain sockets [3df20182]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.05

Core:

  • Update libuv to version 1.45.0 [5699d34a][6f4e09a7]

Documentation:

  • mention we have unicode 15 [80559738]

GC:

JIT:

Spesh:

  • log reason when not inlining into inlined bb [ab61b044]
  • callercode no longer prevents inlining [3b4d55a0][b9df871d]

Strings:

Download

2023.04

Core:

  • Fix nqp::objprimunsigned handling of unsigned or sized integers [6adfc376]
  • Warn about missing perl5 mods in Configure instead of exploding make install [6589a170]

Documentation:

GC:

JIT:

Spesh:

Strings:

Download

2023.02

Core:

  • Avoid implicit function declarations in pthread_setname_np probe [9e6d9a8f]
  • Speedup creating sha1 digest string [8f90dc7c]
  • Bump mimalloc to v2.0.9 [d5430563]
  • Speedup VMArray's deserialize()... [a508c06b]
  • Update repo checking out script to also use 'main' [c9055873]
  • Add --has-mimalloc option to use system mimalloc [99479afe]
  • Update GitHub CI pipelines to track branch renames and OS deprecations [d7721042][e4336c71][d1bc8ff8][87183069][165e8297][8a80d3c6][8ddf6702]
  • Work around "const_iX NYI" after getlexstatic_o with fallback resolver [34bae78d]

Documentation:

GC:

JIT:

  • Jit nqp::rand_(i|n) [6866ff81]

Spesh:

  • Use right size for a lit_str_idx in JIT and spesh [6b456a6c]

Strings:

  • Simplify MVM_string_utf8_c8_encode_C_string [a64765e7]
  • Simplify MVM_string_index [ada3b80b]
  • Update to Unicode 15.0 [ebefe261]

Download

2022.12

Core:

  • Protect the two property code lookup hashes being set up with a mutex [9bc1beed]
  • Add fallback resolver [43e60db9][a6fbcf6b][35064bf9][c89c3ec8][5d0f92c6]
  • Add definition of AI_NUMERICSERV, fixes build on MacOS 10.6 for ppc [976c1168]
  • Add unsigned comparison ops (eq, ne, (l|g)(e|t)) [c77dc1d4]
  • Add chown op [c69534c6][a1cbb9c4]
  • Reset errno to error of latest call to mkdir [4089a869]

Documentation:

GC:

  • Remove the fixed size allocator (FSA) [2a8c494e]

JIT:

Spesh:

  • use correct format string in spesh log skip line [4575c474]

Strings:

  • Use 2-char-at-a-time version of jeaiii's itoa [fd0cadbf]

Download

2022.07

Core:

  • Attempt at implementing a "bytecode-size" dispatch [cc49dcf9]
  • Error message fix - one usually connects to things [79bb406d]

Documentation:

GC:

  • Run finalizers even with tc->last_handler_result [3796890b]

JIT:

Spesh:

  • Set facts on disp prog translation of int and num lits [09ce373a]
  • Commit some missed uint things [ced36686]

Download

2022.06

Core:

Documentation:

  • Fix errata in docs/debug-server-protocol.md [99730293]

GC:

  • Add missing SC write barriers to atomic attr bind and cas [a9fcd5a7]

JIT:

Spesh:

Strings:

Download

2022.04

Core:

  • Update libuv to version 1.44.1 (#1689) [2eb83739]
  • Fix sign comparison warnings in coerce_su implementation [3d65db97]
  • Mimalloc should only release memory to the OS at exit if --full-cleanup was used [c77e1623]
  • Turn on C11 atomics by default [a3476e28]
  • Add write_uint16_at method to MAST::Bytecode [9b9b4763]
  • Use stdatomic probe in using c11 atomics decision [d7dee3a2]

GC:

JIT:

  • JIT atposref_u + getattrref_u [b2a91e6c]

Spesh:

  • Fix mis-spesh of native calls [01e1d116][87040eaa][2319bba4]

Strings:

Download

2022.03

Core:

  • Update libuv to version 1.43.0 [cc54203e]
  • Bump mimalloc to v2.0.5 [1b8b2e39]
  • The result of a getenv() call should not be freed [a78776ea]
  • Some nativeref optimizations and fixes [348f0927][fed7bb86][0f853f8f] [28643799][f7891c8f][062fe30f]
  • Fix all returned native integers getting treated as signed [bb2fb105] [535ff68b][345ec7d3]
  • Make rakudo available on the GNU Hurd [a9c0058d][0d584831][e96bab85]
  • Fix potential invalid free in nativecall [4bf970a9]
  • Add missing _u cases to disp program callsite code [b0723bcb]
  • Correctly allocate/free CStrs when using mimalloc [764fff9b]

GC:

  • Root orig since MVM_frame_capturelex can allocate [df8d3bb9]

JIT:

  • Restore jitting of sp_getarg_[inso] [91006ae5]
  • Jit even more *_u versions of ops [0ee1ca24]

Spesh:

  • Fix frame walker finding wrong value after multi level inlining [059c013b]
  • Fix spesh of named uint parameters [482e284f]
  • Fix speshing of param_on_o [0b45dd48]

Strings:

  • Add an MVM_nativecall_encode_string function [596b4215]

Download

2022.02

Core:

  • Assure memory write order in native call race condition fix [4d411987]
  • Use faster itoa implementation [48f584c4]
  • Change nqp::radix(_I)? to return # chars converted [45f40826]
  • Ignore untracked changes in the ryu submodule [f4b4692a]
  • Correctly free memory allocated by libuv [781a4799]
  • Include stdbool.h instead of using our own defines [01c3e8f5]
  • Add bindpos_u op [4b404536]
  • Add atpos_u op [44204e89]
  • HLL uint_box_type [362d465a]
  • uint_*_ref HLL config entries [36ba6133]
  • New set-cur-hll-config-key syscall [28df31bb]
  • New atposref_u op [5abfbcff]
  • Let NativeRefs know if they are unsigned [4e429897]
  • fetch_u operation on containers [e298f6a8]
  • New iscont_u op [0e68f31c]
  • New assign_u op [502cd6fb]
  • captureargpos_u op [7c3ddaee]
  • Teach native_ref_store to distinguish between signed and unsigned ints [0161b143]
  • Treat MVM_CALLSITE_ARG_(FLAT | NAMED) like FLAT_NAMED [9c2df858]
  • Free up MVM_CALLSITE_ARG_FLAT_NAMED flag [b1069f7c]
  • #include <assert.h> explicitly. [55be3aa2]
  • More preparations for fixing unsigned handling [90b24146][36a5fb4c][171ea9f4] [3f616d7a][ba8bd0e9][4d003732]
  • Run git submodule --quiet update --depth 1 if git is new enough. [677d1fd6]
  • Add mimalloc submodule, and default to mimalloc where possible [9f0a3bdb] [0a8a66d5][8a5be0d9][e7388250][eaaeab54][248aa337][e306759e][1d779128]
  • Make value_desc_cont_atomic_store() static [1351cfe6]
  • Allocations for blocks of MVM registers needs to be 8 byte aligned [1850f91a]
  • Add missing static qualifiers to various private functions [d293c683] [a641520f][38e66874][da372d13][ef4e19c5][5b477a6a][5e217e03][e0f92ab1] [86ba1d5e][08bf3b61]
  • Support using C11 atomics as an alternative libatomic_ops [44696884] [9ff22369][783bb2ac][48c67de8][777a18c4]
  • MVM_nativeref_lex_u for proper gelexref_u* [d4dab6eb]
  • Use appropriate (un)signed container ops for native call args [26e2cfad]
  • Fix argument unboxing treating all integers as signed [9239ed5f]
  • Use MVM_STORAGE_SPEC_BP_UINT64 for unsigned box targets [b34604a6]
  • Properly support uints in CArray [53e588e4]
  • Make C(PP)Struct and CUnion properly support uint attributes [06e1ebe3]
  • Properly support uint in MultiDimArrays [b585b5e3]
  • Fix "Wrong kind of access to numeric CArray" when binding into an uint CArray [f1101b95]
  • Add an lgtm config file [9fb8ec91]
  • Use libc allocator functions for NativeCall [c6064d3b][2bf083bc][a1749f57] [26ad34e8][20910161][d39f50d7]
  • Fix segfault in nqp::hllboolfor [6661662d]
  • Move the repeated code that frees callsites before exceptions to a function [85fa90c4]
  • Fix a bug in report_deserialize_callsites_violation [03f023cc]
  • Remove all code for serialization versions earlier than 23 [e80869eb]
  • Remove all code for bytecode versions earlier than 7 [bee95459]
  • Implement unsigned native version of binary not op (bnot_u) [b7d2713b]
  • Teach MVM_dump_p6opaque debug function to dump bigints [a0a98d47]
  • Fix autoboxing of arguments treating unsigned ints as signed [3ff5b111]
  • Fix segfault after capture-replace-literal-arg with different kind [2abb4699]
  • Implement (bind|get)attrs?_u ops [d58fa57d]
  • Implement getattrref_u op [ea644a5b]
  • Fix autobox_uint finding negative Ints in the int cache [a851fcf4]
  • Proper uint support for multidim arrays. [ef270d7f]
  • Silence warning about ignoring return value from libtommath function [c00abdf3]
  • Fix things found by lgtm.com [42060102][55c83c2a][6d1bd83c][80e262a6] [94847eda]
  • Fix problems in GCC/GDB plugins found by lgtm.com [3d759ed5][b73b9570] [de12679a][3773169d][0b16384d]
  • Fix more things found by lgtm.com [58d0d756][d968da89]
  • Make it possible turn dispatcher debugger with compiler options [72b313b2]
  • Fix some missing variable renames in GCC plugin [e58fc6d1]

GC:

  • Fix possible access to fromspace in libffi native calls [38349ce4]
  • Fix possible access to fromspace after deopt materialization [2883ba75]

JIT:

  • Jit iscont_u, missed in the recent uint work [7044d53c]
  • Jit some more missing *_u versions of ops [6a404765]

Spesh:

  • Support boxed unsigned int primitives in argument spesh [f12bc422]
  • Fix speshed native calls with rw args assigning into wrong target [d783bf27]
  • Teach optimize_decont about UINT64 box type [4a3b98d5]
  • Fix spesh turning decont of a UIntLexRef into a decont_i [ed3cdd38]
  • Fix spesh breaking non-int/long rw args of native calls [280c709c]

Strings:

  • Simplify MVM_string_utf8_encode_C_string [99e0a715]
  • Change Generate-Collation-Data.raku to use raku binary [1b1b7d59]
  • Manually implement simplified strtoll for coerce_si [b80996ff]
  • Avoid reading beyond the end of the string in MVM_coerce_s_i [ecfc0bc2]
  • Replace locale-"aware" <ctype.h> with ASCII-only code in MVM_coerce_s_i [596be524]
  • Fix format strings for Win32 + set C99 for MinGW [dd978192]
  • Whoops, fix a wrong format string change [418711f0]

Download

2021.12

Core:

  • Allocate frame work and, when possible, environment registers on the callstack [fd571614][9266e794][7eca0ed3][d83edbea]
  • Negative numbers should not be prime [1bd61725]
  • Fix segfaults when a frame has more than 8192 locals [24392a32]
  • Some small optimizations for frame allocation [9903a543][fcddd121] [4d145b46][93809811]
  • When NativeCall is libffi, copy ffi_ret_type and ffi_arg_types [a2a82f99]
  • When NativeCall is libffi, don't leak ffi_arg_types during GC [a3c17d0f]
  • Avoid thread safety issues in intern lookups [08d41d5e]
  • Fix threading issues caused by misalignment in --valgrind builds [ea5a86a1]
  • Remove counter productive NULL checks in decont ops [8aca849f]
  • Dispatcher replace arg syscall [68b8f429][ed0c8ec0][4cdce310][0a5b37a1]
  • Migrate special return to callstack and simplify return handling [05b34685][485ca825][f58cf69f][139f54aa][feba1cd5][3f45b234][8e197406] [776a1e3c][4adf3a2c][ce19abf2][0f43204e][2f423b20][b8e90bf8][cb7deb4b] [843cf0f3][cd3b759b][f2685cd9][9f22ccc2]
  • Mark nqp::radix as :pure [9d5bcfc5]
  • New disp nativecall [e3614b05][8b33b49a][1eb6bd4c][58cb30a8] [3f6ffa19][3881e22e][7dd49341][d44be4f2][2acd842a][b0b0638e][a9c3db5d] [7de49439][ece63176][40267983][8aac4bf7][d5956209][5b477341][e403ec59] [21f6f323][87442f53][ee404907][960d87db][1e0d70c4][2e2f6607][4fd9c73a] [cfcab847][d843f4ab][cd9541be][9bbd50cd][795d75ed][785d3e03][e1b5e35d] [c451fede][35963970][45692bbc]
  • Properly extend int return values of native calls to 64 bits [bd83921d]
  • Fix use of uninitialized memory in native callbacks with libffi [0006714d]
  • Close socket on async error during an async connection [2a124542]
  • Fix various callstack region record related failures [e7e0bdc0][469bf913] [6903c952][c15c093d]
  • Alloca the nativecall args that we can [5503065c]
  • Deserialize empty hashes robustly [c1e8775f][2fa51c61][0a674c8c]
  • Fix segfaults due to race condition when initializing native call sites [207db4bb]
  • Fix segfault with void native calls [fd6a4103][768228b3]

GC:

  • Fix possible access to fromspace in code_pair_configure_container_spec [cd809ee4][0821570a]
  • Fix possible access to fromspace after MVM_capture_replace_arg [81082e1c]
  • Fix possible access to fromspace in MVM_disp_program_run [6fd62329]
  • Fix possible access to fromspace in native calls [f4aa22ad]
  • Fix possible access to fromspace when autoboxing return values [f0e4b08c]

JIT:

  • Improve the jit implementation of nqp::abs_i [52c4a6d7]
  • Use callp instead of call in jit of new(mixin)type [ba03cb2e]
  • Lego JIT of getcurhllsym [4c3f4cde]
  • Fix race conditions in JIT compiled dispatches [4c6755f4]
  • Fix JITed return from nested runloops [8a91bf8e]

Spesh:

  • Eliminate hllbool/boot-boolify-boxed-int pairs in spesh [14a8befd]
  • show annotation for delayed temps in spesh log [10e5344c]
  • Fix invalid pred chain caused by MVM_spesh_manipulate_split_BB_at [44c88da7]
  • Fix out of bounds read of PHI facts in spesh [8a684b33]
  • Fix uninitialized register after PEA and inlining [bb719a63]

Strings:

  • Use alloca in MVM_string_memmem_grapheme32str... [9a37bb61]

Download

2021.10

Special:

  • Introduce a new generalized dispatch mechanism. It results in a more uniform architecture for all kinds of dispatch, delivering better performance on a range of langauge features. For more information see https://6guts.wordpress.com/2021/09/29/the-new-moarvm-dispatch-mechanism-is-here/

6model:

  • [b75d0047] Add .new() suggestion to type object errors

Core:

  • [e28e06de] Correct libffi/dyncall discrepancy
  • [e66404a8] Ensure stable order of flattened named args
  • [f7d6bc61] Avoid locking on intern cache lookup
  • [039cc584] Fix two leaks missed by --full-cleanup

Debugserver:

  • [ab2a3f01] Normalize filenames for debug server
  • [137ca834] Produce one breakpoint instruction per line
  • [b5b276ff] Fix issues with resuming suspended threads
  • [8f7d970a] Only produce debugger debugging output when asked
  • [746175bc] Fix regression in stepping
  • [cedebdbf] Add more debug output for stepping
  • [86d0a050] Avoid duplicate response for suspend/resume all

JIT:

  • [a6ff2c03] Fix segfault in lego jit of composetype
  • [3a1346a4] Fix typo in JIT of scobjcount
  • [4f0fb9dd] JIT (bind|get)exmessage
  • [e4765d6c] JIT getlexrel(caller)
  • [3fb968ae] JIT loadlib
  • [029030ab] JIT markcode(static|stub)
  • [84348c9f] JIT (new(mixin)|compose)type
  • [989a8750] JIT parameterizetype
  • [87df9196] JIT sha1
  • [8e326cbc] JIT seek_fh
  • [bde03151] JIT loadext
  • [a0f9f387] JIT setcodename
  • [70b57ed2] JIT throwpayloadlexcaller
  • [f27b7fac] JIT setparameterizer
  • [0d01a32b] JIT settypefinalize
  • [890e65c6] JIT usecompile(e|r)hllconfig

Strings:

  • [665ab937,3d478190] Stream Decoder: Disallow incomplete code at EOF

Other:

  • [79ac88ea] Improve MVM_bithacks_next_greater_pow2 function
  • [e22a190b] Doc research on scoping for an AArch64 JIT port

Tooling/Build:

  • [9b6dd5ce] Remove Ubuntu 16.04 jobs from CI pipeline
  • [76afe93c] Simplify cloning NQP and Rakudo repos in CI jobs

Download

2021.09

Core:

  • [0b713ada,e5cbede8] Store key_right_shift - metadata_hash_bits in the hashtable
  • [5ead9f0d] Respect --full-cleanup in nqp::exit
  • [7a385a35] Fix possible access to fromspace in NativeCall callbacks

GC:

  • [bb14f423] Fix finalizers of gen2 objects rarely getting run

Download

2021.08

Core:

  • [2f5c21fb] Fix another bug in MVM_str_hash_fsck
  • [7355f744] Free filename if exception when loading bytecode
  • [8cc7fbdf,7907b85b,0c032a00,a81f129a,7f8bc1e7] Switch MVM_coerce_n_s to RyĆ« from Grisu3 with a sprintf fallback

JIT:

  • [2932ef5b] Add JIT templates for (bind|get)attr(s)?_*

Spesh:

  • [d4a8093e] Fix deadlock by untimely GC in multi-threaded programs
  • [a932b173] Fix spesh optimizing away still needed label register

Download

2021.07

6model:

  • [21f8cadd] Fix "Collectable in a gen2 freelist accessed" when deserializing a method cache
  • [d7a07bf3] Fix possible acces to a freed SC during deserialization
  • [8f513d55] Convert more realloc+memset(0) to recalloc

Core:

  • [736154d2] Fix some bugs in the various hash_fsck functions
  • [1180c988] Fix read buffer overflow in bytecode dumper
  • [a27efd30] Fix overflows on slight reallocations of fixed size alloced buffers

IO:

  • [8e9afcf5] Fix error handling of mkdir
  • [97948c2a] Assign the result of a socket(2) call immediately
  • [af001c96,3a3eb7f9] Fix possible deadlock when waiting for mutex_threads

Profiler:

  • [ab2a0100,f8d5f300] Simplify code needed for GCC to avoid a warning

Spesh:

  • [a4d59492] Fix memory corruption by accessing freed spesh stats

Strings:

  • [4fea2f9a] Fix ShiftJIS decoder bug where a replacement is used and a decoding error is encountered after '\r' character

Tooling/Build:

  • [42bbff95] Remove msinttypes from $PREFIX\include as no longer needed

Download

2021.06

6model:

  • [0d63ddad] Set sc.idx during deserialization to avoid costly lookup later

Core:

  • [5ba30ed8,ae024a49,d8a16dfd,77756158] Try to trap concurrent hash accesses
  • [c53c0cdb] Fix a case of heap-use-after-free rarely affecting t/spec/S17-promise/nonblocking-await.t

Tooling/Build:

  • [9b7ab7c4] Put include paths needed for HLL builds in config
  • [91b1ccf6,bb767ece,192ea6bb] Define _GNU_SOURCE for GNU builds
  • [12cbafce] Disable GCC pragmas when using MSVC
  • [4751ca6d] Add note about macro confusion between gcc and clang

Download

2021.05

Core:

  • [a75a206a] Always log the type coming out of an nqp::decont
  • [5ba30ed8] MVM_fixed_size_destroy needs to free the safepoint overflow list
  • [961a1985,00eb44c7,c37ad91b] Free loaded libs during full cleanup
  • [bf5fa9bc] Make MVM_fixkey_hash_foreach static inline

IO:

  • [8f4cb5d8] Do not downcast bytes argument to write()/send() calls

Libraries:

  • [5ee04f0f] Ensure the version of libzstd is at least 1.0.0

Math:

  • [24420774] Convert MVM_num_{isnanorinf,posinf,neginf,nan} to inline functions
  • [179f5e50,31daadba,86e1289e,d6029122,31b13731] Implement MVM_num_isnanorinf using isinf and isnan if we find them

Platform:

  • [69f8b227,366c0e25,32c4c2d8,2c171255,b9860db6,cb01a109,4dcfda9a,da172e92,0e3fd6c3,6d449962] Cleanup the build system probes
  • [47e192b8,fa1eaacb,3073a3f9,44bd160e,3b8050f7,db6cca0e,9a70c3b6,54ab1516,29a421ec,e740b881,8611c7bf,d0a38131] Refactor the C compiler probe code and add a probe for log() for negative values

Spesh:

  • [c8c1b4f2] Fix spesh missing writes to containers
  • [14d9dd56] Fix missing gc_mark of simstackframe's arg_types
  • [e1d546ab,dc1f710bd5dafd9fb40ff431a8d86e646fa018a1,543258ab10120c1cefcec86cda62b408f740c164] Propagate spesh facts after guard elimination
  • [a1cfecd6] Fix getting garbage numbers after spesh optimized away smart_intify

Tooling/Build:

  • [9f82a46b] Add a test configuration for MinGW on Windows
  • [19db00f7] Update CI package index before installing packages
  • [5ab2a1d2] Remove unnecessary Windows-specific jobs from CI
  • [87cd6f5d] Only check for leaks on Ubuntu >=20.04
  • [67f5dddb] Run NQP/Rakudo under catchsegv in GNU/Linux CI jobs

Download

2021.04

6model:

  • [79027bdd] Fix inlines missing synthetic deopt points
  • [fd9f4bda,6670a64d] Constrain C pointer serialization to sizes <= INT32_MAX
  • [96d05ecc] Fix possible GC upset caused by half-deserialized STables
  • [63a69af5] Use the FSA for MVMActiveHandlers
  • [1de34262,c66b9e2,a6238bc] Fix a segfauult in VMArray's copy_elems
  • [726447d7] Fix a segfault on trying to use an untyped array with buffer write functions

Core:

  • [c10426a5] Remove nqp::time_i and nqp::time_n in favor of nqp:time which just return integer nanoseconds since the epoch
  • [53312b9f] Deprecate now unused graphs_s operator
  • [fe39d19f] Eliminate the sec_n, asec_n and sech_h operators, which are no longer used
  • [7da73d21] Set "allocate in gen2" in 2 last locations that create objects persisting for the lifetime of the interpreter
  • [a90b4ec0,16fe88f] Add a setup_notify handler and queue to nqp::signal to avoid race conditions when setting up a signal handler
  • [f7564376] Fix getobjsc returning NULL when the object has no SC
  • [572ec70c] Prohibit hllbool when the HLL doesn't have special booleans
  • [36237011] No longer require an exception as argument of nqp::backtrace, making creating Failure objects faster and avoiding the inconsistencies caused by inlining
  • [5bba90a0] Fixing generated backtraces missing inlined frames
  • [9b5d14c0] Save a malloc+free per frame when creating a Backtrace object
  • [41f420ed] Fix a memory leak related to Unicode hashes
  • [08525be5] Make smrt_intify specializable like other smrt_* operators
  • [b553aba6] Remove double-MVMROOT of result in MVM_args_set_result_obj

Documentation:

  • [8a5e05b0] Update README

JIT:

  • [d923f504] Only call MVM_jit_bytecode_dump_enabled if code is non-NULL
  • [3a62bdf7] Fix JITed ordfirst/ordat/ordbaseat returning 4294967295 instead of -1
  • [dba4b528] Fix expr JITed ordbaseat and getcpbyname returning 4294967295 instead of -1

Spesh:

  • [298298aa] Fix spesh removing not-really-dead code
  • [0fa35556] Fix possible segfault on exit when using spesh log

Tooling/Build:

  • [8c6322dc] Disable Travis and AppVeyor as CI, they have been superseded by AzureCI
  • [71dcb28a,8c979fd,7c39762,5fad749,e3decf0] Update Azure CI GNU/Linux versions, add old versions, speed up testing, disable not working coverage job and add a task to test --full-cleanup option
  • [2eda6f86,f9a964d] Fix when building to a directory which includes a '+' in its file name

Download

2021.03

6model:

  • [776d2ff2,f745dda5,1ae3d8e5,37e15bbf,d441bfdf,2cc6df5f,f24507d2] Improve serialization of C types

IO:

  • [cdbdec1a.0ff77ecd,63b213cb] Introduce platform/socket.h

Tooling/Build:

  • [23a7fb96] Avoid Azure CI failures on re-builds

Profiler:

  • [e316dc34] Fix confused profiler output in multi-threaded apps

Download

2021.02

6model:

  • [c6d2d355] Convert MVMSpeshCandidate to a REPR
  • [73a57f5e,1eefabe8,7d2975f0,d0de715d,7659b297,f7a61baa,4bb775c9, a65653f9,e0dec840] Fix 7 memory leaks
  • [8978904a] Fix segfault caused by mis-spesh of unbox of Num type objects
  • [f19e0e9f,8f4f53f8,92a4c537] Fix "Corrupt multi dispatch cache" panic in concurrent code
  • [110af6d1] Fix some use-after-frees of REPR data
  • [eda9326e] Remove some dead assignments
  • [79d0e374] Fix size calculation of VMArray's (read|write)buf when elemsize > 1

Core:

  • [c7eeda70] Avoid segfaults caused by repossessed native call sites
  • [6cfd5415,dbffbf36,d60a7492,0241b991,682af068] Fix 4 memory leaks
  • [02fc135f] Fix type mismatch in struct used for FSA_DEBUG
  • [3cc9a40c] Fix a use-after-free of an MVMThreadContext
  • [b8663f53] Fix a potential bug when all elements are individually deleted from a hash
  • [532d9187] Cleanup two redundant returns

Debug Server:

  • [659332b8,cebdc038,cebdc038,cebdc038,d99512ad,f0831919,e42b6614, 76204fa9,7c7c019a,7bcbb079,531f78b8,38dad45e,14708e98] Implement Invoke message
  • [1d288650] Fix compile warnings
  • [b83552f2] Add new HLL Symbol Request and Response message types

Documentation:

  • [aa3f015b] Clarify installation instructions
  • [c452e3f5] Use modern Raku extensions for scripts

IO:

  • [1a1f5248,1a915a4b,5bc5c88c] Fix 3 memory leaks
  • [22f1038a,f7b4e490] Change procspawnasync to explicitly take the program name

GC:

  • [823ec8ca] Fix compiler warning when GC_DEBUG is set to 3

Libraries:

  • [cf60e095] Update libuv to version 1.41.0

Spesh:

  • [22ecf439,7af946e3] Fix 2 memory leaks
  • [909d39a2] Let spesh optimize string equality

Strings:

  • [566a643e,77a66ab6] Fix 1 memory leak

Tooling/Build:

  • [21844ff4,60deb0ba,f0b09b3e,5e031c91] Get MoarVM building on Solaris
  • [36065af4] Update tooling scripts to use new Raku extensions

Profiler:

  • [1c1a9ce8,ee94a3f0,36a7c09c,d6c7962c] Fix 2 memory leaks
  • [7a87acc0] Fix potential buffer overflow
  • [e8d63661] Fix some more memory leaks

Download

2020.12

6model:

  • [ce0cbf58,372e4341,ed15b258,1e98d73b,93aae582,93a1ba85,04063d19, d65501b2,1b2867fb,1f695ac6,5048630d,d8ecb325,1dd5b3c7,c544ca9f, 897d2e98,3833c31e,9c527362,3ab21b9e,b3fa6df2] Hash allocation as a single memory block
  • [730596d0,62828269,bd6b0b32,6fac5ab2,eb33fb55,c7811142,99aab70e, 2b20583f,52a516f6,358e7fd5,491e8dcd,46634be8,b432533e,2913e0ac, 30fbd9ab,00f29c72,7d6107e6,a024f543,37c2d2d6,7caffe8a,2e208823, ffb2031b,fecfad19,d9dccf25] Store some hash bits in the low bits of the hashtable metadata byte, with the probe distance in the high bits, and the split between the two updated dynamically
  • [bed0a49f] Early exit gc_mark for VMArray+MVMHash if able
  • [9fbcdb4d] P6opaque's spesh must handle P6bigint values inline, as some are too big
  • [4cfde6ed,ac941c0d,8d68b18f] Eliminate static race condition
  • [5a21247e] Improve performance of repeated unshift calls
  • [b8653cae] Turn gen2 default allocation off on (de)serialization failures

Core:

  • [5f1712cb,741e6acd,868de8cc,9b9de0ab,60b47f62,175525ce,c2f3e04b,01c0950d] Replace MVM_box_{int,num,str,uint} and MVM_unbox_str with calls to MVM_repr_box_{int,num,str,uint} and MVM_repr_get_str
  • [490ee80d] Make curcode OP inlinable
  • [998ea76a] Calling MVM_exception_throw_adhoc in the spesh worker should be an oops
  • [fa9b6659] Use simpler stdio calls in exceptions.c where possible
  • [ec507862] Add MVM_set_running_threads_context
  • [0c3a38fa] Move MVM_{set,get}_running_threads_context to threadcontext.h
  • [34e06864] Simplify and inline MVM_nativecall_find_thread_context

Documentation:

  • [ae5f7ad4] Update some docs to Raku era

JIT:

  • [fbd386a0,7bdfb38b] On Apple Silicon with arch arm64, do not attempt to JIT
  • [3838247e] Add word and byte-sized return value macros to the lego JIT

Math:

  • [70cefcff] Minimally exact bigint/bigint => num conversion, including rounding

Strings:

  • [a6118ff2] New debug helper: MVM_dump_string

Download

2020.11

6model:

  • [af9ebffb,ffc8a269,75177470,38a2f815,2e8b5657] Fix interning of parametrics
  • [3c5deb2f] Implement serialize/deserialize of CStr REPR
  • [a37cd763,cbb92b03,dfbdcc9d] Eliminate pointer mismatch warnings on big endian systems
  • [2a98b8f3] MVM_nativeref_{read,write}lexi should handle uint8, uint16, uint32
  • [608b90eb] No need to MVMROOT root twice in get_attribute

Core:

  • [88722e8e] Fix zeroing of reallocated memory in MVM_recalloc
  • [1eda12a0] Use foo(void) instead of just foo() for functions that take no arguments

Platform:

  • [18e6f94e] Import pthread on Windows to get a type

Strings:

  • [cefec1fb] Regenerate Unicode database files for v13.0, v13.1
  • [2cac07c9] Regenerate unicode_db to fix minor comment difference
  • [4ced726f] Use MVM_{malloc,realloc,calloc,free} consistency
  • [55964708] swap_bytes in utf16.c needs to also swap bytes on big endian platforms

Tooling/Build:

  • [f212c081] Update generation scripts for Unicode 13.0, 13.1
  • [004e4bc7] The probe for pthread_setname_np needs prototypes from <string.h>
  • [6a2284e6,aa83051a] Report the lines that caused coverage
  • [7167b3d1,56fca429] Remove unused, unneeded and misspelled block filter

Download

2020.10

6model:

  • [fb992950] Add MVM_str_hash_iterator_target_deleted() for HASH_DEBUG_ITER

Core:

  • [df77d3cf] Simplify and optimize isprime_I
  • [8852896d] A more complete fix for the hash max probe distance bug
  • [a27c7882] Make lookup table in MVP_round_up_log_base2() based on uint8_t
  • [0015fd05] Re-instate meaningful hash iterator debugging inside HASH_DEBUG_ITER
  • [60070970] oops if MVM_fixed_size_alloc() is called for a size of 0 bytes

Debug Server:

  • [3c3a24bf] Fix two *printf size warnings reported on ILP32 platforms

IO:

  • [95d21703] Minor optimization of MVM_file_isexecutable on Windows
  • [882dbf04] Add a function to fix up the STD IO handles

Strings:

  • [a989f7b5] char can be unsigned. Rewrite the "is it ASCII?" test to handle this too

Tooling/Build:

  • [dc50eddd] For the pthread_setname_np probe, use an auto char array instead of malloc
  • [4f5787d3] Create a unicode.c with #include directives instead of generating it with cat

Download

2020.09

6model:

  • [497748f7] Split flags in struct MVMCollectable into flags1 and flags2
  • [effc5549] P6int: make set_int and get_int globally available
  • [a526f424] Remove tiny indirection from MVMHash_at_key/bind_key
  • [9c6bb7ab] Deserialization: rely on MVMHash being the known repr
  • [f029d3c7] Deserialization: use P6int repr being known in read_ref
  • [88efde45] Deserialization: rely on P6str REPR being known
  • [b37770a7] Deserialization: rely on known REPR in read_array_var/int/str
  • [9caec0fc] Deserialization: rely on knowledge of owned_objects REPR
  • [2dfe1c53] Introduce MVMP6str_get_str and MVMP6str_set_str
  • [429bd31f] Introduce MVM_VMArray_bind_pos
  • [f01930b5] Introduce MVM_VMArray_push
  • [1fdfdf59] Fix endless recursion and segfault in dump_p6opaque
  • [124fe2be] copy_to should call MVM_gc_write_barrier with the new key's address

Core:

  • [381e3d69] MVMObjectId.gen2_add is now uintptr_t, instead of an actual pointer
  • [50d3311c] Better specialize boolification of boxed Num

Debug Server:

  • [fc9dd762] Reorder alloc/free of c_key_name in the debug server

IO:

  • [b243d017] Fix MVM_file_isexecutable() when being root
  • [96d32a1a] Don't duplicate file existence checks

Libraries:

  • [29ce8171] Update libuv to version 1.39.0

Other:

  • [b74b94d5,c61c18a2,2c294cbf,215854f8,040e9d63,2a271e16,aba462b2, 3043135c,0418b7af,9b423954,54899926,c3df90ea,07c7b4fe,5e146efb, 14d11334,2bf3a4e2,cff7a0cd,1aacf8f4,4af853d7,0f0d2103,ebd07472, 9d0f1b32,1b20ca88,2181d48d,e6e5cc90,41175efc,1413f9ce,2cce7319, 1ea0e520,04843cb1,a02c8e70,d85f38d8,d359a605,9f83de80,58193f0a, d9c31aef,5660597a,e81219d4,be2f129c,b13d3de8,b08f8d45,f03ba463, 287d41eb,bac1ae1c,df72ab3d,d35c6e39,b0dac61c,ba847c25,754490c7, 390f30d4,a644e33f,2c7f96c2,282ea895,ac6c5be0,976a070c,0ac64285, 8a9586ee,8e24dc61,46d60c7b,3cf44324,6c4ba42f,e541297e,fbfc8a0f, ef6a37b,e3ad7ced,590bac47,322c2e0b,25c70bfe] Introduce new hash implementation based on Robin Hood Hash
  • [8a3857,489ab696,63665640,004ce49c] make moar --dump use memmem to find "MOARVM\r\n" string

Platform:

  • [87ad486f,07721999] Fix MoarVM building on Sparc 64

Profiler:

  • [6441fa6b] Return MVMHeapSnapshotSeen * from seen in heapsnapshot.c

Tooling/Build:

  • [c3941772] Add 'macroify_mallocs.p6' script

Download

2020.08

Core:

  • [c0ed9e32] Make extop marks reachable again in MVM_op_get_mark

Debug Server:

  • [b78b523d][2a9f0f06] Implement FindMethod op and add a name field for it
  • [7a2881a8] Implement simplest case of decont op
  • [f6f12f5a] Fix compiler warnings

GC:

  • [da237717] Move MVM_malloc_trim call after MVM_gc_collect_free_gen2_unmarked call

Strings:

  • [393ae579] Fix case insensitive string matching with an empty string

Tooling/Build:

  • [6d5a3b02] Make Configure.pl executable again
  • [1f182b48] Add new Configure.pl flag --dtrace which allows to put DTrace points in the code

Download

2020.07

6model:

  • [32ce5f97] Constant-fold spesh-time-known unbox/decont_n/s

Core:

  • [44504309,8e75378f,1d52655e,d564695f] Introduce the setthreadname op

Debug Server:

  • [707f6ce7,12780324] Debugserver Protocol 1.2: add thread "name" field

GC:

  • [06d8cdd1] Fix compiler warning in GC debug code

JIT:

  • [19374884] Add JIT templates for return_(i|n|s)

Other:

  • [a4cb0c51,2a3290df,183becd2,0a0a9ba9,953bac6c] Give io loop thread and spesh thread a name

Spesh:

  • [9a9ca434] Propagate facts in set elimination in one more case
  • [af5b89b6] Give known type flag when turning return to box in inline

Unicode:

  • [e5d597d1] Eliminate $annotate_anyway, which is no longer used
  • [1d00a2b5] Don't add placeholders such as "<control>" to the Unicode names lookup hash
  • [07dbc19a] Don't change the name to NULL (occasionally, if it starts with '<')
  • [0369f512] Unwrap the generated codepoint_names to one entry per line
  • [cfe6ed8f] Consistent whitespace for the initialiser for codepoint_bitfield_indexes
  • [23dfde97] Fix building on older compilers by explicitly stating gnu99 usage
  • [67c8413f] Fix ucd2c.pl script error propagation

Tooling/Build:

  • [0c651c23] Fix downloading of Unicode data

Download

2020.06

6model:

  • [e4ff69495] Setup inlined CStruct assigned during construction
  • [57c8bb84e] Fix CStruct handling of inlined attributes
  • [55ee90b17][a5061624d] Add MVM_HASH_(BIND|GET)_FREE macros
  • [3149bbb4f] find_repr_by_name now holds mutex_repr_registry when reading repr_hash
  • [c70587551] Where possible, iterate over lexical_names_list instead of lexical_names
  • [290f518af] Free REPR data before throws and where appropriate, set st-&gt;REPR_data to NULL
  • [7a799da87] Copy lexical_names_list when copying a StaticFrame
  • [2922f3d1a] mutex_container_registry is held while reading from container_registry
  • [3fe584876] Use correct encoding for deserializing strings
  • [4d0da364d] Wrap all access to lexical_names with MVM_get_lexical_by_name
  • [3658e4cd1] Don't make a lookup hash for lexical names for frames with few lexicals

Core:

  • [de8955822] Fix segfault in bytecode dumper when local_types is NULL
  • [72f720788] Move check (return value+exit handler) earlier
  • [c1c25e33f] Remove the unused tc parameter of cleanup_all
  • [17969cfb5] Remove redundant if when reading bytecode
  • [396c90039] Don't obliterate lib_name in exception text of NativeCall
  • [9e12424fb] Show index of outer lexials in bytecode dump instead of ??
  • [520c35124] Allow for explicitly marking the mainline_frame in the bytecode
  • [5d98d8eb6] Remove name assignment in struct MVMDLLRegistry

GC:

  • [1a46b0ae7] Possibly fix MVM_panic from entering GC during spesh

IO:

  • [ee8f3af70] Always handle proc exec arguments verbatim on Windows
  • [780271899] Fix reading closed dir handles on Windows
  • [157387214] Fix closing a dir never read from on Windows

JIT:

  • [7f33af885] JIT atpos/bindpos for known i64 array
  • [680a8cc72] Remove prof_enter JIT template
  • [9b60b37ca] JIT getcurhllsym and gethllsym

Libraries:

  • [6ab7dab5f] Backport a change in libtommath to fix build on x86 Windows
  • [a4b195936] Update libuv to version 1.38.0

Other:

  • [8eb552323] Fix some possible double frees
  • [565e55ce1] Fix the order of some MVM_calloc arguments
  • [3f6e6582e] Convert MVM_free+NULL to MVM_free_null
  • [f47e6ee5a][6cf18281d][c1c25e33f][8cd9ca87c][e736c1fb8] Free memory that had been allocated before a throw
  • [aeec50e0a] Simplify counting of lexical_names
  • [1bad1eff6] Simplify some MVM_string_ascii_encode calls
  • [9c758d5eb] Fix duplication of lists when MAST::Frames get written to bytecode multiple times
  • [a7f988940] Add methods WHICH and raku to MAST::Frame for easier debugging
  • [995c70ca8] Allow for MAST::CompUnit to share its lists with an outer compilation
  • [6c7ee4e8f] Add a method for clearing a cached index on a MAST::Frame
  • [c177e85cc] Remove two unused variables

Profiler:

  • [a48790029] Use FSA for alloc and dealloc counts
  • [2041902da] Remove a major source of space waste from alloc counts growth
  • [269d307a8] Add a layer of indirection between call graph and types/sf
  • [03c9154e8] Remove commented out profiler code

Spesh:

  • [9b60b37ca][af1475ec1] Spesh getcurhllsym and gethllsym
  • [12c7a44a8] Simplify MVMLexicalRegistry code

Tooling/Build:

  • [fc7922e5e][42a2424ba][eacb89a27][631008c61][932f5c208][b8506d45a] [ac94564c7][a99ab1e4f][852576e7d] Add an AzureCI test setup
  • [bc904b8bd][0257ecac4][0dc625f18] Add a new GCC plugin to find cases where an MVM_exception_throw_adhoc is possibly missing a free
  • [20a2a9114] Introduce UV_BSD to avoid duplication in Makefile
  • [06f041fb0][eafa7b39185a29f50271120b105d7087709f75f7] Fix build an FreeBSD
  • [fc092556b] Fix broken builds on older versions of GCC

Download

2020.05

  • [c59514234] Use the FSA for ConcBlockingQueue
  • [9294cbfcf] Use memcpy instead of strncpy
  • [bbb0cdbed,f03b23c63,12d572bb5,5863b0235] Fix some compiler warnings
  • [60a1a287e] Document cases where we know that no GC issues can appear
  • [070d0e66a] No longer MVMROOT MVMCompUnits as they are always allocated in gen2
  • [49ac793da,ad70770e1,e9baae8dc,a95e5ac32,845e8a3f1,a5e1fdd99, 651dc59de,8a7e56d9c,51ab0cb2f,c48e40b5b,62dc6c7f7,a39b63c99, 9b011b033,603831672,fd2742286,833339332,f9ca5cb05,f3cdc7575, 863e4104f,c2cf2f25b,7c7867c67,dae0220b0,142257b16,c93aa0098] Fix numerous very rare but possible GC bugs
  • [4fbd2d0e2,57e798527,d4637c1a0,755309975,1fd9efae4,00def9fd9, 3ecce8be8,20c4a4a24,24e9082dc,899fff969,8edc0b506] Add a proof of concept of a GCC plugin for detecting GC invariant violations
  • [ab089e947] Align offsets in P6opaque.c
  • 233609b52f] Fix some Clang compiler warnings in the profiler
  • [dcbdb571a] Fix SEGV in MVM_spesh_plugin_guard_list_mark
  • [bb27aeb11] Don't null-terminate string when stringifying int
  • [6546027a1] Improve handling of errors in native callbacks
  • [bceb3398a] Use smaller buffer for native int to str coercion
  • [ca6534d20] Fix deadlock when trying to report an unsupported NativeCall return type
  • [1aa555fe1] Fix segfault caused by freed comp unit strings when profiling
  • [dbed72d76,b6bba6945,54ca9090f] Improve memory usage of utf8-c8 encoding
  • [1c392b4e4,3758e9a82,5c9510c32] Make profiling more stable, resolving potential panics
  • [4dc99b55d] Add more ops to be profiled for allocations
  • [6975a6595] Fix bogus test
  • [e7fee00d1] Include system headers after headers local to MoarVM in the Makefile
  • [ec53e4dfc] Give MVMSpeshAnn an "order" field to improve diagnostic output
  • [05c290522,0ce4cbe94] Let encode take a preallocated buffer
  • [1bd5f19e0] Fix a tiny mistake in containers implementation
  • [6baf0de4a] Add a value_desc_cont container descriptor, which brings the needs of Rakudo's Scalar into the VM
  • [4fb85a017] Add missing break statement
  • [3438ad2a4,19a7154cf] Fix lego JIT implementation of takenextdispatcher
  • [24f663cf5] Free malloced data before leaving the function
  • [21fa394a8] Remove remnants of the old mast compiler to fix memory leak
  • [035eae193] Fix interned callsites getting leaked when fixing up inlines
  • [768e6c2f3] Fix invalid reads when freeing native callback cache
  • 282989882d] Fix a leak in JIT compiler
  • [92f1935d7] Fix potential segfault when failing to compile JIT code
  • [ada1cadaa] Fix a leak in the spesh thread
  • [ae71ac80d] Fix NativeCall leaking sym_name on cleanup
  • [c82ff9d73] Destroy vectors that were previously init'ed
  • [09b88efb0] Free some memory calloc'ed when making spesh plans
  • [48da6b291] Implement calculation of unmanaged size for CArray
  • [edb6f8726] Free compunits loaded from bytecode upon dealloc
  • [15e94eecb] Bounds check codepoint passed to chr
  • [a6bc2a2a6] Add missing args spesh coercion validation
  • [f2a52cf5d] Make OSR work in frames from invokewithcapture
  • [162b68b6b,b77aa1622] JIT nextdispatcherfor
  • [f47f53110] Update libuv to version 1.35.0
  • [9a706ba08,12a447318] Improve update-submodules.pl

Download

2020.02.1

  • [0596b8bad] Fix compiling with musl

Download

2020.02

  • [ca2a4c4c5] Resolve hostnames given a socket type, protocol, and passivity
  • [d606d9112,b1ff3d826,cf44a3686,cf44a3686,7920f2cc4,cfecd54bd,82f2719ce,e9a63e03f,296bedfa6, 3bbab8c4b,f56248139,5a2f4ed47,056c523db,192f0433c] Switch our libtommath to upstream's 1.2.0
  • [17935040a,1fbbb9335,a51428429,7877b0376,e67022405,10f98288c,f32b383cc,76d34faf1,d9c087f36] Handle return values from libtommath functions
  • [1d80b6038] Fixes for MVM_bigint_pow
  • [dfdaf19a8] Use right size+sign in comparison in MVM_bigint_rand
  • [9709537d9] Serialize the names of closures
  • [f47f53110] Update libuv to version 1.34.2
  • [0814ab4d8] Negative numbers should not be prime
  • [2296bcaed] New libtommath that builds bn_mp_set_double.c...
  • [f7a3a5ccd] Implement --git-cache-dir Configure.pl option
  • [4d7c7e142] Clear callsite of bottom frame when uninlining
  • [657b536cf,2cc4d3027] Update dyncall submodule
  • [978480b28] Mark cmp_tc static to avoid linker errors
  • [a71eee4c2] Allow closing handle bound to async proc stdin
  • [dd20883c3] Align MVM_args_get_required_pos_num with what the JIT actually expects

Download

2020.01.1

  • [105d09d62] Fix NativeCall libraries losing state during repossession
  • [7b8ed6308,a3ec7f315,921c8de84,9d053b8e9,8ac8afcc2,611532317,0995f19b9,fce208cb1,72941ee22, 9166ea591,61ac671ea] Fix several more compiler warnings

Download

2020.01

  • [d7b6855d3,7a93b2897,fc41473c0,3806735a4,ae66545c7,34537cfd0,4bf923dbd,596a0b287] Fix segfault caused by deopt all in NativeCall callback
  • [610e05fa0,c799de421,357adb45b,eb13ccad1,2ac1fa27f,ff1e55617] Fix relocatability of modules using NativeCall
  • [0e0f5bf6d] Allow getting absolute epoch startup time of VM in vmeventsubscribe
  • [9442b1a7c] Add support for '−' (U+2212) minus for nqp::radix(_I)
  • [cd64bf94c,0074094c2] Clean up MVM_io_resolve_host_name and make it more portable
  • [e35bd5f0e] Fix segfaults caused by JITed takehandlerresult returning NULL
  • [e94893f89] Fix frame walker segfaults caused by deopt of a caller on a different thread
  • [8f2d0d781] Detect files that cannot be synched also on MacOS
  • [be5f206c8] Remove bogus debug assertion in the GC's process_worklist
  • [4924390c7,eb3d981d7,47892d379,3c2a933b5,1de3c40c0,5464dd47c,e556879ad,1f31143e7,31a1b22c6, 631d361c6,795b320b0,bed44f1d5,3d2f8d739,21f9c3284,133b34c03,26c9750c4,7f486360b,70a768c14, 487f39577,d0d99f85c,153771bc1,03833e369,f26a1783c,758ef58b0,d81e9218f,1e731b6f9,f35e1d8c5, 91e3530ac,cac9b9a9d,4ce5570e2,d91f86ba8,de1bebc72,8ac4ac2cf,13b618c25,f59f8f5de,20804df5b, 14f581683,a335add83,ef7d0ecf4,8a9444b11,d4f20a191,61205646b,4f4c304ba,a06a0edf3,29acd43f0, 0150c1d82,9a59fdc9a,b6327c603,a0d545b13,85f5604e7,5d5b86e30,9bce55092,9ba1c25a5,4bdc7638c, 119a3f847,163da25a8,412c5db96,6953ca60e,c68ed2b03,a566f53f8,a173cc0a2,6ddcc0bb3,21215b756, 740ac6e02,0a80653b5,0f9013a91,9ee85e7c5,caaf83db6,ca6012a68,af34daa42,8d0b50d3f,97615be0a, 1b2f72e5e] Move to C99, compile with -Wall -Wextra and fix preexisting compiler warnings
  • [ccfc14fcb] Fix function pointer return values treated like uchar when using libffi
  • [23daabadc] Fix memory corruption after cancelling signal
  • [836396c74] Jit ordbaseat
  • [f10a31b43,a26d7fff8] [JIT] Add missing breaks

Download

2019.11

6model:

  • [8a5cc88a,af76729d] Fix incorrect conditional in deserialize_context
  • [59fa3b82] Fix for run-away CORE context on closures
  • [1b0950e3] Give higher layers a way to check if a nativecall site is set up
  • [47cd6c66] Fix the CStr REPR's copy_to function
  • [d52282b2] Fix possible deadlock in finish_parameterizing
  • [fd2659ed] Fix possible access to fromspace in code_pair_configure_container_spec
  • [366a7b7a] Add missing write barrier to MVM_6model_get_how
  • [a4a599e3] Fix possible access to fromspace in MVM_code_location
  • [0864cb76] Don't crash with read-int/write-int on unsupported reprs
  • [177706fe] Better error message for P6opaque in multidim functions
  • [b7151da7,d76ebbe4] Fix possible memory corruption in CStruct's, CPPStruct's and CUnion's get_attribute
  • [289ccd8c] Don't segfault when trying to get the debug name of a NULL object
  • [1a973a37] Add elem count in ConcBlockingQueue to telemetry log
  • [4a90335f] Fix possible access to fromspace in CStruct's get_attribute
  • [39a4f05f] Fix possible segfaults related to corrupted CPPStruct STables
  • [23fd0449] Fix CStruct's compute_allocation_strategy leaving the allocate_in_gen2 flag on by accident
  • [ca9d44f2] Fix possible access to fromspace in MVM_repr_dimensions
  • [0a12e3c4] Fix ConcBlockingQueue possibly unshifting an outdated item pointer

Core:

  • [a5d553cd] Add missing concreteness checks to most array ops
  • [95f69be8] Implement serialization of NativeCall reprs with dyncall
  • [efeec455] Dynamic library loading works with unicody paths on Windows
  • [e0e3ea9f,fa2e4f21,fa2e4f21,01f85c8b,ddf5b56b] Add more context to error messages
  • [55b6f734] Make sure autobox on return and slurpy nameds uses int cache
  • [e9e0731a] Make sure intcache type is rooted
  • [9138c699] Fix possible access to fromspace in MVM_frame_move_to_heap
  • [3f97d73d] Fix a subtle bug in instrument_graph
  • [8622835b] Fix possible memory corruption in MVM_frame_capture_*
  • [90252a8f] Fix possible access to fromspace in MVM_args_set_result_(obj|str)
  • [1fd0fdcd] Fix stack simulation losing track in some cases
  • [cfc5d000] Give error message improvement to libffi as well
  • [703fd647] Fix a nativecall error message in dyncall
  • [3e715b42] NativeCall: output index of argument with repr mismatch (#1141)
  • [e2f57637] Fix bogus "Decoder may not be used concurrently" after exceptions
  • [00a1ddb9] Fix GC processing uninitialized data in autoclosing of frames
  • [2dbf6225] Fix comp units using obsolete pointers to their filename
  • [e0bc6e2f] Fix slurpy arg handling possibly accessing an outdated arg context
  • [64a6f69c] Fix possible invalid memory access when throwing exceptions
  • [4ab1d425] Fix autobox possibly writing to an outdated target

Debug Server:

  • [85ce8ecc] Better error if getaddrinfo in debugserver fails
  • [b1bb9349] Prepend "Debugserver:" to errors/output originating from the debugserver

Docs:

  • [56fa7a0c] Improve naming in documentation
  • [1eeae85f] Document heapsnapshot format version 3.1
  • [ee18678e] Update "Features" part of readme

GC:

  • [b0b3fc8c] Fix obscure deadlock in run_gc
  • [329f669c,ea9b29e8] Fix race condition with exited threads still in the thread list
  • [bcc785d2] Fix overflow objects still belonging to exiting thread
  • [aa2270c7] Fix overflow objects getting freed prematurely on thread exit
  • [68666832] Fix segfaults in GCDEBUG_LOGs
  • [539f1d03] Fix possible access to fromspace in finalize_handler_caller
  • [fdc5eacf] VMEvent: put gc_promoted_bytes_since_last_full in GCEvent
  • [aa934648] Fix swapped parameters in call to profiler_log_gen2_roots
  • [1850b6c5] GCEvent shall report gen2root count from all TCs
  • [6f72c92f] VMEvent: divide timing numbers by 1000
  • [3faf1985] Introduce vmevent, "VM Event Subscription"
  • [24e2986a] Do heapsnapshot/instrumented data gathering earlier in GC
  • [7e190207] Log GC start a little later to fix profiling
  • [35101eb8] New GC debug level (3) triggers the GC on each mem allocation

IO:

  • [acd1156b] Use more appropriate flags with getaddrinfo
  • [16485506] Fix format strings in calls to MVM_exception_throw_adhoc
  • [36c35db1] Make MVM_file_is_rwx honor root and groups
  • [379ec77a,d9a067d4,2f4798b8,3fa99b4d,2f4798b8,...] IP6NS Grant: Improve hostname resolution
  • [5dfed008] Fix possible SEGV in async_spawn_on_exit
  • [6926a492] Fixed file permission interpretation problems around groups
  • [241be06b] Fix possible access to fromspace in MVM_dir_open
  • [2c9a92e9] Add a missing gc root for asyncsocket listen setup
  • [9c896d6c] Add gc pressure for process output read ops
  • [606c4437] Fix possible access to fromspace in UDP socket setup
  • [57a6d475] Add a missing gc root for asyncsocket listen setup
  • [bf3c6a97] Fix warning about directive in format string
  • [93739d56] Improve error when failing to spawn process

JIT:

  • [d5f5185b] We should not overwrite assigned type
  • [97e26c01] Fix bug in takedispatcher
  • [e594fbcb] Add missing cast to sp_p6oget_bi
  • [f8eca66b] Fix exprjit sp_p6oget_bi
  • [17475350] Syntactically distinguish let keyword variants
  • [27dcb378] Implement exprjit of sp_bind_o
  • [2ac137c3] Use the new deopt index for synthetic guards
  • [e4a756c6] Deoptimization in the expression JIT
  • [f8b05151] Use correct deopt index for guard opcodes
  • [d79e7d5a] Revert template compiler back to v5.10
  • [10404ee5] Jit the log, exp and ceil ops
  • [7f828342] Handle NaN in FP branching comparisons
  • [6c622553] Fix floating point comparisons
  • [7f8061a5] Support floating point comparisons
  • [27e9f979] Functions that return floating point values
  • [fb75f9a6] Compile with numeric function argument
  • [09c0df4f] A few more numeric tiles
  • [4002c19b] Make jit-dump.pl useful again
  • [d79c8306] Use the correct registers for numeric tiles
  • [cebb89ce] Basic floating point templates and tiles
  • [c9aebedb] Handle floating point registers better
  • [a62a2ff2] Spill live range compatible with requested set
  • [6b00c2b3] Live ranges are given register set
  • [4d65e467] Support floating point registers in load, spill and copy
  • [87710a12] Floating point support in the register allocator
  • [821e8535] Make STORE polymorphic on input
  • [3069ed4b] More rigorous type checking
  • [05297fa6] Split type check from expr type resolution
  • [0f33b570] Basic expression support for floating point operators
  • [c3af0d66] Try to select the first input register as output register
  • [b58bbf0f] Enfore input/output registers better
  • [9d34cb64] Enforce output-operand form in register allocator
  • [43138989] Minor debugging / structure improvements
  • [ed1ed12b] Reorganize JIT register definitions
  • [cfd81276] Parse oplist operands
  • [4407f68a] Move JIT-compile support libs to tools/lib
  • [e5076fc5] Autogenerate tile predeclarations
  • [b49fa493] Use bitmap for free register set
  • [9c969b1b] Add missing write barrier to lego JIT implementation of setcodeobj
  • [f0978d6a] Jit getuniprop_(int|bool|str)
  • [e5321a36] Jit captureposarg_n
  • [9f679f32] Jit and add a template for smrt_intify

Libraries:

  • [0f05efbb] Update to libuv version 1.33.0
  • [d24f6952] Use updated dyncall library with "execstack" fix
  • [eed5fe14] [DynASM] Take in REX encoding fix

Math:

  • [c390b30c] Fix possible access to fromspace in MVM_coerce_sI
  • [a001b7e4] Fix many memory corruption issues in bigint operations

Ops:

  • [d189b29b] Make socket family handling portable

Other:

  • [bb239a91] Fix MVMSpeshPluginState type defined twice
  • [5f177f58] Make MVM_HASH_RANDOMIZE properly control hash rand
  • [ff4f6031] Factor out run_deserialization_frame() to avoid code repetition
  • [b26638eb] Add MVM_vm_run_bytecode() as alternative to MVM_vm_run_file()
  • [1a8988c0] Add "use 5.020" to expr-template-compiler.pl
  • [7d23bd26] update_ops.p6: properly deeply clone spans data
  • [e4b87265] Add reference to roast Unicode update instructions

Platform:

  • [87d7f58d] Deduplicate and shorten open and fopen wrappers
  • [e127b849] Improve Unicode handling with paths
  • [9d6f4493] Fix possible access to fromspace in MVM_platfrom_uname

Profiler:

  • [0b531f9c] Implement the MVM_CONFPROG_DEBUG env var which enables control of confprog
  • [70bcaf90] Make unicode path fixes compile on non-Windows
  • [6ecbf6e0] Profiler: Fix uninitialized field in MVM_profiler_log_gc_start
  • [9f24debe] Profiler: Prevent overflow in the 'total exclusive time' calculation
  • [81f9ccdf] Profiler: Fix call graph node getting missed by the GC
  • [8e7e1210,289e9dfc] Silence some clang warnings and fix "mixed code/declaration" error
  • [5534e95f,1e448ece,...] Add new heapsnapshot format with zstd support
  • [4ca494f5] Profiler: Expose number of stolen gen2 roots
  • [87912784] Profiler: Put "stolen" gen2roots in profiler data
  • [370b9a29] Heapanalyzer: add debug "DUMP_EVERYTHING_RAW" to v3

Spesh:

  • [0f0e6d3a] Work around MSVC not coping well with preprocessor instructions inside an MVMROOT
  • [c61236f9] Fix access to freed memory in resolve_using_guards
  • [acb04a44] Fix possible memory corruption in resolve_using_guards
  • [3d83cb46] Add a few missing static keywords before a few functions
  • [40fcdb7e] Fix incorrect return type in get_effective_size
  • [3e8652ea] Add missing root for VMEvent SpeshOverviewEvent
  • [189ef298] Update deopt idx if we clone the deopt annotation
  • [dfbc5a45] Make deopt use index rather than target address
  • [c3e38bb9] Turn pushes/pops into MVMROOT again
  • [cf3b545e] Reinstate callsite during uninlining
  • [38915b93] Tweak spesh logging's new compunit handling/quotas
  • [b2287bc4] Fix possible memory corruption of spesh plugin guards by untimely GC
  • [557056bf] Fix formatting code warning in an error path
  • [e7bad16e] Fix pointer type mismatch warnings with a cast
  • [204eb28f] VMEvent: new event type: SpeshOverviewEvent
  • [269b73ee] Add missing break statement
  • [03d3db93] Sanity check if hash ever gets an initialize func
  • [aa2e96c4] Comment when slurpy hash has been created
  • [43e3d114] Output duplicate getarg ops in spesh log
  • [46516af4] Lower slurpy positional args to a set of getarg ops
  • [09bd015c] Give arg spesh more comments for when it bails
  • [d1af2f2f] Handle arg spesh native param passed a Scalar
  • [5c787f37] Only getlexperinvtype → constant if only one type record exists
  • [5b174f52] Allow param_*_ins ops to spesh when Int/Num/Str present
  • [b3469f92] Actually optimize smrt_intify when able
  • [654a136d] Fix panic in spesh when deserialization causes GC during fact finding
  • [4227c713] Fix possible invalid access to fromspace in spesh worker startup
  • [f18bfadb] Add missing MVMROOT in MVM_spesh_plugin_register
  • [5d8095b8] Spesh optimize smrt_intify like smrt_(num|str)ify

Strings:

  • [da19661e] Reset utf8 pointer to point at original string before use
  • [ff007f2f] Use right types/format string, pull dup code out
  • [0e412038] Show chars near bad bytes in another encoding path
  • [fece31c5] Free the correct things in encoding error path
  • [5f14524a] Show correct bad bytes in encoding errors
  • [5cf5c56b] Simplify freeing of buffer in UTF8_REJECT cases
  • [07983e4c] Fix possible access to fromspace in MVM_string_flip
  • [b49b5202] Fix issue #1163, gb2313 clang warnings
  • [8211189c] Add the reference of GB18030
  • [986f3403] Add GB18030 encode, decode and decodestream support
  • [695a24de] Fix memory corruption caused by missing write barriers in string ops
  • [7d7a2b73] Remove large sections of zeros in the conversion table
  • [709bb7ed] Add comments about how the conversion tables are generated
  • [5ffa9264] Generate conversion table from a source file
  • [bca6f392,f46e5d7e,07f6305f,6730e51f,e78080f6] Fix possible access to fromspace in some string functions
  • [78164189] Remove bogus MVMROOT from MVM_unicode_string_compare
  • [b614a7b4] Update collation data to Unicode 12.1
  • [8f425147] Update Unicode to 12.1
  • [9e6abe46,fc56c02c] Use a decode_handler function for decodestream
  • [75f1c965] Fixed an overflow problem
  • [9213f2f0] Fix duplicate includes
  • [73f28d38] Add GB2312 encode, decode and decodestream support

Tooling/Build:

  • [32003eec] Use make exit status as own
  • [8efd3825] Make Configure.pl and tools/update_ops.p6 executable
  • [277676a1] Add better support of PEA to spesh bisect
  • [fcdb8433] Configure.pl: Add missing return in has_native_library
  • [2bcb911d] Separate includes from submodules from system-wide includes
  • [53a6308c] Get moar build working with spaces in path

Download

2019.07.1

Core:

  • [79d21189] Bump level until after instrumenting instead of before to fix various races
  • [36cb624e] Avoid various races in profile/coverage/debug
  • [cb5787aa] Fix possible memory corruption in bindkey_*
  • [e99af058] Fix pointer arithmetic in inlined CArrays in CStruct/CPPStruct REPRs

Debug Server:

  • [58c54a1f] Unbreak debugger instrumentation
  • [052966bb] Init debug socket for Windows

Platform:

  • [7360ee5d] Fix GC rooting in MVM_platform_uname

Profiler:

  • [1c274772] Don't return null from filename()
  • [df226330] Add band_i, bor_i, bxor_i ops
  • [8f4997b3] Fix dealloc profile logging by following any forwarder

Spesh:

  • [536cff8b] Put limits on local and inline counts for inlining

Tooling/Build:

  • [cfead8e2] Only use -fno-ret-protector with Clang on OpenBSD if the JIT is enabled
  • [2501678a] Fix Configure.pl failing when --prefix /usr is passed

Download

2019.07

6model:

  • [065b2b42] When there's no .^find_method nor method cache, output debug name
  • [36469a62] Throw an exception instead triggering a segfault when trying to HAS before a type is defined
  • [fe472ce9] Enforce wb in get_attribute of C repr. Fixes non-deterministic segfaults in anything that non-trivially uses CStruct/CPPStruct/CUnion reprs
  • [9ed86e4c] Eliminate an unused collectable flag
  • [24b3ef1a] Fix inlining CStruct and CUnion in CPPStruct REPR instances

Core:

  • [f2ee9baa] Add freemem and totalmem ops
  • [1c279a23] Don't needlessly install VMNulls into ->work to reduce cost of entry into spesh'd/JIT-compiled frames
  • [f8743c11] Add type name to exception if a thing can't be coerced

Debug Server:

  • [61f0b7e8] Silence clang dangling-else & return-type warnings

Documentation:

  • [145149c2] Update bytecode docs to define SC acronym
  • [807c2dab] Add contribution guidelines

IO:

  • [3241e9f5] Fix memory leak in socket_read_bytes
  • [6bc095d8] Move freeing of event_loop_wakeup to after uv_loop_close

JIT:

  • [6053919e] Add exprJIT template for strfromcodes
  • [b55658b9] Store first and then initialize in 'create' expr template to fix potential race
  • [69033692] Fix decodeconf and add decoderepconf legojit
  • [c160a22f,69033692] Add decodeconf and decoderepconf ops to legojit

Libraries:

  • [a515819b] Update libuv to version 1.29.1

Math:

  • [0e7599e7] Throw if MVM_is_prime called with too many rounds
  • [2fe2f588] Use a cheaper way to force_bigint
  • [aad6fdc0] Greatly reduce allocation churn on bigint ops
  • [c5545770] Use mp_set_int in force_bigint when we know we have a 32-bit int

Ops:

  • [c20f896f] Skip numification in mast nodes code

Other:

  • [5b5e7f19] Clean up CMP object files on Windows when running make realclean
  • [75602b0e] Add the ability to detect the malloc_trim() function

Platform:

  • [dc3f36c0] Remove compiler warning that was accidently left in
  • [aeae1033] musl does not have malloc_trim, so only use it w/ glibc
  • [42ea81f3,aeae1033,75602b0e,dc3f36c0] Ask malloc to free kernel pages on GC collection to reduce max memory usage

Profiler:

  • [fbd48017] Remove profiling overhead from profiles
  • [807b92f9] Use strndup instead of malloc+strncpy

Spesh:

  • [ed1ce32f] Silence -Wlogical-op-parentheses warnings

Tooling/Build:

  • [44b69939] Fix warning in Configure in non-relocatable builds
  • [55b27c2a] Fix -fno-ret-protector flag passing on OpenBSD
  • [5f29b094] Fail when being requested to do a relocatable build and we can't
  • [b5172363] Default to doing a non-relocatable build

Download

2019.05

Other:

  • [97e28f07] Implement --no-relocatable Configure.pl flag.
  • [2b75a2ff] Use a relative RPATH in moarvm.
  • [62b58164] Update libuv to 1.26
  • [8f8026b1] Add MVM_execpath() to public API, a forward to uv_exepath(). The function is helpful to implement wrapper programs

6model:

  • [8fef1999] Reject out-of-bounds unbox slot numbers
  • [275098a2] Don't accept out-of-range repr ids
  • [7b112da3] Guard SCRef initialize against null SC
  • [ab21dd17] Guard serialization read against < 0 offsets
  • [bacfcf96] Heapsnapshot: Calculate CStruct unmanaged size
  • [fab0c4bd] Only Opt 32/16/8 Bit Access On Signed Integers
  • [9a4bbda3] Activate getattr_i Optimization On CStruct
  • [834db592] MVMSpeshLog: implement describe_refs for heap profiler
  • [ea83e229] ConcBlockingQueue: implement unmanaged_size for heap profiler

Core:

  • [2e87a0a0] Use C bitfields to save space in MVMOpInfo, makes these structs go from 40 bytes to 32 bytes
  • [65441793] Activate 2nd argument count check for invocations
  • [c90bd6b4] Guard getdynlex against no caller frame
  • [a92be015] Guard some ops in interp against type objects
  • [35976e24] Fuzzing: guard frame invoke error against null outers
  • [c8a44b8d] Make sure invalid indices for lexical vivify throw
  • [c10fee65] Handle inlining of outer lexical binds
  • [64679b99] Allow selection of max inline size per HLL. Makes it possible to set a maximum inline size limit per HLL
  • [5f706515] Simplify abs_n to just use fabs and also jit it (#1073)
  • [d1590671] Add uname op
  • [b51bb132] Add a newmixintype op
  • [28e2b38b] Add a smrt_intify op

GC:

  • [3dff3a2a] Ensure only one thread can take a heap snapshot or dump data at the same time

IO:

  • [741779ac] Better error handling of process stdin writes. Detect the case that we already closed its stdin handle
  • [adefbe4d] Avoid unbounded growth of active async task list
  • [0a9ccb11] Use UV_MAXHOSTNAMESIZE as cross platform MAXHOSTNAMELEN

JIT:

  • [645a70c0] Add backtrace and backtracestrings lego and exprjit template (#1085)
  • [3c2e98d4] Add istty_fh legojit (#1084)
  • [9e5196d8] Add typeparameterat exprjit template (#1080)
  • [0c6b3b1b] Add indexingoptimized exprjit template (#1078)
  • [e1dc1b39] Add fileno_fh legojit and exprjit template
  • [d568e681] Add typeparameterized exprjit template
  • [6421e512] Add resume exprjit template
  • [0b45ec7b] Add replace exprjit template
  • [5a6b9ea3] Add clone exprjit template
  • [33751f43] JIT sp_bind_i32 And sp_get_i32
  • [c5e43265] Make JIT of sp_get_o match the interp
  • [bfbfd0c1] JIT sp_bind_i32

Ops:

  • [081823ff] MAST Ops: remove redundant range checks
  • [8eb232db] Fix lexical to locals debug_map getting written to bytecode files in random order

Profiler:

  • Introduce confprog to allow profiling of specific subroutines
  • [423a9cc7] Fix misc. problems with profiling
  • [95094ae2] Count deallocated objects categorized by life time
  • [38252329] Heapsnapshot: properly handle empty debug name

Spesh:

  • [9cd8a06d] Set the default inline max size to 192 bytes
  • [5e363398] Avoid a bunch of malloc/free churn in code-gen
  • [ade57cee] Learn Type Fact About nativecallcast
  • [0d2968e7] Also call optimize_bb for unspecialized inlines
  • [bc98cb94,0d2968e7] Run optimize_bb over inlined code, Also call optimize_bb for unspecialized inlines
  • [5994d89c] Add facts to null op during optimize
  • [ff9870ec] Lliberalize eliminate_set to cover inlines
  • [960f4b67] Chase PHIs when retaining deopt info for inlining. Otherwise, we might not keep things alive for deopt points that need them to be alive if it was the PHI itself that got marked with deopt usages
  • [e41e355e] Add vivifying non-p6o object ops: sp_getvt_o and sp_getvc_o

Strings:

  • [295cde4f] Avoid duplicate checks in hash access

Tooling/Build:

  • [cc06ad28] Never build a relocatable moar on OpenBSD. OpenBSDs implementation of $ORIGIN in rpath is unreliable
  • [49c1eb07] Check for mixed toolchain on macOS
  • [12bfa1b6] Never build a relocatable moar on AIX
  • [0cb5eca4] update_ops: don't generate prepargs, as nqp does it by itself
  • [0e94d75a] Temporarily use -fno-ret-protector when building on OpenBSD to prevent segfault

Download

2019.03

Spesh:

  • New partial escape analysis allows objects to be replaced by registers
  • [03d4271c] Spesh optimize get/bind attribute for int32
  • [ff9666bd] Fix predecessor pointers when merging basic blocks in spesh
  • [75d5bc6e] Fix memory leak in inlining
  • [d42fd895] MVMROOT before allocation
  • [9eac21cb,d42fd895] Fix broken macro expansion on Windows. Fixes issue #1048
  • [215430c4] Lower bindattr_i On CStruct Objects
  • [a37c0bff] Fix wrong type selection for push_* And pop_*
  • [a6dad31d] Copy deopt usage info when doing guard reg split
  • [3629362f] Add deopt uses as needed for scalar replacements
  • [2d936a5a] Remove unused variable
  • [c29536d7] Implement deopt materialization of native attrs
  • [4081221b] Log target register of eliminated allocations
  • [0f5e2441] Correct a thinko, remove an unused variable
  • [357b8abc] Distribute deopt usages when inlining
  • [6d01c3cb] Use correct indexes for deopt usage chain lookups
  • [84451aa3] Switch on using the PEA deopt mechanism
  • [166d0acf] Log deopt offset to index outcome
  • [b4e059bd] Don't forget synthetic annotations
  • [62a8ae10] Only add deopt in for allocations we replace
  • [9562c74e] Note if deopt offset -> index resolution fails
  • [4f08a861] Materialize objects with object attrs during deopt
  • [77f36083] Don't confuse deopt offsets and indices
  • [6e1bcce9] Merge materialization deopt info during inline
  • [f85ae3c2] Record registers holding attrs to use in deopt
  • [ae3de1b6] Sketch out creating deopt/materialization info
  • [edfc8ffe] Keep a set of tracked registers
  • [fe7930e4] Dump materialization data
  • [e9eb9b32] Target register goes with deopt point
  • [7ee34c23] Preparations for deopt materialization
  • [685ba324] Fix inline end annotation motion on BB deletion
  • [072bf4b6] Handle non-merge case of PHI
  • [ba1f7cf3] Make it easier to grep out the EA opts
  • [1bfdb947] Do guard elimination during scalar replacement
  • [d9a0dd8b] Allow flow control, but not loops
  • [c19afcd5] Walk graph in reverse postorder for PEA
  • [895b1b0e] Properly tweak CFG after control flow op rewrite
  • [66d96aec] Handle int64, num64, and str attributes in PEA
  • [ac8f2095] Implement minimal escape analysis and scalar replacement (PEA)
  • [4c191154] Add BOOTHash to spesh cheat list
  • [3f5204d7] Disable inlining when running the debug server
  • [7fc6be10] Add a limit on spesh plugin guard set size
  • [909d354c] Allow dead instruction elimination in inlines
  • [0fef86cb] Save deopt usage info when writing bytecode
  • [c5bc342e] Fix rakudo build failure on big endian architectures
  • [07fe8e4a] Teach optimize_smart_coerce About Boot Types
  • [16d03884] Put inline-preventing insturction in spesh log

6model:

  • [19515dbd] Fix segfault in dump_p6opaque when an attribute holds a VMArray
  • [d626337b] CStruct bindattr_i Opt Shall Release Its Temp Register
  • [6ecbeb1f] DU Chain Of CStruct bindattr_i Opt Was Wrong
  • [2bc5ce7b] Fix segfaults related to corrupted CStruct STables. Fixes issue #2564
  • [07de9219] Fix compiler warnings on some printf specifiers
  • [45d15efe] Turn elems On VMArray Into Direct Memory Access

Core:

  • [682ca82f] Fix nativecall refresh clearing used child object pointers
  • [a6939d7c] randscale_n and rand_I are not pure ops, so don't mark them as such
  • [5431d50f] Ensure last_payload and plugin_guard_args are valid so spesh plugins can be used outside speshresolve
  • [600ded2b] Only read debug lexicals in bytecode version 6
  • [8c8b0b0f,600ded2b] Minimal handling of bytecode format version 6, Only read debug lexicals in bytecode version 6
  • [473324ee] Notice Specializable Instructions Everywhere In Bytecode
  • [1404d516] Support endian switching in writenum and readnum

Debug Server:

  • [d66c0708] Use debug local names in debug server

Documentation:

  • [6f92a01d] Specify debug name mapping bytecode format changes

IO:

  • [631cfdf6] Call strerror for directory errors so we get error text not just an error code on POSIX platforms

JIT:

  • [7ca62826] JIT compile getlexref_u*
  • [ce8249a3] Fix JITed extend_u8 accidentally extending 16 bits.
  • [ac078196] Fix rw args of native calls not getting updated if JIT compilation fails
  • [f818bd6d] Support double type arguments in NativeCall JIT
  • [f55ecdec] Fix harmless off-by-one preventing optimization
  • [e459d36b] Also JIT stat and lstat
  • [d6d057a2] Jit (open|read|close)_dir
  • [30ab2af3] Add op name to JIT "bailed completely" error
  • [583a2de8] LDLIBS should go after the source files, before output to fix TravisCI
  • [2ee7596d] Fix call to memcpy with NULL *src in lego JIT compiler
  • [45cf9013] Compile minilua with only the needed flags so it doesn't need to be compiled every time. See issue #999
  • [c9cd9880] Fix JIT compiled getcodename not always dieing on type objects
  • [caf7e4ff] Fix jump condition in JIT compiled getcodename

Math:

  • [eccbc854] Make MoarVM compatible with old & new LibTomMath. Fixes issue #1034
  • [f7204a3e] Fix name collision with existing LibTomMath Function. Fixes issue #1032

Ops:

  • [cbb6abc5] Add debug map state to MAST::Frame
  • [03304a37] Remove internal ops from MAST NQP modules

Other:

  • [5ed7108d] Remove obsolete MAST compiler
  • [6b42653a] Add the MVM_SPESH_PEA_DISABLE envvar to turn PEA on/off

Profiler:

  • [64d41cc1] Integrate scalar replacement with profiling

Strings:

  • [ec8a240e] Remove some unused variables in utf16 decode to fix issue #1030

Tooling/Build:

  • [f938f08c] Add some safety checks for macOS due to homebrew binutils and Xcode incompatibilities
  • [a1cfd702] Configure.pl: fix cross-compilation
  • [60c152f6] Create a GNU type TAR archive to fix archive extract using AIX tar

Download

2018.12

6model:

  • [6788cab6] Fix repossessions that cause object size "changes"

Core:

  • [987269ea] Get readnum op working, try for 32-bit num support
  • [30088ed4] Fix memory leak of MVMFrameExtra
  • [1343702c] Fix segfault on {read,write}{uint,int} on a type object
  • [a8e63d2f] Sign extend values when reading less than 64 bit in readint
  • [8e078a2f] Improve handling of failure to join a thread, throw instead of handling and provide exception text instead of just the error code
  • [437d5b01] Fix big endian (read|write)u?int of < qword on big endian systems
  • [35ea9581] Fix bytestream ops from always converting to big endian if a switch is necessary
  • [1c3b0c93] Fix possibility of label id clash in bytecode compiler

IO:

  • [a50a9d0e] Use uv_os_gethostname instead of gethostname to ensure winsock is initialized on Windows
  • [a994f88d] Use larger buffer for gethostname when available
  • [1dc540f5] Reimplement async socket introspection
  • [05384f21] Add a cancel handler for filewatch tasks to prevent leaking filehandles
  • [7c5d93ef] STAT is already used by AIX, so rename to STAT_t. Fixes AIX compilation issues

JIT:

  • [b8ba4707] Support endian switching in read{uint,int}
  • [73b079c3,b8ba4707 437d5b01 35ea9581 c32000ba 652b2f4a] Support endian switching in write{uint,int} and read{uint,int}, fix big endian {read,write}{uint,int} of < qword on big endian systems, use read_buf also when switching endianness
  • [c2952f9e] JIT compile coerce_sI op

Platform:

  • [6455d1f6] Fix double free in platform/sys.c

Spesh:

  • [7d353030] Set callsite in frame for JIT spesh plugin resolve. Otherwise, we won't properly mark the args buffer which can lead to us processing outdated args
  • [0d5f389c] Don't dump "Facts" in "Before" part of spesh log
  • [c2640e1d] Discover type Facts of coerce_sI op

Strings:

  • [4a7da329] Fix a case where the UTF-16 decoder would have a corrupted final codepoint
  • [fc495427] Use sys/machine.h on AIX systems in csiphash.h to fix compilation on AIX

Tooling/Build:

  • [caf10703] Bring trace spesh optimizer GDB script up to date
  • [ef9e65ca] Make sure libatomicops build file is removed with make realclean
  • [7eb00c0b] Add missing libuv file to Makefile.in for AIX
  • [474b5264] Enable detection of 32 bit AIX systems in Configure.pl. This allows the compiled program to use a large memory space

Download

2018.11

Other:

  • Rework the way bytecode is generated. Eliminate most of the MAST classes and allow us to compile bytecode without having to have everything in memory at the same time. The new compiler can walk the QAST tree and turn what used to be multile MAST objects into a single buffer. Now the QAST is turned into bytecode as directly as possible. This greatly decreases the maximum memory used for this operation.
  • [d590f25b] Ensure make realclean removes minilua binary
  • [9ef725d5] Always rebuild minilua to work around issue #999
  • [d721125d] Fix MVM_operand_type_mask in lib/MAST. The old mask was not extended when unsigned types were added.

6model:

  • [7ba02259] Correct named argument type tuple index calc. Fixes an out-of-bounds memory access. Resolves issue #996
  • [9f19fffa] Add new write_buf repr function to speed up write* ops

Core:

  • [dcb1dce9] JIT compile param_rp_u
  • [65db5b4d] Implement writeuint op
  • [f6fb4646] Make bytecode dumper more resilient against invalid bytecode

Docs:

  • [43c5cd4a] Add mul exprjit op to documentation

JIT:

  • [7a110b71] Add hllboolfor exprjit template
  • [9b2ab169] Add radix_I exprjit template
  • [0accc8ce] Add coerce_* exprjit templates
  • [5167d102] Add extend_{u,i}* exprjit templates
  • [0c2b13a2] Add exprjit integer multiplication op: mul_i
  • [d40bac9f] Use arithmetic right shift in JIT of brshift_i to ensure new bits are shifted to match the initial sign bit
  • [9468b7f7] Fix trunc to casting upwards
  • [e7a1330b] JIT compile coerce_us
  • [cfd6c966] Expr JIT template for sp_findmeth
  • [d6ad3117] Expr JIT compile serializetobuf
  • [40a4e375] Expr JIT compile unbox_u
  • [fbdb36d7] JIT compile unbox_u
  • [efff300c] JIT compile remaining extend and trunc ops: extend_{i8,u8,u32} and trunc_{i8,u8}
  • [39ded5fe] JIT compile decodertakeallchars
  • [64b44ea0] JIT compile writeint and writeuint
  • [2c4967d1] Teach the lego JIT about coerce_(iu|ui), extend_[ui]16, trunc_u(16|32)

Ops:

  • [6dfa5043] Implement readint, readuint and readnum ops
  • [231cd1a1] New serializetobuf op for assisting bytecode assembly in NQP
  • [07464ae3] Add a writedouble op
  • [311e2683] Add the buffertocu op

Profiler:

  • [6ff60a3b] Fix "pointer cast size mismatch" warnings on 32-bit arch's to resolve issue #444
  • [7aa9500e] Keep track of nativecallcast invokes
  • [cd4f98af] Split "cleared bytes" into managed/unmanaged to prevent underflow
  • [add43502] Log parent thread id on thread creation
  • [acb5000b] call node's first entry time should be relative
  • [543f53aa,3eadf765 acb5000b] Expose first entry and start time in profiler data

Spesh:

  • [c933b516] Free spesh log entries after consuming them. Reduces memory usage
  • [6236eb5d] Fix a segfault that could occur due to missing Facts
  • [25e7fa48] Teach spesh about known values for PHI nodes
  • [a74af558] output known type's debugname in spesh log
  • [950fb0e1] Unblock optimizing the box_* into a fastbox. Allow box_i to go through int cache.
  • [d8065362] decont on nativeref shall become decont_* + box_* to more easily get rid of a native ref taking instruction.

Tooling/Build:

  • [c0799ec1] Include system library paths in Configure.pl if configured to use them to fix issue #1000
  • [c130b7cd] Add a --nodelay flag to jit-bisect.pl

Download

2018.10

6model:

  • [8501e2e8] Fix off-by-one in multi cache spesh lookup, fixing an issue resolving multi's with named arguments
  • [d66206d0] [ConcBlockingQueue] Implement unshift, enabling queue users to 'jump the line'
  • [a7fa9e6b] save 16 bytes in MVMStaticFrameBody by rearranging struct order
  • [c3527467] Lower unbox of P6[int|num|str]
  • [429139ed,c3527467] Box lowering for P6[int|num|str] to improve NQP performance
  • [0c7483b3] Lower box_[ns] with P6opaque removing C call, indirections and checks

Core:

  • [5e1b2554] Optimize bool_I to sp_bool_I
  • [49f1c7bd] Lower add_I, sub_I, and mul_I where possible
  • [663fa2ca] Mark [sp_]speshresolve as :invokish

Docs:

  • [fcceaabf] Update JIT docs to include new ops

GC:

  • [9e90cdd6] Don't set ref'd from gen2 flag during GC
  • [2b09f6ec] Immediately promote objects ref'd from gen2 to speed up the usage of large or long lived data structures

IO:

  • [e1eb9af3] Implement async socket introspection functions
  • [a5dd7652] Remove per-thread libuv loop object, which was being used but unneeded

JIT:

  • [32a47383] Fix bug causing sleep op to receive bogus values. Was visible in Rakudo when ThreadPoolSchedular was in use, causing high cpu usage even when doing nothing
  • [95d22798] Update jit-bisect.pl work in the new Spesh log
  • [58e5161e] Fix legacy JIT of strfromname
  • [8c2dd3ad] Be more silent about internal failures
  • [adef0806] Remove MVM_JIT_BYTECODE_DIR and add MVM_JIT_DUMP_BYTECODE which dumps bytecode to /tmp/
  • [80b18871] Remove JIT log file and log to the Spesh log instead
  • [9a1cc175,8c2dd3ad] Make DynASM link errors and JIT unable to get rx pages print to STDERR when Spesh log turned on
  • [0554add8] Implement a perf map file on Linux with new environment variable MVM_JIT_PERF_MAP

Math:

  • [8f6b2ac8] Make big Int stringification 1.58x as fast for Ints larger than 2⁶⁰ (base 10)
  • [ad3a80cb] Fix coredump with mul_I -> div_I ops

Ops:

  • [abb5c69b] Implement fork op

Spesh:

  • [4666ff43] Make heap snapshot profiler functional again
  • [597ccb09] Pass on type tuple when inlining unspecialized
  • [1500090a] Optimize ifnonnull branches out if we can determine which way they branch
  • [5103e9f8] Simplify/improve optimization of decont
  • [196fa224] Optimize eqaddr into a constant if possible
  • [b2d27cbe] Tear down spesh worker in full_cleanup
  • [8aaf696a] Fix SSA handling of inlinees with multiple return
  • [7ae914b6] Fix and tidy up hllbool specializations
  • [ab2d58eb] Add MVM_spesh_graph_add_comment() allowing to insert arbitrary strings into spesh log
  • [50c76e21] Subtract nested inlinees when checking inline size
  • [6147e0e5] Clear up and start improving box optimization
  • [7f0d5327] Fix spesh dump for when inline entirely vanishes
  • [a4b4d837] Optimize "hot" wval lookup into spesh slot access

Strings:

  • [95d7e63c] Update Unicode Collation data to UCA 11.0
  • [41425c81] Update Unicode data to version 11.0, update grapheme break rules for 11.0 changes

Download

2018.09

Core:

  • [6edaac44] Add true_value and false_value to HLL config for future hllbool op

Documentation:

  • [156b5bc3] Clarify a few things in bytecode specification
  • [e17a53b8] Update the release guide a bit

GC:

  • [ccf3dd37] Fix alignment of nursery allocations. Fixes segfaults on armhf

IO:

  • [51f2db57] Add support in write_fhb op for writing 16 bit VM arrays to a filehandle

JIT:

  • [848f74e3] Add exprjit macros for register type constants
  • [18cb687c] Add ^zero/^one exprjit macros for 0 and 1 integers
  • [398f073b] Add param_sp and hasunipropc exprjit templates
  • [9e0237ed] Add binddynlex exprjit template
  • [3c10d230] Add getarg_* exprjit templates
  • [af6353d3] Add bindlex_n* exprjit templates
  • [9ed59041] Add reprname exprjit template
  • [f43ab19e] Add objprim{bits,unsigned} exprjit templates
  • [722f0939] Add down-cast operations to cast_unsigned_load_addr
  • [891d5c02] Implement truncation via unsigned cast for expr JIT
  • [ef474331] Teach the lego JIT to compile hllbool
  • [c1c2b7e3,c1c2b7e3] JIT compile hllboolfor, hllboolfor
  • [756a97d1] JIT compile hllbool
  • [37a2cd36] Increase array size of args on MVMJitTile struct
  • [9bef425a] Add objprimspec exprjit template
  • [9590c483] Implement cast_load_addr tile for exprjit
  • [6556de6d] Make minor JIT doc changes
  • [17365037] Add a macro for decoder_ensure_decoder and templates for decoder<addbytes takebytes takeline empty>
  • [f71f55cf] JIT decoder(empty|takebytes)
  • [c1b7b549] Add paramnamesused exprjit template
  • [f5928803] Add getpid and hintfor exprjit templates
  • [8a70d24d] Add ctx exprjit template
  • [14f6956c] Add existspos exprjit template
  • [77d75210][14f6956c][8a70d24d][f5928803][c1b7b549][9bef425a][f43ab19e] [9ed59041][af6353d3][3c10d230][9e0237ed][398f073b] Add unshift_*, existspos, ctx, getpid, hintfor, paramnamesused, objprimspec, objprim{bits,unsigned}, reprname, bindlex_n*, getarg_*, binddynlex, param_sp and hasunipropc exprjit templates
  • [1d4bd3ec] Bind 'let:' declarations eagerly in expr JIT compiler
  • [dc1cc51b] Tighten scope rules for expr JIT compiler
  • [e4542ee1] New template compiler, Single-pass compilation, Better type and format checking, a few syntax changes
  • [7567696e] Pass MVMRegister to lexical-binding function for exprjit. This accommodates the exprjit templates and allows us to the pass the value instead of a pointer.

Libraries:

  • [73e2f53d] Update libuv to 1.23.0

Ops:

  • [954bdf88] New hllbool and hllboolfor ops

Platform:

  • [3abd2888] Throw error on failure in decodelocaltime
  • [a8dfd479] Fix on decodelocaltime on Windows

Profiler:

  • [bcbe9b20] Pass an array with information on types to profiler

Spesh:

  • [24860d4c] Let spesh discover the type of hllbool[for]
  • [7c5740fb] Teach spesh to replace hllboolfor by the result for known values
  • [ee0004bf] Teach spesh to replace hllbool by the result for known values
  • [2fb3265a] Fix segfault of native subs with more than 8 arguments
  • [c49fc88a] Fix rw args of JITed calls to JITed native calls
  • [96b88eba] Leak fixes in Spash
  • [b217a115] Destroy inlinee after inlining

Strings:

  • [3e94a68f] Pass through BOM with utf16le and utf16be
  • [ff750504] Make sure MVM_string_utf16le/be_decodestream are predeclared
  • [ad12d8e4] Fix some bugs with utf16* decodestream get_chars, and retain state
  • [792cdd58,ad12d8e4 ff750504 3e94a68f] Add support for utf16le and utf16be to decodestream. utf16le and utf16be do not expect a byte order marker and will pass them through as Zero Width Non-Break Space per UTF16 spec
  • [ddde0950] Add encode support for utf16le and utf16be
  • [b162c7c4] Add utf16le and utf16be encoding types and implement for buffer decode
  • [578c2f76] Add support for utf-16 to decodestream
  • [f06c695a] Make Unicode Block name lookup work for unassigned cp's

Misc:

  • [652056de] Fix use-after-free in cleanup

Download

2018.08

6model:

  • [d4d8ff41] Mark functions used in Perl 6 extops MVM_PUBLIC
  • [4199a956] Enable gc_free of MVMContext
  • [e1df3411] Speedup VMArray zero_slots by using memset instead of a loop
  • [46c08a0e] Fix memory leak in CArray given P6 Str's
  • [ac3d3c76] Fix alignment/mem issue of inlined CArrays
  • [919e78ab] Fix race in setting the type debug name

Core:

  • [a24033eb] Make coerce_is/us 2x faster by not using snprintf and using dedicated integer to string code

Docs:

  • [73d646c6,210d27ff] Remove outdated mentions of Parrot
  • [411f73fd] [Docs] Add JIT documentation describing how to add a tile
  • [9647c1c4] ExprJIT: Document the conditional dependency check

Documentation:

  • [8a7da04a] Update garbage collection documentation

GC:

  • [e766345d] Speed up hash garbage collection by optimizing its gc_mark(); add new macros
  • [8ac13c29] Optimize VMArray_gc_mark to be a bit faster
  • [7bf4c429] Optimize SCRef_gc_mark by using faster MVM_gc_worklist_add calls
  • [3e91dc62] Fix MVM_GC_DEBUG worklist check for NULL STable
  • [2f36e266] Add branch hint macros to nursery allocation
  • [62a99bcf] Fix segfaults caused by sharing of jitcode in nativeCall repr

General:

  • [4fa8c855,940c02be,df6271af,b2c8d3ff,2194358c,50262e3c,3da1e5fb] Refactor context traversal to better support inlining

IO:

  • [febffaa2] Expose file descriptors of IO::Socket::INET instances
  • [2e946881] Expose listening host and port in asyncsocket_listen

JIT:

  • [2249d688] Move lexprimspec to proper emitter getrusage, threadlockcount
  • [9b2008a0] Add exprjit macro to retrieve fields from instance
  • [bc9627ba] Add exprjit macro to determine if vmnull
  • [70624742,33c5840c] Re-add getlexstatic_o and getlex_no exprjit templates with minor changes
  • [c3ef58e1] Change ^getf to load in getlexstatic_o template so it only uses a single load instruction
  • [0b7f26ce,1ab3b189] JIT-compile sp_speshresolve, JIT neg_I and abs_I
  • [1fe14d3c,bd8361e2] Define ARG5 and ARG6 on Windows since it only has 4 arguments to functions in general purpose registers
  • [ef41080c] Use '^addrf' macro for setf, getf
  • [8b522291] Remove 'unsafe' templates already in core_templates, these templates have working exprjit versions
  • [e242dc8f] Fix unicmp_s expr jit args
  • [7bcef24f] Move label assignment to tiler
  • [922befb2] Move exprjit oplist parser into a module
  • [9b44d481] JIT strfromname in the legacy JIT
  • [30781708] Fix JIT compiled getarg_* reading the wrong register
  • [d19c6608] Unbreak build on architectures where we don't support JIT compilation
  • [14bdaea4] Use reference counting for maintaining multiple code copies
  • [various] Add expr templates for eqatic_s, eqatim_s, ordbaseat, uc, lc, tc, split, join, getcp_s, indexcp_s, index_s, graphs_s, codes_s, substr_s, ordat, chr, getenvhash, backendconfig coerce_si, equaticim_s, unicmp_s, indexicim_s, getstrfromname, indexic_s, isinvokable, getlexreldyn, objprimunsigned, scgethandle, scobjcount, setobjsc, getcodename, captureposarg_i, captureposarg_n, captureposarg_s, knowhow, unbox_s, getuniname, ordfirst, repeat_s, haveat_s, getcpbyname, unipropcode, unipvalcode, hasuniprop, getuniprop_{int,bool,str}, nativecallbuild, nativecallinvoke, nativecallrefresh, threadrun, threadid, threadyield, currentthread, lock, unlock, timer, matchuniprop, iscont_i, iscont_n, iscont_s, flip, rindexfrom, atpos_n, atpos_s, atkey_i/n/s/u coerce_iu/ui decont_u, rand_i, setwho, boot*, iscont, chars, escape, getcodeobj, iscoderef, setbuffersize_fh, iscclass, findcclass, findnotcclass, nfafromstatelist, nfarunproto, nfarunalt, radix, encode, decode, istrue_s, isfalse_s, hlllist, hllhash, settypehll*, hllizefor, exception, newtype composetype, bindex*, getex*, backtracestrings, capture, multicache setdispatcher, sha1, sc, iscompunit, isnonnull, cancel, signal, watchfile, execname, isinvokable, isrwcont, async, asynclisten, getlex_n{i,n,s}, ctxcallerskipthunks, add_I, fc, encoderep, istty_fh, getport_sk, encode*conf, decode*conf, getppid, setdispatcherfor, param_rp_i, {add,sub,mul,div,mod}I, {cmp,eq,ne,lt,le,gt,ge}I, {pow,gcd,lcm}I, isprimeI, rand_I, expmod_I, bor_I, bxor_I, band_I, bnot_I, blshift_I, brshift_I, {isbig,bool,base}I, get*hllsym, print, nullptr, findmeth, cans, connect_sk, socket, bind_sk, accept_sk, tell_fh, stat, lstat, getlex{outer,caller}, bit{and,or,xor}_s,

Math:

  • [353940a8,e9b1b73b] Get rid of many unneeded of mallocs in coerce_sI and MVM_bigint_to_str()

Ops:

  • [f1256790,02bddce8] Add a negated object literal spesh plugin guard and JIT the object non-match guard
  • [1ed8c64c] Add sp_speshresolve op
  • [ec4c63e0] Mark speshresolve as :noinline
  • [9d4681af] Rename getstrfromname to strfromname

Other:

  • [e783f567] Unbreak update-changelog.p6 and use new Git::Log module

Profiler:

  • [69e2a388] Add a few missing allocating ops to profiler

Spesh:

  • [a75090c6] Lessen the number of spesh threshold levels
  • [b3ce4f6d] Eliminate object non-match guard in many cases
  • [20d44791] Fix guard evaluator attribute handling
  • [9745f921] Add facts to attributes in spesh plugin guards
  • [af455397] Refactor inline logging and detect missed inlines
  • [fa471f1d] Have fact discovery determine usage counts
  • [f59335ea] Attempt inlining so-far unspecialized callees
  • [24d3b5bf,155f1dfb] Fix dump of inlined spesh line/file annotations, update deopt logging
  • [5ef61a76] When inlining unspecialized, set arg type facts
  • [4373eecd] Store deopt usage separate from normal usage
  • [caef82f1] Correctly update OSR deopt index upon inlining
  • [26a91852] Mark deopt use of the write of a deopt instruction
  • [3df2ff91] Switch usage handling to new use chain model
  • [f8c4648f] Allow hllboxtype_* across hll in inlines by not using :useshll for the ops
  • [3727d18b] Implement box/unbox elimination
  • [13718793] Delete void return instruction when inlining
  • [6e7b215e] Update all of the guard insertion to use the new SSA versioned guards
  • [1a22aaa4] Copy facts when splitting SSA versions
  • [1347a94d] Output name and cuuid in spesh slots for code object in Spesh dump
  • [37b7c7b7] Discover facts about a bunch of sp_guard ops
  • [0daf99bc] Fix inlining of things with multiple return's
  • [da9123a7] Only mark stolen_deopt_ann_used if it is, to prevent a potential crash

Strings:

  • [3ea8f68d] Use Fibonacci hashing to determine which bucket's to put hash value's into
  • [9f005086] Used fixed size allocator for hashes. Nice speedup for table expansion
  • [6646038f] Factor out our hashing function and speed up hashing for flat strings
  • [0eb25300] Make parse_simple_number impossible to reach end without returning
  • [3ef2acf0] Hash: randomize insertion order and bucket iteration order
  • [0e110820] Make a faster HASH_ITER macro and make other hash optimizations
  • [e94d3dfd] Remove previous hash handle pointers in hash implementation
  • [d9a3270a] Implement SipHash, use as our hashing function w/ 64bit hashvals
  • [39a2e71b] Optimize uthash ptr delete code
  • [c5686559] Check if bucket is correct in HASH_FSCK
  • [e3e1d0d0] Use sized types for uthash (instead of using unsigned everywhere)
  • [448e75bd] Get the number of bytes to be processed from the current buffer and not from the header in MVM_string_utf8_c8_decodestream()
  • [4ec15fc5] Increase the result buffer size for MVM_string_utf8_c8_decodestream()
  • [829b8ee7] Fix a regression with grapheme segmentation when multiple regional indicators are in the same string

Tooling/Build:

  • [abf7d0c2] Use clang with OpenBSD since their ancient gcc creates a moar which can't generate NQP anymore.
  • [821cfd52] Fix tools/compare-oplist-interp-order.sh on *BSD
  • [888e1cf0] Add script to generate html documentation from docs
  • [33363d32] Make tools/ scripts executable and add shebangs
  • [ecff5b47] Fix NetBSD build failure by adding a missing .h suffix in build/Makefile.in
  • [3bf120a1] Fix Configure.pl version detection in some instances
  • [9601ac45] Don't store owner or group in our release's tar archive
  • [5bfad12b] Make update-changelog.p6 interactive

Download

2018.06

6model:

  • Allow MVMContext atkey to work on all sizes of native ints
  • Add support for all native int types to getlexref_ni
  • Fix three memory leaks when serialization fails
  • Generalize attribute_as_atomic to obj attrs too
  • Optimize MVM_serialization_read_int so as not to need memcpy calls
  • Speed up at_pos, bind_key and at_key by about 4% by speeding up dispatch
  • Make MVM_sc_get_sc_object MVM_STATIC_INLINE
  • Add some branch prediction hints to frame.c for very unlikely cases

Debug Server:

  • Check that socket() doesn't return -1 in debugserver
  • Free local variables in debugserver
  • Prevent breakpoints from being hit over and over in MVM_debugserver_breakpoint_check

IO:

  • Change getsignals output from hash to array
  • Define SIGBREAK on WIN32

JIT:

  • Implement pow_i instruction
  • Sort the expr jit templates with the new script
  • Replace 'invokish' guard infrastructure with on-stack position check and update
  • JIT compile getsignals
  • Fix encoderep/encoderepconf returning value into wrong register
  • Expr JIT template for encoderepconf, decont_s, assertparamcheck, param_rp_s, param_rp_o and param_sn, checkarity

Ops:

  • Add coerce_us op for coercing unsigned integers to strings
  • Add new atkey_u op
  • Add atomicbindattr_o and casattr_o ops
  • Add new guard spesh ops
  • Add spesh plugin ops

Platform:

  • Only use the 64 bit memory access code in memmem32 for cpu's that support unaligned accesses.

Spesh:

  • Implement a new spesh plugin mechanism, which allows for a mapping of guards to results. The setup of the guards is implemented in code running on MoarVM, and the interpreter then walks the guard table to pick the applicable result. Spesh itself can then look at this table and compile the guards in as needed, together with JIT-compiling them.
  • Implement bytecode assembly for speshresolve

Strings:

  • Make MVM_string_utf8_decode 8% faster with vectorized 8bit check
  • Guard against null pointer dereference in decodestream_discard
  • Fix potential issue in shiftjis decoder if replacement had synthetic -1
  • Handle synthetics and normalization properly in string bitwise ops
  • Use the Unicode database propcode constants instead of querying property codes on MoarVM initialization
  • Speed up MVM_string_find_cclass and grapheme_is_cclass for whitespace, punctuation and newline char classes
  • Make .lines 2x faster by speeding up MVM_find_cclass for newlines
  • Convert HASH_DEL_IN_BKT, HASH_ADD_TO_BKT, HASH_MAKE_TABLE and HASH_EXPAND_BUCKETS from macros to inlines
  • For non-MVMString hash keys, check hashval before doing a memcmp for some speed up

Instrumentation:

  • Free local variable in line coverage

Miscellaneous:

  • Add support for all native int's in lexprimspec
  • Put interp.c in the same order as the oplist
  • Fix a use-after-free in frame.c
  • Optimize sp_jit_enter in interp.c a few percent

Tooling/Build:

  • Add a script which sorts the expr templates by oplist order
  • Add script to compare order of oplist and interp.c op order
  • Fix off-by-one in jit-bisect.pl
  • Add Intel C Compiler as an option to Configure.pl
  • Fix handling of denormals for Intel C Compiler
  • Add branch predictor hint macros to optimize common/uncommon conditions
  • Fix links on releases page generated with moarvm.org release tool

Download

2018.05

Miscellaneous:

  • Correct op name in exception message for ctxcallerskipthunks
  • Remove explicit temp rooting in 'slice' interp op

6model:

  • Fix warning about missing cast
  • Improve debug helper for p6opaque dumping
  • Sort hashes before serialization for more reproducible builds
  • Add CPPStruct/CUnion-reprs where it was forgotten
  • Implement one dimensional inlined shaped CArrays
  • Fix missing bounds check in NFA results push
  • Change multidim implementation exception message
  • Make error msg lowercase; match overall msg style
  • Add 'slice' positional op for VMArray
  • For NFAs with many codepoints, use binary search

Documentation:

  • Add instructions to the release guide about gpg signing

IO:

  • Push error string argument in the right place
  • Check we have a concrete OS handle in IO ops
  • Remove repeated MVMROOT
  • Root correct object when pushing host/port info
  • Close server socket handle when client side closes

Ops:

  • Add new slice op

Strings:

  • Randomly seed a hash secret to mitigate ease of DOS attack. For more information see https://cry.nu/perl6/secure-hashing-for-moarvm
  • Check hash value before str eq in hash buckets. 15% faster hash lookups and insertion
  • Make sure hashing function never returns 0 to prevent cached_hash_code from being regenerated each time in those cases
  • In string index, avoid checking for concreteness multiple times
  • Make sure getstrfromname will resolve generated names
  • Use &lt;private-use-XXXX&gt; and &lt;surrogate-XXXX&gt; for as Unicode names for private use and surrogates as recommended by Unicode
  • Use all uppercase for Hangul Syllable names
  • Fix CJK Unified Ideograph and other derived Unicode names to match Unicode spec
  • Add a new MVMhashv type for representing the hash value
  • Implement memmem_two_uint32(), up to 45% faster index of short (2-3 grapheme) needles in a flat 32 bit haystack
  • Implement an optimized memmem for 32 bit string search 4-15x faster for flat 32 bit haystacks

JIT:

  • Add getlexcaller, sp_getstringfrom, iterkey_s, iterval, splice, slice, cmp_i, string cmp, lexprimspec, ctxlexpad, captureposarg, inf, neginf, currentthread, unless_s, if_s, threadlockcount, capturenamedshash, captureexistsnamed, and hllizefor JIT templates
  • Refactor storage of temporary variables in NativeCall-JIT code
  • Put jit templates in same order as ops in interp.c
  • Fix a DynASM issue that caused integer overflow in encoding jump offsets

Spesh:

  • Add bytecode size to inline log
  • Fix format string parameters
  • Put sizes of spesh graphs into the spesh log
  • Don't leak CUUID/name
  • Log graph of inlinee prior to inlining
  • Wrap debug printing
  • Set type facts on a resolved method
  • Specialize isnull

Profiler:

  • Extract recursion loop for smaller stack frames
  • Don't uninstrument any more
  • Store the size we malloc and use it with strncpy
  • Fix off-by-one in profile's GC dumping
  • Insert prof_allocated in the exact right place
  • Add missing break statement
  • Fix optional parameter allocations

Debug Server:

  • Don't use %b in format string
  • Fix mixed usage of malloc and FSA
  • Use official API for thread lock count
  • Allow unrecognized fields in messages
  • Throw out superfluous debugspam
  • Add a "handle equivalence class" command
  • Bump minor protocol version to 1.1 for new messagetype

Tooling/Build:

  • Add update-changelog.p6 tool for faster categorization of commits into the ChangeLog
  • Move uthash.h from 3rdparty to src/strings since it is heavily modified and cannot be substituted for the generic version of the library
  • Make jit-comparify break on 'ret'
  • Ensure make realclean cleans 3rdparty/cmp
  • Fix off by one issue in jit-bisect.pl
  • Fix Makefile indentation
  • Report time spent on JIT in spesh-time.p6 tool

Download

2018.04.1

Math:

  • Fix denormals and precision issues in Num parser

Download

2018.04

Strings:

  • Speed up collapse_strands 4x by rewriting to target compiler auto vectorization
  • Vectorize turn_32bit_into_8bit_unchecked, 10% speedup for string_escape()
  • Vectorize string flip operation for flat strings, ~25% speedup
  • Speed up string cmp by 3-5x in the general case and by 6-10x if both strings are flat
  • Speed up string index by 1.5x for a flat haystack and a needle of a differing type
  • Add support for the windows-932 variant of the ShiftJIS encoding
  • Fix bug in windows-1252 and windows-1252 decodestream with replacement when a replacement occurs in the last position of the input stream

JIT:

  • Inline simple cu string access into exprjit template
  • Rename ^spesh_slot to ^spesh_slot_addr and add ^spesh_slot_value
  • JIT expr templates for getstringfrom and getwvalfrom
  • JIT floor_n, continuationinvoke, ctx
  • JIT a few ops that ThreadPoolScheduler uses
  • Measure and report time spent on JIT compilation

Garbage Collection/Memory:

  • Ensure memory blocks in the nursery are aligned where necessary
  • Suspend other threads during global destruction
  • Spot use of an item already put in a gen2 freelist
  • Register sig_hash as an Instance root

Math:

  • Fix drift in Num->Str roundtrip; As a side effect effect div_In op becomes 14x slower
  • Use Grisu3 algorithm for stringifying Num's, makes Num stringification 2x faster
  • Fix handling of denormals in div_In op
  • Generalize mp_get_double()

Profiler:

  • Log getrusage in the profile

Ops:

  • Add getsignals op, queries for valid signals

Libraries:

  • Patch libtommath to fix build on Solaris
  • Add libatomic_ops as a submodule instead of in-tree

6Model:

  • Make tryfindmeth not throw in some cases it did
  • Add missing write barrier enforcement in CPPStruct, CStruct
  • Fix missing GC mark of deserializer contexts list
  • Use Fixed Size Allocator for all_scs list
  • Rename sc_weakhash mutex for more clarity over what it covers
  • Fix segfault on concurrent array access while resizing

IO:

  • Mark thread blocked around getaddrinfo
  • Make getrusage op modify an existing array instead of allocating one in the op itself
  • Convey the process ID of a started child
  • Guard against negative and zero signals in MVM_io_signal_handle
  • Populate valid_sigs flag set handler function if not set
  • Create bit-flag to indicate signals found on host

Spesh:

  • Keep wvals if only dep needs changing
  • Fix fixing of wvals during inline
  • Fix negated spesh of known type
  • Add optimize_unbox
  • Optimize known values for istrue
  • Remove object boolification from optimize_iffy
  • Discover type of getrusage in spesh
  • Fix optimization of zombie conditional causing segfault
  • Insert null-out-instructions before prof_enter

Debug Server + Cut module names out of filenames + Only suspend on actually must-suspend breakpoints + Add metadata for ReentrantMutex and Semaphore

Tooling/Build:

  • Fix loading bytecode on big endian systems
  • Move libatomic_ops module to a different directory
  • Tell user to delete folder if submodule dir already exists
  • Don't build specify -D_FILE_OFFSET_BITS for dyncall
  • Fix Solaris 32-bit build: don't build specify -D_FILE_OFFSET_BITS for dyncall
  • Fix Configure.pl --asan flag on clang
  • Add --show-autovect --show-autovect-failed flags to Configure.pl
  • Use Configure.pl to generate vectorization defines on clang, so we get a warning if vectorization fails for specific loops

Miscellaneous:

  • Fix confused pointer offsetting in FSA_SIZE_DEBUG
  • Fix memory corruption when running with FSA_SIZE_DEBUG set
  • Correct lazy static lexical deserialization
  • Fix small integer return values of libffi callbacks
  • Fix bytecodedump to understand inlines

Download

2018.03

Miscellaneous:

  • Add remote debugging support, optionally enabled with the --debug-port option to MoarVM. This uses the MessagePack and allows:

  • Suspending and resuming all threads, or individual threads

    • Enumerating threads and, when they are suspended, getting their stack traces
    • Reading the lexical variables of a callframe
    • Setting breakpoints and getting notified if they are hit (and, optionally, suspending execution)
    • Stepping
    • Fetching object attributes, array elements, and hash keys/values
  • Add getppid op. Allows a child process to get the parent process id, and thus guess if it has become orphaned.
  • Panic when Dyncall fails to allocate native callbacks
  • Use uv_fs_copyfile API in MVM_file_copy
  • Make IO signal handlers cancellable
  • Add an tryfindmethod op which evaluates to null in the event that the method cannot be found

Network:

  • Ignore libuv-caused "fake" empty datagrams
  • Expose both hostname and port of received datagrams

Encodings:

  • Change arguments for windows1252/1 decodestream ops
  • Add proper support for replacements in decodestream for windows1252/1
  • Add ops for strict decoding of windows-1251/1252, decoderepconfig, encodeconfig, decodeconfig and encoderepconfig
  • Add support for replacements with more than one character for windows-1251 and windows-1252
  • Add some string consts in MVMStringConsts for MVMDecodeStream

Spesh:

  • optimize eq_s and ne_s against empty string in spesh

Tooling:

  • Bump libuv version 1.19.2
  • Move moarvm.org tool into proper folder. Add more release guide info
  • Add CMP library to ./3rdparty which is used for supporting the debug server
  • Add debug server protocol documentation

JIT:

  • Add JIT template for ne_s, const_n64, not_i, is(int|num|str|list), existskey, eqat_s, concat_s, isnull_s, isfalse, istrue, ishash
  • Enable box_i and box_s templates
  • Release only spill slots without active overlap
  • Warn for things that should be a size but may not be in the expr JIT compiler
  • Create store_write_barrier macro

Profiler:

  • Support for threaded profiling has been added, although it is not fully stable yet
  • Record thread id in profile data
  • Record if a thread is responsible for a gc
  • Count spesh time properly
  • Record when gc happens (msecs since start)
  • Fix for gigantic and wrong spesh time in profiles

Download

2018.02

Miscellaneous:

  • Clean up one-shot timers after firing
  • Fix SEGV in profiler by testing the current thread's frame in heap snapshot
  • Fix missing argument to syncsocket error message
  • Fix EOF detection on zero-size files

Strings:

  • Add windows-1251 (Cyrillic) decode/encode support
  • Refactor so code is shared between windows-1251 & 1252
  • Fix a bug causing encoding of â€ș, ˜, Ɠ, ĆŸ, Ćž, ℱ and ĆĄ with windows-1252 (Latin) to throw or fail encoding

Spesh:

  • Make MVM_spesh_manipulate_remove_handler_successors() public
  • Move annotations to istrue when split from if_o
  • Always split if_o into istrue and if_i
  • Fix MVM_spesh_log_decont not logging anything
  • Don't spesh log if we have a spesh_cand
  • Don't optimize getattr unless known concrete
  • Implement unmanaged_size in MVMSpeshLog repr
  • Run basic facts discovery on inlined code
  • Clean up handler successors after throwish ops become non-throwing
  • Put inlined blocks between their caller and its successor
  • Fix an off-by-one in uninline
  • Remove superfluous DEOPT_ONE_INS annotation on some deconts
  • Work around a segfault caused by type tuple without type information
  • Revive removal of dead instructions after the first inlined function
  • Fix SEGV when opening MVM_*_LOG files

JIT:

  • Add JIT templates for more than 44 ops
  • Disable getlexstatic_o for the time being for stability reasons
  • Fix segfault in JIT bytecode dumper on code without static frame
  • Add NOOP expr JIT operator
  • Don't output PHI in expr JIT log
  • Better error in boxed ref for repr_id mismatch
  • Add tiles for binary XOR and NOT
  • Fix a miscompile in sp_p6ogetvt_o
  • Only BAIL on DEOPT_ONE annotations on actual guard ops in expr JIT
  • Merge non-control-flow basic blocks so expr JIT has more code to optimize

Tooling:

  • Update release_guide.md with info on generating releases.html
  • Add script that generates moarvm.org/releases.html
  • Edit the ChangeLog to include the original release
  • Add script to generate Windows-1251 and 1252 codetables

Download

2018.01

Miscellaneous:

  • Refuse to make release with dirty work tree
  • Fix off-by-one error when checking inline boundaries in MVM_frame_find_contextual_by_name()
  • Make it more clear where new ops are meant to go to in src/core/optlist
  • Fix leak when args bind error would unwind rather than return
  • On Windows (not using Visual Studio), print size_t with %Iu.
  • Fix crash in TTY flushing on WSL (Bash on Win10)
  • Do less work in zeroing out VMArray
  • Zero out cut off elements when downsizing VMarray
  • Fix incorrect EOF detection on seek'ed handles

Unicode:

  • ucd2c.pl: Fix White_Space/space Unicode property and several other property aliases
  • ucd2c.pl: code cleanup and refactoring

JIT:

  • jit isprime_I
  • Un-bitrot tools/parse_jitgraph.p6
  • Refactor search_frame_handlers_lex for readability
  • Implement tile for OR operator

Spesh:

  • Mark sp_rebless as :noinline
  • Fix off-by-one error in uninline
  • Pay attention to return op in cross-HLL inlines
  • Optimize not_i when its input is a known value
  • Add some missing fact dependencies
  • Remove bogus comment and known value fact tweak
  • Make instruction deletion within dead BBs a no-op
  • Make log facts tolerate the odd outlier
  • Place facts on a clone op
  • New spesh-bisect.pl tool
  • Fix OSR of thread entry frame
  • Allow some cross-HLL inlining, this means we can inline bits of NQP (usually guts like Block.clone) into Perl 6 routines that call them.

Garbage Collection/Memory:

  • Fix memory leaks reported by ASAN
    • The string stream decoder separator specification buffer(s)
    • The static frame spesh body statistics buffer
    • The spesh plan type stats buffer
    • The spesh plan, when the static frame could not be added
    • In MVM_unicode_name_to_property_value_code()
  • Debug log fixes:

  • Fix spelling typos in GC debug log

    • Remove strange segfault-inducing debug code

Download

2017.12

Miscellaneous:

  • Fix ASAN flags for Darwin platform
  • Fix implementation of the new inline boundary indicators to set action

Unicode:

  • Fix it so Line_Break property returns XX as the default value, instead of incorrectly returning BK
  • Fix it so Numeric_Type property doesn't return an empty string for codepoints with the Digit property value
  • Make Bidi_Mirrored_Glyph an enum instead of storing the full codepoint value in the bitfield
  • Make error messages consistent which refer to synthetic codepoints
  • Many, many fixes and changes to ucd2c.pl, which generates the Unicode database. Most changes are not user visible but will be the foundation for making sure we return the correct property values for codepoints not in UnicodeData.txt (Primary Unicode Data source file)
    • Note, we have the correct values for most of these other codepoints, but the goal is the get even these currently reserved characters working. Main pluses for this are: 1. Correctness 2. Unicode sometimes sets properties for codepoints based on likely future usage. This would allow better correctness if an older version of MoarVM is used with codepoints from a future versions of Unicode codepoints (as could be the case with OS distributions lagging behind current releases)

JIT:

  • Lexical handler lookups no longer prevent a lot of inlines
  • jit-bisect.pl now uses MVM_SPESH_LIMIT when trying to find pesky spesh bugs
  • Fixed issue with taking a pointer-pointer to a moving object and don't read a NULL struct

Spesh:

  • Extend jit-bisect.pl to use MVM_SPESH_LIMIT

Download

2017.11

Miscellaneous:

  • Show the actual type when "no such attribute" errors occur
  • In MVM_fixed_size_free and MVM_fixed_size_free_at_safepoint debug/error messages use %lu instead of %d, put in missing output in one case
  • Harden event loop against fast cancellations
  • Remove dependency on Perl 5 autodie for compilation (expression engine)
  • Remove duplicate env variable usage line from moar --help
  • Update our internal release guide to include steps for signing tags
  • Profiler: Fix integer literal form for 1LL << 32
  • Add support for a block noinline flag. Used to indicate that a block may never be inlined; will bet set by Rakudo upon spotting uses of things that need the dispatcher
  • Fix occasional old reads in ConcBlockingQueue
  • Put coerce_II op in same order relative to oplist
  • Retry in certain cases of EINTR in mvm_fileno, read_bytes, read_one_packet, socket_write_bytes, socket_connect and socket_accept

Unicode:

  • Fix uppercase letters not giving Lu for the General_Category
  • collapse_strands with memcpy if all strands are same type (4x faster for strands of same type)
  • Fix bug causing utf8-c8 synthetics to combine with other codepoints
  • Optimize MVM_string_concat when the RHS is a single strand that's equal to the LHS's final strand
  • Fix+add comments for strand concat optimization
  • Speed up join of longer strings by a significant amount by concating multiple times if there are more than 300 graphemes per string on average or there are less than 4 pieces and more than 150 graphemes per string.
  • join: factor code into join_get_str_from_pos() function
  • Make sure General_Category 'Cn' codepoints match with C enum
  • Resolve unassigned codepoints as the default property values in MVM_unicode_get_property_str
  • Add an additional check that the "bases" of the strands are the same length before checking if they're equal in string_from_strand_at_index.
  • Error message improvements to MVM_DEBUG_NFG #ifdef for synthetics

JIT:

  • JIT compile getarg_*, trunc_i16, param_rp_s, getrusage, coerce_II op, getexcategory
  • Fix labeling off-by-one causing try/catch on some frames to fail
  • Mark nativeinvoke_* noinline to enable JIT compilation
  • Treat NULL strings correctly in JIT compiled native subs
  • JIT compile native calls with up to 3 UTF-8 string arguments
  • JIT compile native calls with integer rw arguments

Iter:

  • Don't segfault when MVM_iter on type object
  • Handle unsigned types to switch in MVM_iter()

Spesh:

  • Fix spesh dropping MVM_SPESH_ANN_DEOPT_ONE_INS annotations
  • Include reason when we cannot inline in the debug output

Math:

  • If dividing by 1 in MVM_bigint_div, just return the numerator
  • Make sure both objects are the same type when short-cutting division by 1 in MVM_bigint_div
  • Move assignment after MVMROOT in MVM_bigint_from_bigint

libuv:

  • Use uv_fs_copyfile in MVM_file_copy instead of manually opening a handle and using and using uv_fs_sendfile to copy
  • Bump libuv to version 1.15.0
  • Make sure to close uv_timer handles after they are canceled

Garbage Collection/Memory + Fix unneeded GC blocking in loop + Fix pointer arithmetic in MVM_fixed_size_realloc_at_safepoint with a cast + Convert realloc plus memset 0 to recalloc in MVM_sc_set_object + FSA size debug: cooperate better with valgrind + Support FSA_SIZE_DEBUG in MVM_fixed_size_realloc and *realloc_at_safepoint

MVMROOT:

  • Add MVMROOT2..MVMROOT5 macros to make rooting multiple variables easier
  • Add a missing MVMROOT to MVM_bigint_from_bigint
  • Fix HLL representations of CArray elements out of sync after native calls
  • Add missing MVMROOTs to MVM_bytecode_finish_frame and prepare_and_verify_static_frame
  • Add missing MVMROOTs around managed mutex acquire in MVM_serialization_demand_code, MVM_serialization_finish_deserialize_method_cache, MVM_serialization_demand_object and MVM_serialization_finish_deserialize_method_cache

Download

2017.10

  • Unix socket support has been added
  • Add new DynASM version as submodule
  • Removal of Configure.pl --lua and --has-dynasm options, compiling with these included 3rdparty libs is now required
  • Remove build dependency on Perl 5 Test::Exception module
  • Make a fast path for VMArray splice using memcpy
  • Add a few missing casts to MVMObject *
  • Cache the ENV var hash after first access
  • Improve MVM_dir_cwd() error message
  • Fix missing rooting/barriering in C[PP]Struct
  • Fix missing MVMROOTs in type parameterization handling
  • Fix returned tcp port values for async sockets (ntohs). See RT#132135.
  • Probe for gcc -Werror=* support. This allows building MoarVM on older GCCs.
  • Fix issues with FreeBSD build, including adding new libuv file to Makefile.in
  • Protect parameterization additions with a mutex and fix for parametric type race
  • Bump libuv to ver. 1.14.1
  • Add MVM_fixed_size_realloc() and MVM_fixed_size_realloc_at_safepoint()
  • Fix a segfault when trying to bind a p6bigint to a matching attribute in a p6opaque
  • Include the type of unhandled register in error messages

NativeCall:

  • Factor out callback thread finding so code is now shared between libffi and dyncall backends
    • Make native callback thread finding more robust
    • Stash native thread ID after GC unblock
    • Many NativeCall functions can now be JIT'd

JIT:

  • JIT compile native calls with VMArray arguments

    • Basic JIT of lock/unlock

    • Support unsigned ints when JIT compiling native calls

    • Move null check into getdynlex func and remove bare null from getlexrel and getlexreldyn
    • Don't allow low-level null from getdynlex
    • Remove duplicate typedef for MVMJitCompiler
    • getlex_o now returns VNMull rather than null

    • Merge the 'expression tree' JIT compiler backend.

    • Document the expression template syntax and IR structure
    • Document tiles
    • Add jit-bisect tool to help us bisect JIT issues
    • Add jit-dump tool to compare JIT output between runs
    • Process annotations on PHI nodes

Frame:

  • Ensure ->caller/->static_info can't get outdated
    • Check caller chain before promotion
    • Set frame->caller up earlier
    • Add missing MVMROOT of outer/code_ref
    • Set frame->static_info in allocate_frame
    • Skip stats for frames beyond spesh max bytecode size
    • Don't generate log entries for huge frames

Spesh:

  • Fix possible access to moved object body
    • Add missing MVMROOT of return value for spesh logging
    • Don't give internal workers a spesh log
    • Make "Can't find nc_site value on spesh ins" non-fatal

GC:

  • Add more GC debug checks to help find ->caller bug
    • Add debug assert in remove_one_frame
    • GC block pow_I thread due to it potentially being an expensive call
    • Mark thread GC blocked when locking file
    • Update GC debug code for growing nurseries
    • Avoid a thread yield loop in mark_thread_unlocked
    • Catch frame worklist adds with NULL static_info
    • Make thread GC nurseries scale to need

Build:

  • Sort the flags for MAST::Ops before generating them

Strings:

  • join: factor the concat stability checks into their own function and simplify conditionals
    • join: special case 8bit flat pieces/separator. 3x faster for joining 8bit flat strings
    • join: If only one item is to be joined, just return it
    • join: When everything to be joined is made up of strands, copy strands instead of making one flat string
    • Fix quaternary collation level's. Fixes RT#132216
    • collation: simplify quaternary and use define's for the bitmask
    • Speed up codes op by 10% for synthetic graphemes
    • In KMP based index set max stack alloca to 3000 bytes (used to be 4096)
    • Deduplicate the while loops into a #define in KMP based index
    • Fix utfc-c8 encoding for values > 0x10FFFF and unicode surrogates
    • Fix concat bug with utf8c8 strings, flattening utf8c8 synths
    • Use the FSA for a temp alloc in MVM_string_join
    • Use FSA to allocate memory in NFA
    • Change realloc condition in MVM_string_utf8_decode to avoid unneeded reallocs
    • Add hex digits to the end of non-unique Unicode names (i.e. <CJK Ideograph-6183>)
    • Update Unicode Emoji to version 5
    • Download all emoji files and generate UCD for Emoji 4 and onward
    • Since Emoji names in Unicode are not guaranteed to be 100% stable, we read from version 4 onward to ensure full compatibility with older MoarVM versions and Emoji versions
    • Add info about planned features to Collation docs (Language/natural sort)

Windows:

  • Fix ->seekable detection on TTY handles
    • Fix definition of MIN causing Windows issue
    • Pass user32 lib to build on Windows
    • #include ws2tcpip.h in syncsocket.c

MacOS:

  • Only include libuv posix-hrtime on *BSD not Darwin, was causing some versions of MacOS not to build
    • Fix seekability detection on MacOS

Solaris:

  • Solaris doesn't have memmem() so use the 3rdparty/FreeBSD one
    • Fix segfault on Solaris due to the undefined behavior of passing NULL to print

FreeBSD:

    • Fix getaddrinfo failing with EAI_HINTS on FreeBSD

Download

2017.09.1

  • Assign variable in optimize_bb loop on its own line for clarity
  • Revert "Fix errors when running `make realclean" to unbreak build using nmake

Download

2017.09

  • Allocate async process read buffer based on amount last read, with a minimum size limit
  • Implement the Knuth-Morris-Pratt string search algorithm
  • Add error string to 'failed to resolve' exception
  • Fix usage of ARG5 in JIT on Windows to use stack instead
  • JIT param_rp_i and param_rp_o
  • Fix calculation for maximum array size
  • Correct ==/= mistake in container optimization
  • Ensure strings created with MVM_string_repeat are in NFG form
  • Avoid evaluating arguments to MVM_ASSERT_NOT_FROMSPACE when it's disabled
  • Add up to date string documentation
  • Remove old strings.markdown documentation file
  • Speed up index 9x when Haystack is strand, needle is 1 long
  • Add new cached grapheme iterator
  • Always cache even for flat haystacks with KMP
  • Generate stacktraces on Travis CI when getting a segfault
  • Add MVM_DEBUG_NFG in more places
  • MVM_string_utf8_decodestream: free the buffer on malformed UTF-8
  • Only run NFG_CHECK on concat result that should be normalized
  • Revise some comments in MVM_string_is_control_full()
  • Make sure MVMROOT'd pointer is initialized as NULL
  • Align MVM_TELEMETRY_LOG usage statement
  • Align --tracing usage statement
  • Update Unicode database for Unicode 10
  • MVM_IS_32BIT_INT(i) with explicit casts
  • JIT eqat(ic|im|icim)
  • Building .dasc files depends on dynasm version
  • Add minimal 'dynamic array' library using macros
  • Make the JIT Graph use dynamic arrays
  • Cleanup JIT graph after use
  • Replace explicit JIT function return frame check
  • Wrap dasm_State in MVMJitComiler structure
  • Fix unlikely but possible stack overflow from user input
  • Allow MVM_string_get_grapheme_at_nocheck to be inlined
  • Make eqat 1.7x-2.5x faster
  • Fix indentation of switch in substrings_equal_nocheck
  • Use PRIi64 macro instead of %lld in MVM_coerce_i_s
  • Replace all uses of sprintf with snprintf
  • Consistently use MVMuint16 for was_multi
  • Add some explanation of GET_REG and cur_op to interp.c
  • Use < or <= sign for all conditionals in strings/ops.c
  • Rework MVMNFGSynthetic to not store base separately
  • Only use MVMGraphemeIter_cached for strands in KMP index
  • Split out JIT compiler init/deinit
  • Organise architecture-specific JIT source files
  • Check return status of DynASM
  • Remove JIT intermediates in make clean
  • Add 'POP' dynamic array method
  • Flush log on oops
  • Refactor labelling in JIT
  • Add spesh iterator and replace JitGraphBuilder
  • Fix leak of JIT graph
  • Simple fix for duplicated labels
  • Use VECTOR macro arguments only once if possible
  • Add vector SHIFT method
  • Enable JIT breakpoint insertion
  • Use single DynASM build target
  • Compile less with --no-jit
  • Add old-style suffix rule for dynasm compilation
  • Atomic increment not required for JIT sequence nr
  • Move size check into COPY_ARRAY
  • Correct buffer handling in UTF-8 fast->slow path
  • UCD: For sequences, convert from \x{ } to the Unicode codepoints
  • Flush standard handles at exit
  • Flush output buffer where needed
  • Ensure write to unwritable handle fails right off
  • Don't try and sync when flushing is enough
  • Better if_o/unless_o optimization in some cases
  • Do dead BB elimination pass after branch deletion
  • Optimize MVM_string_gi_move_to
  • Don't decont native refs when spesh logging
  • Handle native refs better in spesh stats
  • Support spesh multi resolution involving nativeref
  • Set facts on nativeref deconts
  • A little refactoring of second optimization pass
  • Remove fact copy we most likely don't now need
  • Re-flow and better explain set elimination code
  • Fix bug in gi_move_to if not starting at 0
  • Introduce a binary format for heapsnapshot, wtih snapshots at the beginning of the file
  • Immediately write heap snapshots to file instead of keeping them around in memory
  • Write parts of types/static frames/strings incrementally into heap snapshot file
  • Add gc_describe functions for new spesh data structures
  • Use grapheme iterator cached for ignorecase/ignoremark index ops
  • Take more care when eliminating set inside inline
  • Re-compute dominance tree before stage 2 opts
  • Add a reliable locals count for inlines
  • Move throw -> goto optimization to second pass
  • Mark GC blocked when acquiring I/O mutex
  • Only use grapheme iter cached if the Haystack is a strand for index*
  • Don't try to duplicate unreachable handlers on inline
  • Ensure gi->start is set to 0 for flat strings in MVM_string_gi_init
  • Fix a leak in CArray REPR
  • Merge Full Unicode Collation Algorithm Implementation
  • Remove unneeded file from UCA implementation
  • Nativecall: fix invalid pointer creation
  • Fix ignoremark with Prepend characters and ordbaseat op
  • For degenerate Synth's with Prepend and Extend set base cp to 1st cp
  • Fix case change when base cp isn't the first cp in synthetic
  • Fix elems of ConcBlockingQueue REPR
  • Implement getrusage op
  • Add documentation on UCA collation implementation
  • Include debug names in some wrong REPR errors
  • Fix MVMROOT in socket port/host code added in last release
  • In README, note that release tarballs won't work out of the box and point to where to get working ones
  • Expose number of locks held by a thread through an op
  • Add missing concreteness checks in thread ops
  • Fix errors when running `make realclean
  • Store smallint value in 64bit if we negate them later
  • Fix segfault when compiling nqp with musl as libc
  • Avoid recursion in optimize_bb() when only 1 child node

Download

2017.08.1

  • Fix regression in Windows JIT build
  • Remove broken JIT of parameter operations

Download

2017.08

  • Dynamic optimization moved to a worker thread
    • Threads now write sequential logs into a log buffer, and send it to the worker thread in a concurrent queue
    • Quota of logs to avoid excessive memory use, with a boost when entering a new compilation unit for the sake of OSR
    • Added MVM_SPESH_BLOCKING environment variable to allow for reproducible specialization results when debugging
    • Reworked installation of specializations
    • Reworked OSR implementation to account for specialization being done on a worker thread
  • New statistics model for making better specialization decisions
    • Frames carry a correlation ID to allow reconstruction of call stack and analysis on the specialization worker thread
    • Produce specializations based upon most common occurring types, not just those sampled immediately after passing a threshold
    • Megamorphic code gets a non-type specialization and may be JIT-compiled
    • Remove hard limit on spesh candidate count
    • MVM_SPESH_DUMP updated to show statistics and planned specializations
    • Updated log analysis and guard insertion to use the new statistics model
  • New argument guard, based around a tree, which means less checks need to be performed when deciding on with specialization to run
  • Add dumping of new argument guard structure
  • Log time that specialization work consumes
  • Add a script to sum up logged spesh times
  • Better organization of MVMInstance and MVMThreadContext fields
  • Removed now-unused cur_usecapture field
  • Avoid passing a real NULL as an object argument in stack unwind handling
  • Disable spesh in initial load/deserialize; there's no useful data at this point
  • Add thread ID range check to GC debug mode
  • Deduplicate code from MVM_string_indexing_optimized
  • Start off collapsing strands as 8bit instead of 32bit
  • Concatenation improvements
    • When concat needs normalization only normalize one section
    • Don't trigger re_nfg on concat for base character + combiner
    • Add functions for iterating the codepoints of a grapheme
    • Don't re_nfg when last_a or first_b are synthetics in concat
    • Don't take the no re_nfg shortcut if a repetition contains a synthetic
    • Don't do re_nfg shortcut if either a or b are repeats
    • Use MVM_string_graphs_nocheck when able in concat
    • Fix conditional to check first instead of last strand of string b
  • Enable native callbacks on different threads
  • Fix double-decrement of unused args in inlining
  • More detailed dump of spesh slots
  • Don't NULL out spesh slots; they may be re-used
  • Make JIT include SC write barriers
  • Stronger validation of code objects in optimizer
  • Refactor code into iterate_gi_into_string() to reduce code duplication
  • Move collapse_strands() after iterate_gi_into_string()
  • NULL out registers on re-OSR
  • Only devirtualize REPR funcs in JIT when concreteness is known
  • Fix JIT of nqp::ordat and nqp::ordfirst
  • Update TinyMT to version 1.1
  • We always have threads now (thanks to specializer worker), so remove single threaded VM instance lock avoidance paths
  • Improve GC thread sync-up
    • Simplify handling of the thread list
    • Introduce GC orchestration mutex/condvars, and use them to avoid busy waiting when synchronizing threads for GC
  • Avoid many array searches for SC code refs
  • JIT param_sp and param_sn
  • Inability to open telemeh log shall not be fatal
  • Output spesh worker info on telemetry channel
  • Size of MVMFrame reduced
    • Eliminate effective_handlers field in MVMFrame
    • Eliminate effective_bytecode field in MVMFrame
    • Add function to encapsulate special return setup
    • Move special return into a frame extras
    • Move continuation tags into frame extras
    • Move invoked_call_capture to frame extras
    • Move dynamic lexical cache to frame extras
    • Eliminate throw_address from frames
    • Force MVMReturnType to be a single byte
    • Toss never-used nameds re-use logic
    • Eliminate need to memset MVMFrame
    • Remove historical, now-unrequired, nullings
    • Use a bit field for named args used when possible
  • Improve NFA memory performance
  • Small optimization to string_equal, remove repeated checks
  • Remove two invoke handler functions we don't need
  • Remove long-unused newlexotic/lexoticresult ops
  • Remove now-dead newlexotic functions
  • Remove now-unused pool_index in MVMStaticFrame
  • Eliminate now-unused Lexotic REPR, lexotic cache
  • Remove a dead field
  • Remove unused gotolexotic function
  • Move spesh data into a separate object from MVMStaticFrame, for less memory use and better GC performance
  • Break MVM_sc_get_sc into inline and slow path
  • Delete unused var in MVM_string_ascii_encode_substr
  • Avoid range check on every SC object access
  • Delete unused var in MVM_string_latin1_encode_substr
  • Fix MVM_string_compare to support deterministic comparing of synthetics
  • Disable JIT when we're not allowed to make memory executable
  • Have MVM_string_codes iterate the string with codepoint iterator
  • Speed up attribute reads during invocation
  • Document the various op adverbs
  • Reduce duplication and simplify logic in invoke
  • Move checking part of force_to_heap into an inline
  • Allocate frames on heap that tend to need promotion anyway
  • Improve deopt logging output
  • Append, not prepend, moved deopt one annotations
  • Turn decont into a deoptonepoint and insert guards after decont
  • Store deopt one target directly in bytecode rather than calculating it each time
  • Implement speculative pre-selection of specializations and inlining based on guarding against the invocation target
  • When inlining, replace receive instruction instead of send instruction, to better cope with register re-use
  • JIT pow_I
  • Validate range of branch target in spesh code-gen
  • Anchor inlinee handlers to inliner entry
  • Fix and expand dead basic block removal
  • Remove duplicate use of named arg checking
  • More sophisticated named arg handling in spesh, removing sp_namedarg_used op
  • Make it possible to cancel an async socket reader
  • JIT rand_I and also give it a smallbigint path
  • Ensure that serialized padding bytes are 0
  • Avoid uninitialized bytes in default tables
  • Avoid uninitialized bytes at the end of serialized tables
  • Add -Werror=pointer-arith for gcc
  • Put hard upper limit on bytecode size to optimize
  • Move annotations multiple basic blocks if needed
  • Eliminate "blocked by alias" propagation checks
  • End basic blocks after all throwish/invokish
  • Extra fflush so spesh log is written before crash
  • Ensure frame handler start/ends are BB boundaries
  • Don't explode on spesh dump when no facts
  • Cope with extra successors when inlining
  • Factor out and re-use dead BB elimination
  • Allow for GOTO handler to become unreachable
  • More precise CFGs for control exception handlers
  • Add indexim_s op and improve/fix bugs in eqatim_s
  • Further harden against removed handlers
  • Add debugging aid for spesh preselection
  • Make rebless deopt stack top frame also
  • Bump usage of writers in deopt instructions
  • Start storing/using static frame in inline table
  • Use register holding code ref for deopt purposes
  • Can never inline frames declaring state vars
  • Correct handler order when inlining
  • Implement inlining of basic lexical lookups
  • Tune the inline size
  • The listen callback shall also push socket and peer IP and port
  • Don't set a bit we're meant to be clearing in GC gen2 promotion
  • Harden listen_cancel against dupe calls
  • JIT nativecallcast, trunc_i32, extend_i32
  • Make sure the libffi callback can be reused
  • JIT the create op
  • Check ffi_closure_alloc() return value
  • Implement atomic ops
    • Provide a way to have an int type sized to the architecture's atomic size
    • Implement cas for Scalar references and native integer references
    • Implement atomic load and store for Scalar references and native integer references
    • Implement atomic increment, decrement, and add for native integer references
    • Provide an op for doing a full memory barrier
    • JIT of the new atomic ops
  • Fix a bug in index/eqat(im) and in ord_getbasechar
  • Add nqp::coveragecontrol op
  • Remove two more unneeded strlen from nativecall.c
  • Only foldcase the needle for ignorecase operations
  • Remove impossible less than zero checks on unsigneds
  • Add GC debug check on frame heap promotion
  • Correct an MVM_ASSIGN to barrier the right target in continuation invocation
  • Root thread object while creating thread context
  • Correct invokewithcapture GC handling
  • Extra GC debug checks after frame promotion
  • Blacklist unhandled param ops in spesh args handling
  • Add hostname to failed to resolve error
  • JIT param_rp_o and param_rp_i
  • Introduce NFG_CHECK which checks string is in NFG form
  • Fix concatenation bug when renormalization needed
  • JIT setcodeobj and captureinnerlex

Download

2017.07

  • Full Unicode 9.0 and Emoji 4.0 text segmentation support
    • Improvements to segmentation of Emoji w/ GCB=Other
    • Use GCB instead of HST to avoid property lookup for Hangul
    • Reorder conditional in maybe_hangul() to be more clear
    • Work Hangul grapheme segmentation into GCB switches
    • Don't break after ZWJ for Emoji=True + GCB=Other
  • Make string_index 16% faster for non-identical string types
  • Greatly reduce the cases when string concatenation needs renormalization
    • Use normalize_should_break to decide if concat needs normalization
    • Rename should_break to MVM_unicode_normalize_should_break
    • Fix memory leak in MVM_nfg_is_concat_stable
    • If both last_a and first_b during concat are non-0 CCC, re-NFG
  • Improve the speed of normalization. Improves speed of slurping non-ASCII Unicode files
    • Speed up ccc by making ccc_relative using integer prop lookup
    • Rename is_control_beyond_latin1 to is_control_full
    • Use MVM_string_graphs_nocheck in more places throughout strings/ops.c
    • Rename relative_ccc to MVM_unicode_relative_ccc
  • Remove arbitrary string repeat limit
  • unicmp_s improvements
    • unicmp_s can now reverse any of the collation levels
    • Handle additional possible cases in collation
    • Store collation levels in an array not a single value
    • Handle quaternary collation level being both enabled and reversed
  • Improved instruction and basic block deletion handling to allow further code elimination
  • Only compile in \n -> \r\n on Windows
  • JIT-compile write_fhb and encode ops
  • Include return type facts for the encode op
  • Implement setbuffersize_fh op, which sets up output buffering for synchronous file handles
  • Fix error message for decodersetlineseps getting non-decoder
  • JIT open_fh, close_fh, read_fhb, decoderaddbytes, fc, chr, getcp_s, and objectid
  • Remove synchronous process support
  • Add new asynchronous permit mechanism, which can be used to provide delayed starting of reads and back-pressure
  • Implement permits handling for asynchronous processes
  • Convey file descriptors of stdout/stderr pipes when spawning an asynchronous process
  • Add debug helpers: MVM_dump_bytecode, MVM_dump_bytecode_stackframe and MVM_dump_bytecode_staticframe
  • Add gdb command to give a history of spesh optimization decisions
  • Improve specialization dump: less trailing spaces, chop up facts list by register
  • Empty out instruction list of removed basic blocks
  • Eliminate duplicate code in utf8 decoder
  • Fix overflow in uniprop lookups
  • Fix ASCII streaming decode error handling
  • Make illegal synthetic an oops, not a panic
  • Make some fixes to the Unicode data file downloader
  • Use MVMint64 for MVM_string_chr (oplist/function mismatch)
  • Fix an accidental nested redeclaration in process handling
  • Tweak the format of oops messages
  • Improved debug output for serialization errors
  • Fix ARM build
  • Clear cached dynamics when taking continuation
  • Missing MVMROOT during an allocation
  • Remove never-assinged use_mode_frame field from CallCapture
  • Remove now-unused cur_usecapture per thread
  • Eliminate mode flag from CallCapture
  • Fix invokewithcapture to keep the used capture alive
  • Always copy callsite into an MVMCallCapture unless it's interned
  • Remove now-unrequired effective_callsite
  • Add decodertakecharseof op
  • Copy correct length in get_all_in_buffer
  • Fix ctxcode op to not leak a NULL
  • Fix decoder typos

Download

2017.06

  • Make coerce_s_n work more like the Perl 6 Str.Num method
  • Eliminate socket string I/O
  • Re-implement synchronous sockets without using libuv, enabling them to be passed between threads
  • Add ability to get port from already bind-ed socket
  • Add cpucores op to get the number of CPU cores
  • Fix inconsistency in decode stream take bytes API, so it returns null if that number of bytes is not available
  • Fix memory leak in syncpipe
  • Removed unsed header file in threads.c
  • Remove unused args to bind_stdio_handle
  • Remove char-level I/O ops and the functions they called
  • Remove char-level I/O from synchronous I/O vtables
  • Remove unused encoding option in dir handle
  • Re-implement print/say debug output ops to encode and then use binary I/O
  • Eliminate use of libuv in synchronous file handles
  • Switch standard handles to use the new synchronous file handle code, which means they can now be safely used from multiple threads also
  • Remove unused ->filename slot of syncfile
  • Debugging aid for introspecting P6opaque objects
  • Support merge_bytes in async proc ops, for reading STDOUT and STDERR together
  • Support binding handles to file descriptors in async procs
  • Fix off-by-one in profiler node GC
  • Add string eqat/index ignorecase+ignoremark functions
  • Add new eqaticim_s and indexicim_s ops ignorecase+ignoremark
  • Use norm instead of n for the normalizer variable
  • Add improved support for GCB=Prepend
  • Improve Regional Indicators support during normalization
  • Serialize a Decoder REPR object into null, so incidental file handle serialization in Perl 6 does not blow up
  • Improve named argument optimization, so we can specialize and throw out instructions in more cases
  • JIT decodertakeline
  • Fix missed opportunity to run JITted code
  • Have inline log note what couldn't inline also
  • Remove successor when optional named argument is passed, so default code can be eliminated
  • Flag writers that die when a basic block is eliminated, and disregard them in PHI node analysis, provide more precise type information
  • Make a basic block elimination pre-pass before the main optimization work
  • Set dead writer when deleting instructions also, to further aid PHI merges
  • Track which basic blocks are part of a jump list
  • Delete pointless goto instructions (those at the end of a basic block that simply go to the next block)
  • Remove bad Windows quoting option async proc code
  • Actually log inlines to stderr as the comment up top claims
  • Make find_separator only look at the last chars, which is far cheaper
  • Add help text for environment variables to Configure
  • Move NFG initialization into nfg.c
  • Cache CRLF grapheme value
  • Cache maximum separator length, to save recomputing it for every line that is read
  • Cache a list of final separator graphemes, for faster stopper detection in streaming decoders
  • Introduce a max final grapheme codepoint filter, for faster stopper detection in streaming decoders
  • Add a UTF-8 decoding fast-path that doesn't need to go through the full normalizer
  • Keep last freed chars buffer handy for re-use in streaming decoder
  • Make a smarter guess at decode result buffer size in streaming decoder
  • Don't copy when we can steal decoder output, saving a memory copy in most line reading operations
  • Various micro-optimizations to UTF-8 decoding fast path
  • Fix newline translation in various encoding's streaming decoder

Download

2017.05

  • Mark profiler call graphs iteratively instead of recursively
  • Keep around line number annotations in spesh, for more accurate source position information for coverage data in specialized code
  • Introduce "telemeh", a high-precision-time low-impact logger
  • Fix error reporting in chdir
  • Fix memory leak on error in chdir
  • Travis: readlink doesn't have -f on MacOS so make our own solution
  • Fix bug in index ignorecase and equal at ignorecase
  • Fix all known remaining bugs in indexic and eqatic
  • Zero slot when popping a VMArray, to avoid junk reads if it grows again later
  • Add can_fit_into_8bit funct, put logic used many places into one function
  • Use -1 instead of 0 when long right-shifting negative smallints
  • Remove workaround for tommath issue #56, which is now fixed upstream
  • Don't crash on reading a closed dir handle
  • Remove deprecated async string I/O ops

Download

2017.04

  • Shorten the nursery when creating large bigints, to bring GC forward and resolve excessive memory use
  • Use correct format for repeat/concat errors
  • Fix bug in indexic_s if expanding codepoint is the last codepoint
  • Special case "\r\n" in MVM_nfg_is_concat_stable for performance reasons
  • Further optimize MVM_nfg_is_concat_stable to speed up concatenation
  • Do not set use rpath if installing into proper system locations
  • Optimize passes_quickcheck_and_zero_ccc to be much faster
  • Give this_repr constants more meaningful names to aid debugging
  • Streamline MVM_bigint_radix and MVM_radix for Nd Unicode #'s
  • Fix case-insensitive string compare bug when synthetics are in the haystack
  • Improve description for "should eventually be unreachable" error
  • Correctly detect and handle overflow in mp_get_int64
  • Split into mp_get_int64 and mp_get_uint64
  • Only allocate and normalize for cp's that require it in MVM_string_chr, and short-circuit Unicode property test for codepoints below 0x300
  • Provide a better error when failing to encode surrogates in UTF-8
  • Add a cast to suppress a compiler warning in strings/ops.c
  • Factor out code from equal_at_ignore_case for use in index_ignore_case also
  • Use both hex and decimal for UTF8 encoding error messages
  • Add parentheses in various places to suppress compiler warnings
  • Use PRIu64 in fprintf's to fix compiler warning about incorrect types
  • Add a check that introspection->is_tty is not NULL, avoiding a crash
  • Mention debug_name in errors about uncomposed repr
  • Add new --coverage option for Configure.pl
  • First prototype of a per-line coverage reporter, enabled by setting MVM_COVERAGE_LOG
  • Cope with a native type with no nativesize, but signedness
  • Remove two functions in normalize.c that have been superseded
  • Give collapse_strands a 5.4% speed boost under some workloads
  • Add MVM_string_graphs_nocheck funct, use it in places we previously already checked
  • Have a two-part loop in collapse strands to make loop tighter when possible
  • Implement serialize/deserialize in VMHash REPR.
  • Use memmem in string index. Uses Knuth-Morris-Pratt on glibc, and adds the FreeBSD memmem.c for use on Windows
  • Fix a join NFG bug when there was an empty string and an empty seperator
  • Reorder MVMStaticFrameBody to save 16 bytes according to pahole; similarly save 16 bytes in MVMCompUnitBody, 24 bytes in MVMJitCode, 8 bytes in MVMIOSyncStreamData, SerializationRoot and SerializationReader
  • Remove arbitrary and small length range check for reading bytes from a file
  • Remove unused defines in threadcontext.h
  • Greatly reduce contention in the fixed-size allocator for multi-threaded programs, giving up to 40% speedup in some cases
  • Add continuous coverage analysis to Travis builds, along with other Travis improvements
  • Mark thread GC blocked when doing synchronous writes
  • Add missing MVMROOT when reading bytes, which could result in occasional data loss

Download

2017.03

  • Fix some missing variable initializations
  • Set effective_handlers in context-only frame
  • Streamline code in hash computation, hopefully fixing a Coverity warning
  • Detect and throw on over-size array
  • Put in a limit for codepoints in a grapheme, to avoid various overflows
  • Fix a missing NULL check at end of profiling
  • Panic when a new thread context can't create an uv_loop
  • Better handling of out of memory when creating a thread
  • Another attempt at silencing the pthread_yield warnings
  • Missing GC block marking in event loop starting, fixing a deadlock
  • Fix CArray marshalling of type objects
  • Provide a way to put Decoder in nl-translate mode
  • Ensure Decoder REPR never sees concurrent use
  • Debug option to detect concurrent VMArray use
  • Encode strings as UTF-8 in MVM_unicode_string_from_name
  • Reword exception message for read() outside original thread
  • Check that results of repeat/concat fit in an MVMString
  • Fix div_i JIT round to negative infinity
  • Ignore SIGPIPE by default
  • Only start readers if a process spawned OK
  • Remove deprecated char-mode async proc reading
  • Signal error to stdout/stderr on spawn failure
  • Do gen2 sweep before letting stolen threads go, fixing occasional SEGVs
  • Turn libtommath dependency into a submodule, use a MoarVM fork
  • Update libtommath fork to have expmod hang fix
  • Change MVM_string_equal_at_ignore_case to use fc
  • Fix MVM_string_equal_at_ignore_case when folding the haystack changes length
  • MVM_string_equal_at_ignore_case no longer applies a case changing operation to the entire haystack. It now only changes case for as much of the haystack length as is needed. ~30%+ or faster depending on on haystack length.
  • Mention debug name and REPR name in "requires obj with repr X" errors
  • Remove unneeded variable in MVM_string_index
  • Add MVM_string_index_ignore_case function and indexic_s op
  • A range of improvements to the MoarVM GDB plug-in

Download

2017.02

  • Fix format strings that warn during compile
  • Implement missing cleanup of async task handles, fixing a memory leak
  • Make Unicode sequence and codepoint name lookup case-insensitive
  • Add Unicode sequences from NamedSequences.txt in the Unicode database
  • Remove second declaration of MVM_frame_destroy
  • JIT MVM_radix()
  • Make radix and radix_I 50% faster with Unicode Nd
  • Add East_Asian_Width prop
  • Fix memory leaks in synchronous sockets
  • Fix crashes in socket connect error handling
  • Don't leak memory in STable repossession
  • Missing MVMROOT around a lock acquisition
  • Refuse to form an NFA with a zeroed to-state
  • Add data section for JIT code, and use it for extop 'fake' registers
  • Correct typo in NFG trie node struct name
  • Fix overflow in div_i op
  • Implement support for synthetic graphemes in MVM_unicode_string_compare
  • Implement configurable collation_mode for MVM_unicode_string_compare
  • Use LDFLAGS in ld invocations
  • On Windows, create UTF-8 encoded argv upon program entry
  • On Windows, populate environment hash from Unicode environment
  • Some additional heuristics to cut down on cross-thread write log output
  • Fix abs_n op for negative zeros
  • Sort out semantics of closed async sockets
  • Fix overflow on 32-bit systems in is_full_collection()
  • Rename MVMArray file and constant to VMArray
  • Remove bogus indication that MoarVM builds on cygwin
  • Use utf8 for unicode_db files
  • Fix invalid read when GC was triggered in the string repeat op
  • Don't call MVM_string_graphs twice in indexing op, plus cleanup

Download

2017.01

  • Extract spesh block allocator from spesh, for wider use
  • Add a number of missing MVMROOTs, which could lead to outdated pointers; also removed some unrequired MVMROOTs
  • Fix arg_flags allocation sizes
  • Remove an obsolete path from ldrpath
  • Check lexical accesses in GC debug mode 2 also
  • Add a #define to turn on inline logging
  • Fix callstack reset bug, which could corrupt deeply recursing callstacks
  • Don't allow re-compose of a P6opaque
  • Add a new unicmp_s op, which compares using the Unicode Collation Algorithm
  • Make sure we generate all values of the Line_Break property
  • Re-implement utf8-c8 encoding, fixing bugs and ensuring that non-NFC input will round-trip properly also
  • Implement Bidi_Mirroring_Glyph as an integer property
  • Implement Emoji grapheme breaking and other combined codes
  • Add support for Grapheme_Cluster_Break=Prepend from Unicode 9.0
  • Make sure we break after Prepend if it's a control character
  • Add a script to download the latest version of all of the Unicode data
  • Missing rooting GC in rare exit handler case
  • Implement new setdispatcherfor op and add JIT for it
  • Use much faster atoi function in normalizer; 14% less CPU use when slurping a file in UTF-8 encoding
  • For Decompose_Type, use int lookup instead of str for better performance
  • Fix heap snapshot crash on eventloop thread
  • Use /usr/bin/env perl for ./Configure.pl
  • Don't break after ZWJ or for MALE SIGN and FEMALE SIGN
  • Take into account actual allocated size of I/O buffers in gen2 promotion statistics
  • Tweak full collection criteria in heap profiling
  • Free up spesh log slots after specialization, avoiding some leaks
  • Removed the getregref_ ops (unused by NQP or Perl 6)
  • Removed the continuationclone op (unused by Perl 6)
  • Enforce one-shot invocation of continuations
  • Greatly simplify handling of call frame working register lifetimes, leading to consistently shorter lifetimes, less memory pressure, and faster calling
  • Eliminate now-unused tc field in MVMFrame, saving a pointer per callframe
  • Simplify args cleanup functions
  • Reduce number of checks in call frame marking, making it faster
  • Implement getstrfromname op, to get named Unicode sequences
  • Fix GC in spesh triggered by managed mutex use
  • Fix data race in inlining extop fixup
  • Fix data race in callsite fixup during inlining
  • Fix data race in string fixup during inlining
  • Fix charname lookups of LINE FEED and CARRIAGE RETURN
  • Remove Unicode 1 names and add Unicode Name Aliases
  • Convert MVM_malloc+memset to MVM_calloc
  • Clean out ancient "remove after rebootstrap" line
  • Fix typo in MVM_CALLSTACK_REGIONS_SIZE's name
  • Fix missing cleanup of managed DecodeStream
  • Have DecodeStrem clean leftover char buffers
  • Fix a typo in decode stream destroy function

Download

2016.12

  • Decode Latin-1 and UTF-8 strings to 8-bit width when possible
  • Teach a few string functions to compress results into 8-bit storage
  • Fix for AIX's INFINITY not being a constant
  • Unlink libmoar before (re)installing it
  • Add configuration for AIX
  • Support Perl older than 5.10 for Configure.pl
  • Use "pkgconfig --libs libffi" additionally to --cflags
  • Fix powerpc detection on AIX (gcc)
  • Make multidim error messages say they are multidim
  • Add comment about where to find UNIDATA
  • Implement captureinnerlex op, for fixing QUIT/LAST phaser scoping in Perl 6
  • Fix mis-sized free in the NFG trie that only showed up in 32-bit
  • Add GC debug helper to "find" a pointer in nurseries/gen2 bins
  • Make ASSERT_NOT_FROMSPACE check fromspaces of all threads
  • Fix missing MVMROOT around an allocation
  • Fix typo in nfg.h comment
  • Fix native callback and GC interaction when embedded
  • Add GC block management functions to the public API
  • Mark throwpayload* as :throwish in oplist
  • Optimize the check for negative bignums
  • Remove useless mp_neg calls
  • Fix premature free of UV socket handles
  • Fix premature handle free in async UDP sockets
  • Add a "check every register access" GC debug mode
  • Provide a #define to disable dynlex caching
  • Provide a #define for deopt logging
  • Invalidate dynlex caches during deopt
  • Fix pow_I when it takes an exponent larger than 2**32
  • Only do MVM_ASSERT_NOT_FROMSPACE in GC debug mode
  • Add a fromspace assertion in finalize
  • Avoid a number of spesh GC invariant violations
  • Panic if we try to GC when speshing/JITing
  • Ensure we don't leak partially deserialized objects
  • Fix unrooted frame around SC object lookup
  • Remove some GC debug code
  • Avoid reading nativerefs in spesh, since it can cause boxing and thus GC
  • Cope with push being used on concurrent queues
  • MVMROOT around putting work on concurrent queue
  • MVMROOT eventloop queue when polling it
  • Do MVM_ASSIGN_REF after block/unblock in concurrent queue
  • Fix more unrooted frame around SC object lookup

Download

2016.11

  • Workaround tommath issue #56 which affects random bigint numbers > 32 bits
  • Fix memory leaks in nqp_nfa_run
  • Fix a sizeof arg that allocated a much-too-big buffer for callsite arg names
  • Add missing breaks in MVMString's copy_to
  • Prevent null deref when calling MVM_string_utf16_encode
  • Corrections to mkdir on Windows
  • Introduce MVM_SPESH_LIMIT, which limits how many specializations will be performed; this is useful for debugging which specialized block is to blame for a bug
  • Make sure we never box a NULL filename when creating backtraces
  • Fix the nativecall attribute error messages
  • Remove (non-existent) num16 from error message
  • Make the fixed size allocator provide useful information to Valgrind
  • Implement serialization of SCRef
  • Include file/line of unserializable closure, to aid debugging
  • Add type info when failing to bind an attribute
  • Use ffi_arg type for libffi nativecall return types
  • Handle libffi return type more correctly
  • Work around missing libatomic_ops prototype on s390x
  • Panic when trying to GC a locked mutex
  • Make VM panic output state that a panic occurred
  • Fix JIT code generation bug in nqp::exception
  • Add missing rooting of value pushed to concurrent queue
  • Add src/gc/debug.h dependency to Makefile
  • Mark a thread GC-blocked while it is in native code
  • Have "Cannot * a type object" also outputs the type's debug name
  • Don't reveal partially deserialized method cache
  • Give a bunch of exception ops REPR and debug name output
  • Prevent segfault when null string used as hash key
  • Request POSIX.1.c compliance on solaris
  • Change to use readdir insteal of readdir_r
  • Use GCC on solaris by default
  • give diagnostic output when compiling fails
  • Handle current Solaris compiler not understanding -mt
  • Fixed readdir so it won't check old errno
  • Work around clock_gettime issue on OSX
  • Refactor hashes to no longer need to flatten ropes in string keys
  • Save 8 (64-bit) or 4 (32-bit) bytes per entry in the MVMHash REPR
  • Remove the deprecated flattenropes op
  • Remove now-unused MVM_string_flatten function
  • Don't treat an nread of 0 in libuv read callbacks as an error
  • Bump to latest libatomic_ops

Download

2016.10

  • Fix build without libtommath source
  • Make MVM_file_open_fh() throw if the file we opened was a directory
  • Fix bug and memory leaks in MVM_file_open_fh()
  • Add error message for likely MacOS build failure
  • Don't set inheriting process on inherited pipe, fixing a segfault
  • Update to the Unicode 9 database
  • Die on CStruct without any fields
  • Constant-fold unipropcode and unipvalcode
  • Use PRId64 instead of %d for 64 bit int format string args
  • "Cannot unbox type object" error gets debugname and native type info
  • Fix uninitialized arg_names of an MVMCallsite
  • Handle C++ constructors on libffi
  • Fix CUnion get_attribute treating inlined attrs as pointers
  • Fix 32 bit issue with rw args in NativeCall callbacks
  • Use better throw-away type for void nativecalls
  • Gracefully handle a 0 RSS reported by the Linux kernel
  • Fix "Invalid free()" in empty repossessed arrays
  • Make sure we mean "signed char" when we say "char"
  • Fix calculating structure sizes for arm64 and others
  • Disable JIT on x32, since it has a different calling convention
  • Fix pointer size unit in configure message
  • Use set_uint64 in from_num, otherwise we overflow on x32
  • Rewrite mkdir_p api, no function changes
  • Improve nativecall attribute error messages
  • Include debug_name in crossthreadwritelog and serialization errors
  • Deprecate async string I/O ops
  • Deprecate flattenropes op
  • Implement indexingoptimized op (replaces flattenropes, but is not in-place)
  • Fix memory leadk in ord_basechar_at
  • Ensure errno is grabbed before MVM_free is called
  • Make extra sure unlock only happens if lock happened

Download

2016.09

  • Do not crash when the container configuration can't be read
  • Correctly calculate the work_size when inlining between compilation units
  • Validate indices of param_ ops and require checkarity before param_*
  • Fix tautological comprison; snprintf returns an int, not a size_t
  • Fix tell for files that haven't been read from
  • Don't allow zero alignment in P6opaque storage spec
  • Index check lexicals when reading static flags
  • Add Decoder REPR and a number of ops that provide access to VM-backed streaming decoding
  • Don't segfault when serializing an uncomposed p6opaque
  • Don't read_int into a size_t which is unsigned
  • Never leak sym_name from nativecall_build
  • Fix a couple of potential leaks in heap snapshots
  • Kick arg_ and argconst_ ops from the correct basic block when inlining
  • Use HASH_FIND_CACHE instead of HASH_FIND in MVMHash
  • Correct wording of named arguments error
  • Bounds check for hints in get_attribute and bind_attribute
  • Use hints for is_attribute_initialized, and null-check repr_data
  • Clean up various unused variables
  • Mark thread GC blocked while accepting a socket to prevent deadlocks
  • Configure.pl now has an explicit use lib "."
  • Fix missing finalization queue cleanup at thread exit
  • Mark SC used in bytecode loading as claimed to avoid keeping them around for too long
  • Fix an error in multi caching of named arguments that could cause lookups to fail and the cache to keep growing

Download

2016.08

  • Don't crash in P6opaque on NULL name_to_index_mapping
  • Fix off-by-one in grapheme iterator
  • Block/unblock thread for GC on semaphore wait
  • Mark blocked around some more lock acquisitions
  • Fix various cases of out-dated pointer reads on concurrency control constructs
  • Hold uv_sem_t at a level of indirection, so it won't move in memory
  • Add a flag for PIPE_MERGED_OUT_ERR; fix stdio setup for merge
  • Fix EOF detection when reading files from /proc and similar
  • Fix lost socket listen errors
  • Implement async cancellation completion notifications
  • Add some missing fact dependencies in spesh, fixing some wrong guard eliminations
  • Avoid use of possibly-invalidated decont facts in spesh
  • Remove keep_caller from MVMFrame
  • Correctly NULL-terminate the buffer in MVM_vm_dump_file

Download

2016.07

  • Implement a new multi-dispatch cache, structured as a tree, able to hold more entries more memory-compactly, and able to cache dispatches involving named parameters
  • JIT read_fhs op
  • Implement elems REPR function for MVMContext
  • Implement a BB-splitting manipulation function in the optimizer
  • Fix sha1 op to work with null bytes
  • Fix bad interaction between profiling and dead allocation elimination; the presence of allocation logging would prevent the optimization, leading to misleading profiler output results

Download

2016.06

  • Serialize the HLL role field of STables
  • Avoid VMNull setup memcpy/loop in specialized frame initialization
  • Stop caching MVMContext on a frame
  • Use frames directly when serializing closures, rather than having to create an MVMContext wrapper for every one
  • Write SC index when deserializing, repossessing, and preparing to serialize, saving a huge amount of linear scanning
  • Only used cached SC index if SC itself matches
  • Remove an unrequired memset to clear the args buffer
  • Inline args preparation into interpreter, and JIT it directly instead of making a call to a tiny function
  • Mark getlexcaller as :noinline
  • Don't lose handlers during multi-level inlines
  • Eliminate loop in P6opaque's get_boxed_ref function, decreasing cost
  • Implement payload throw/handler support
  • Implement callerlex throwing mode
  • Make moar-gdb.py source-able, instead of only autoloadable
  • Fix inlining causing wrong lexical handler lookup
  • Make build in dir containing space work
  • Allow HLL handler for unhandled lexical exception
  • Add debug_name to "cannot iterate X with Y REPR" message
  • Give "this is not a X iterator" more info, too

Download

2016.05

  • Use MSVC-provided stdint.h and inttypes.h when possible
  • Improved various error messages to include the debug type name
  • Eliminate call frame reference counts, instead using a linear call stack for frames that never become heap-referenced and using the garbage collector to manage those that do
  • Tune number of gen2 sized bins
  • Improve error reporting in P6opaque's compose function
  • Improved GC debugging support to catch more problems
  • Fix a race between serialization context resolution and garbage collection
  • Add a missing MVMROOT in shell/spawn
  • Fix segfault when trying to serialize an uncomposed P6opaque type
  • Update the build system to autodetect system provided libs
  • Add missing rooting, since the instrumentation level barrier may allocate
  • Fix cleanup of temp roots at thread exit
  • Add missing rooting of exception message in die
  • Fix CUnion layout computation GC issues
  • Fix data race in clearing of "in inter-gen set" flag
  • Various improvements and fixes to the spesh_graph tool
  • Add missing optimization of decont_s and decont_u ops
  • Eliminate duplicate MVMContext creation code
  • Fix full cleanup crash: the NFG uses the FSA, so have to destroy NFG first
  • Close dynvar log filehandle in instance destroy
  • Clean up cross-thread write logging mutex
  • Free debug names in STables
  • Free the string_heap_fast_table in CompUnit bodies
  • Free permroot descriptions
  • Free thread's finalization queue in tc destruction
  • Add docs about MVMROOT
  • Fix crash when GCing an ended thread
  • Implement loadbytecodebuffer and loadbytecodefh ops
  • Speed up initialization of non-specialized frames
  • Use varints to make serialization of various integers more compact, reducing size of compiled output
  • Ensure we always produce at least one snapshot when heap profiling
  • Remove debug output when taking heap snapshots

Download

2016.04

  • Implement heap snapshots support, exposed through the profiling API
  • Don't mark tc->cur_frame twice during GC
  • Move thread object mark into thread root mark, removing a special case in the main collector
  • Add API for adding a permanent root together with a description
  • Mark thread blocked for GC when doing synchronous reads
  • Make MVM_bigint_from_num jit-friendly
  • JIT coerce_nI as a call to bigint_from_num
  • Set debug_name on a few more built-in types
  • Add REPR API for getting unmanaged size, implement it for many REPRs
  • Fix compile on FreeBSD 9
  • Handle single-char build directory names by changing capture to lookahead
  • Fix performance of reading very long lines
  • Fix utf8-c8 decode crash caused by off-by-1
  • Fix a full vs. partial collection detection bug
  • Factor unmanaged size into promoted bytes.
  • Enhance scheme for deciding when to do a full collect
  • Bail out if HLL name string index is invalid in bytecode unpack
  • Don't try to set flags beyond num_lexicals when reading in call frames
  • Adjust byte count when UTF-16 BOM marker consumed
  • Fix buffer overrun in utf8-c8 decoding
  • Initialize object registers with VMNull when allocating frames, to avoid a number of possible segfaults
  • Fix incorrect boolification of "" under mode MODE_UNBOX_STR_NOT_EMPTY_OR_ZERO
  • Utilize debug_name in nativecall error messages

Download

2016.03

  • Fix the build when not bundling libtommath
  • Updates to moar-gdb.py (MoarVM GDB plug-in)
  • Add serialize and deserialize to CPointer REPR
  • Don't do cross-HLL inlining
  • Fix missing call optimization/inlining of non-multis in some cases
  • Remove dangerous/broken usecapture optimization, fixing a big memory leak
  • Lazily decode the string heap, improving startup time and reducing memory
  • JIT the atposref_* ops
  • All the ref ops now properly set up facts in spesh
  • Fix dyncall on raspberrypi for calls > 4 params
  • Don't allocate a thread's second GC semi-space until needed
  • Don't keep an MVMStaticFrame array in MVMCompUnit, saving memory
  • Fix primary composite table generation, in turn fixing a SEGV
  • Measure slurpy param and param autoboxing allocations in the profiler
  • Implement native descriptor introspection for pipes
  • Further support for function pointers in native calling
  • Add debug_name field to STable struct and setdebugtypename, to allow easier debugging and analysis
  • Get directory listing in utf8-c8 encoding
  • Fix JIT compiler bug in string le/ge ops
  • Handle nonblocking stdout properly for --dump
  • Fix linelocs buffer overflow in bytecode dumping
  • Include type info of wval/wval_wide referenced objects in spesh log
  • Don't keep around barely-used bytecode maps, saving memory
  • Only allocate instrumentation state if needed, saving memory
  • Boost size of the multi-dispatch cache

Download

2016.02

  • Numerous fixes for places where --full-cleanup leaked
  • Free per-thread NFA evaluation memory and lexotic cache
  • Free SC root objects and dependencies array when freeing SC
  • Free arg_names when interning callsites
  • Free deserialization work index lists
  • Clean up decode stream separators on handles
  • Don't leak a replaced boolification spec
  • Fully clean up callsite re-use hash in assembler
  • Fix leak involving inlining handlers
  • Fix a couple of leaks when decoding strings
  • JITted calls to functions with MVMRegister argument don't want float calling conventions
  • Fix leak in type parameterization.
  • Don't create partly-initialized callsites in nativecall callback handlers
  • Check for NULL in exception payload and return VMNull in getexpayload
  • Fix bug for inlined structures in strutures in nativecall code
  • Fix structure size calculation when other structures are inlined
  • Plug memory leak when shelling out without capturing
  • Fix leak on out-of-bounds multi-dim access
  • Make sure unused continuation tags get freed

Download

2016.01

  • Assorted code cleanups (unreachable code, duplicated includes, etc.)
  • Various update to MacPorts portfile and instructions
  • Only optimize istrue to unbox_i when known concrete
  • Bump libuv to 1.8
  • Add submodule sync before update in Configure.pl
  • Suggest build-essential if no gcc
  • Various fixes/updates to graph_spesh.p6
  • Don't install sha1 and tinymt headers; they're only used internally
  • Only install msinttypes on MS platform
  • Fix a gc bug in string concatenation
  • Add subsecond file time ops stat_time and lstat_time
  • Fix stat CREATETIME return value
  • Note graphs_s will be deprecated; dupe of chars
  • Re-order ops in interp.c to match oplist
  • Add compile-time platform check for JIT support, to handle universal binaries

Download

2015.12

  • Allow the backlog arg for socket listening to be set
  • Resize buffers as needed when taking a UTF-16 substring
  • Context-captured frames should remember caller
  • Re-use MVM_frame_context_wrapper for ctx op, to reduce code duplication
  • Fix bug with dynvar lookups when we fall out of JITted code
  • Clean up callsites in comp unit objects
  • Clean up interned callsites on interpreter shutdown
  • Clean up memory allocated by FSA
  • Copy callsites when inlining
  • Cleanup Unicode property lookups on shutdown
  • When async streams are done, emit sequence number but no data
  • Force SC initialization to allocate in gen2, fixing a deadlock
  • Add a sanity check for gen2 allocation flag
  • Allow NativeRef to spesh assign_i and decont_i
  • Implement sp_deref_bind/get_i64/n in the JIT
  • Handle "is rw" pointers in native routines
  • Teach our guard op generator about NativeRef
  • Fix ordbaseat interaction with synthetics, and end of string semantics
  • make ordfirst and ordat consistent with ordbaseat
  • Add casts to resolve type warnings
  • Add UBSAN support to Configure.pl
  • Support native references to multi-dimensional indexes
  • Implement fileno_fh op
  • Implement async UDP sockets
  • Probe for Bool, and expose bool/sizet to nativecall
  • Implement input newline translation, and translation on output on Win32
  • Validate lexical types properly
  • Implement truncate/extend ops for sized natives
  • Init cd->arg_flags so callsites_equal wont complain
  • Avoid memcpy(x, NULL, 0) in spesh
  • Ops to introspect type bits/unsignedness
  • Disable unaligned reads under UBSAN
  • Align bytecode sections to 8 bytes
  • Dump "known to be RW container" flag to speshlog
  • Add missing unsigned operand types; clean up unsigned int ops
  • Add box unsigned to REPR boxing API
  • A handful of extra unsigned int related ops
  • Teach assembler about unsigneds
  • JIT captureposprimspec, sized getlexref_, captureposelems, capturehasnameds
  • JIT jit eof_fh, readline[chomp]fh, replace, gethllsym, objprimbits, sayfhs
  • JIT typeparameters, typeparameterized, typeparameterat
  • Coercion between num and unsigned int
  • Support boxing unsigneds in P6int REPR.
  • Recognize unsigned extop operands
  • Cheating native ref ops for unsigneds
  • Somewhat cheating unsigned parameter ops.
  • Kick out remaining unused arg_*/argconst_* ops after inlining
  • Fix bug that made Win32 throw on deleting nonexistent files

Download

2015.11

  • Fix const warnings about pointers to Unicode case table
  • Elide a few key-values from profiler data for default values
  • All Latin-1 controls are normalization terminators
  • NFG now uses Unicode Grapheme Cluster algorithm; "\r\n" is now one grapheme
  • Fix a canonical composition bug
  • Fix SEGV on nqp::chars on a null string.
  • Support multiple line separators on I/O handles
  • Support multi-grapheme line separators on I/O handles
  • Include \r\n synthetic in default line separators
  • Serialization writes string offsets as 2 bytes if possible
  • Used varints in a few more places in the serialization format
  • Serialize the STable mode flags in a single byte
  • Serialize the STABLE boolification_spec mode in 1 byte
  • Serialize the container and invocation spec flag bits with the bool spec
  • Implement readlinechomp_fh op, for reading lines without line ending
  • Fix moar build on DragonFly BSD
  • Fix join NFG bug when separator is empty
  • Improve normalizer performance on paths needing canonical combining class
  • Boost number of fixed size allocation bins, to handle more allocations
  • Fix encoding/decoding \r\n grapheme in all encodings
  • Make radix ops not blow up over synthetics
  • Fix normalizer to never re-normalize what was already considered
  • Encoders now throw exceptions on unencodeable characters by default
  • Allow specifying a replacement string for unencodeable characters
  • New UTF-8 Clean-8bit encoding for strings we exchange with the OS
  • Make escape handle \r\n properly
  • Handle files where stat falseley reports 0 bytes size
  • Provide a way for NFA to be given synthetics, not just codepoints
  • Teach NFA about ignoremark charrange case
  • Make MVMMultiCache container aware, including spesh/JIT gurd updates
  • isrwcont can now be jit-compiled
  • We can spesh isrwcont into a const now
  • Document ASAN_OPTIONS
  • Fix possible SEGV in getlex and bindlex when walking scopes
  • Release mutex in MVM_load_bytecode on exception
  • Allow named flattening args to show up amongst named args in callsites
  • Make later named args that are flattened in override earlier ones
  • Override setjmp to two-argument version on mingw64
  • fix a callsite memory leak
  • Fix ordfist/ordat JIT
  • JIT bigint ops or, and, xor, brshift, blshift and bnot
  • JIT hintfor op
  • Fix native call struct size calculation bug
  • Implement istty_fh op

Download

2015.10

  • Profiling: fix data collection when exiting
  • Profiling: improve timing calculation
  • NFG: Strip BOM from UTF-8
  • NFG: Implement casefolding
  • NFG: handle SpecialCasing
  • JIT: fix devirtualized REPR ops; devirt more ops
  • JIT: improve logging
  • Misc: Improve handling of state when spawning child processes
  • Code: Throw better exceptions in several cases
  • Code: linting, consting, avoid segfaults, etc.

Download

2015.09

  • Fix write to null handle on async socket
  • Add C++ support to native calling functionality
  • Make thread join force a GC run, preventing start/join loops eating memory
  • Remove more config and generated files in distclean target
  • Add MVM_CROSS_THREAD_WRITE_LOG to usage message
  • Try to get PC on valid instruction for cross thread write logging
  • JIT continuationreset and continuationcontrol
  • JIT string comparison ops
  • Don't devirtualize push_n or unshift_n for now
  • Async sockets: handle close,close and close,write
  • Differeniate when nativecasting to intN/uintN
  • Fix data race in frame reference count handling
  • Make findcclass and findnotcclass return one past end of string on non-match
  • Fix buffer overrun in assembler for labelled exception handlers
  • Free STables in a safer place, fixing a parallel finalization data race
  • Fix alignment of inlined structs/unions

Download

2015.08

  • Removed multiple internal data races
  • Add ctxcode op to get the code object of a context
  • Inlining in spesh will now check post-optimization size of code
  • Use a binary search in unicode block lookup
  • Unicode database file now compilable with newer MSVC
  • Lots of fixes for problems reported by linter software
  • Support for parsing Unicode numbers
  • Some potential segfaults fixed
  • New control exceptions "await", "emit" and "done"
  • Trying to unbox a bigint larger than 64 bit now throws
  • Fix "merge facts at phi" opt in spesh forgetting the first argument
  • Many memory leaks fixed
  • Properly close stdin handle when an async process dies
  • Async processes now have a "ready" callback
  • Sleep API now split into sleep and nanosleep

Download

2015.07

  • Support for multi-dimensional arrays
  • Improved support for pipes
  • Updated to Unicode 8
  • Die when we try to accept() or read() outside an originating thread (used to silently not work)
  • Instrumentation for findings writes without locks to objects originating from another thread
  • The profiler will now also show natively called functions
  • Support for libffi as an alternative to dyncall
  • exists_pos is no longer part of the REPR API
  • Accessing an object's HOW is now part of the API
  • libuv will now autoquote cmdline arguments on windows
  • Fixed some code object related ops that could segfault
  • New openpipe implementation that allows to read from and write to stdin/stdout/stderr
  • spesh will now track facts across BB nodes even through PHI
  • Fixed numerous memory leaks when C strings were included in exceptions
  • Implemented "free at next safepoint" mechanism for safely freeing memory from internal data structures in a threaded context, thus fixing NFG table growth in multi-threaded applications
  • Fix compile on FreeBSD 8.4 and probably earlier by detecting gcc
  • Fixes for build repeatability
  • Optimization of can op fixed and fully enabled
  • Fix async process handle closing
  • Numerous warning cleanups for various compilers

Download

2015.06

  • No longer use up a full core in some async situations.
  • Errors from nativecall include dlerror() output for clarity.
  • More verbose and aligned output in MVM_SPESH_LOG.
  • Several ops added to the jit.
  • Throwing and resuming ops for exceptions supported in the jit.
  • More places now go through the Int cache.
  • Support for str attributes in CUnion and CStruct.
  • Non-characters now correctly considered valid for UTF-8 encoding.
  • Fix exception handler resolution bug.
  • Introduced MVM_SPESH_NODELAY to set spesh thresholds very low.
  • Support for building with gmake and gcc on windows.
  • Support for GNU/kFreeBSD.

Download

2015.05

  • Add missing C prototype for MVM_string_windows1252_decodestream
  • Fix uniname out of range error reporting.
  • Fix SSA crash when huge number of basic blocks.
  • Implement normalization buffer grwoth handling.
  • Add missing frees on invalid UTF-8 decoding.
  • Integrate NFG with UTF-16 non-stream decode.
  • Remove linenoise/readline
  • Give a decode stream a normalizer.
  • Further integrate normalizer with decode stream.
  • Fix chr for our brave new NFG world.
  • Update macportfile to 2015.04 release
  • Make \n a "normalization terminator".
  • Ensure concatenation is closed under NFG.
  • Don't leak synthetics from ord.
  • Integrate NFG with UTF-8 non-stream decode.
  • Implement NFG for decode stream case of UTF-8.
  • Fix use-after-free in open file error reporting.
  • Display exactly what thread ID was passed.
  • Release allocated resources before returning
  • Free resources for **pieces before returning
  • Release 'signature' before returning from unmarshal_callback()
  • Free leaked resource buffer before returning
  • Remove fragile assumption about buffer size.
  • Fix UTF-8 encoder to handle NFG.
  • More robust NULL string checking.
  • Ensure we get NULL-terminated strings if needed.
  • Bytecode file stores Latin-1 when possible.
  • Optimize temporary root handling.
  • Cache and mark the backend config hash.
  • Dual-purpose comp unit string heap as SC one.
  • Re-order bytecode read struct to be smaller.
  • Don't repeatedly calculate limit in bytecode read.
  • Toss some bits of ut_hash we don't use.
  • Toss hash bloom test bits we don't use.
  • Optimize at level 3 by default.
  • Toss even more hash bits we don't use.
  • Re-implement MVMIter on hashes using buckets.
  • Toss HASH_FSCK addition order check.
  • Use a simpler "deleting the last item" check.
  • Eliminate double-linked-list in hashes.
  • Fix use-after-free if hash iter block frees nodes.
  • Be consistent with paren-ing in macro.
  • Eliminate a single-use macro.
  • Correct head replacement logic.
  • Re-implement simple say/print using MoarVM I/O.
  • Thread ID handling cleanup.
  • Fix an ABA bug in the fixed size allocator.
  • At least do a spinlock rather than a mutex.
  • Factor out code to avoid a "magic value" all over.
  • Concurrency control on multi-cache additions.
  • Show line numbers for deopt annotations
  • Give every BB in the spesh log a line number
  • Devirtualize bindkey and bindpos ops
  • Implement MVM_op_elems for devirtualization
  • Implement getattr_* and getattrs_* devirtualization
  • Implement pop_* and shift_* for devirt
  • Implement bindattr and bindattrs ops for devirt
  • Fix a control flow thinko for logging
  • When failing from consume_reprop, do it loudly
  • No longer bail from many unhandled repr ops
  • Devirtualize setelemspos, existspos and existskey
  • Implement ordbaseat and eqatim_s ops for ignoremark
  • Silence warnings about pointer type mismatch
  • Increase stack space for call arguments.
  • More compact jit for add, sub, bor, band and bxor
  • Add lib install dir to rpath
  • Display "Inlined" flag in the spesh log
  • Add a missing barrier in multi-dispatch cache
  • Tweak error reporting of wrong outer frame
  • Include cuuid of invokee in error message.
  • Remove the frame pool
  • Spesh dump shows little words for fact flags
  • Spesh dump coderefs as filename + line number and "(closure)"
  • Handle LTM for ignorecase+ignoremark
  • Fix ref-count management of deserialized contexts.
  • Provide a "never repossess this" mechanism.
  • Fix a GC marking bug in parametric type setup.
  • Implement exception object creation from category.
  • Emit add, sub, bor, band, bxor with constant if possible
  • Kill duplicate getspeshslot ins for the same register
  • Formally bump minimum bytecode version to 5
  • JIT - check if constant value fits in 32 bit
  • Fix format type error in JIT logging
  • Add MVM_oops() function to panic with backtrace, used in spesh and JIT
  • Add op for disclaiming all objects of an serialization context (SC)
  • Check that owning object wasn't disclaimed by an SC.
  • Add support for CUnion repr to use with NativeCall
  • Add support for inlined CStructs and CUnions

Download

2015.04

  • Re-enabled lazy deserialization, decreasing Rakudo startup time and memory
  • Fix a possible buffer-overrun in MVMArray's existspos
  • Fix for ARMv5
  • Configure: add an option --ar
  • Mark existspos op as pure to allow better optimization
  • Tweak dynamic optimization and OSR thresholds to tune startup performance
  • Implement bounded serialization of parameterized types
  • Include file names in some deserialization errors
  • Clean up some unused functions and variables
  • Add attribute((format())) where appropriate
  • Correct some format strings
  • Allow nativecast from VMArray e.g. Blob/Buf
  • Output callsites in spesh log
  • Implement unsigned int types for native calls
  • Upgrade Unicode DB to Unicode 7.0
  • Include module that asked for stale dependency in error message
  • Handle 'is rw' params in native calls
  • Make some hot functions at startup time as always being inlined
  • Fix exception message when utf8 string is invalid from the start
  • Implement NFC/NFD/NFKC/NFKD Unicode normalization algorithms
  • Add op to normalize buffers of codepoints
  • Remove unused Unicode database script
  • Support cross-compiling with computed goto
  • Refactor pthread_yield detection
  • Add op "getcodelocation"; gets file and line of a MVMCode
  • Tweak istrue_s; every non-empty string is true now
  • Bump minimum serialization format version; remove code for old versions
  • Implement a more efficient varint serialization format
  • Remove the vestigial serialized 0 that used to be v-table length
  • Re-order struct MVMCollectable to slightly reduce L1 cache misses
  • Store the serialized reference type discriminator in 1 byte, not 2
  • Add missing IS_CONCRETE checks in serialization
  • Make unbox int/num/str functions test IS_CONCRETE always
  • Fix conflict with splice from bits/fcntl-linux.h
  • Fix missing frees of bytecode annotations
  • Serialize object headers more compactly
  • Serialize object references more compactly
  • Split codepoint iterator from grapheme iterator
  • Implement grapheme normalization algorithm (aka. "NFG")
  • Implement encoding of grapheme-level strings to bytes
  • Implement retrieving codepoints in different normal forms from NFG strings
  • Fake POSIX exit codes consequently on windows
  • Remove extra call to uv_run when closing a pipe
  • Loop over waitpid to get correct exit code for closed pipe
  • Basic implementation of case change with NFG
  • Make character class check on NFG synthetic uses base codepoint
  • Make Unicode property checks on NFG synthetics use base codepoint

Download

2015.03

  • Add a macports Portfile
  • Implement nativecallsizeof op
  • Rewrite MVM_file_copy so it handles files larger than 2GB
  • Mostly quiet MSVC warnings when compiling the JIT emitter
  • Chase libuv thread ID API change, and fix thread ID lookup on Windows
  • Teach profiler about native ref taking ops
  • Fix allocating an empty (no members) CStruct
  • JIT compilation for native reference related operations
  • Implement native register references
  • Support references to sized int and num lexicals
  • Fix missing GC rooting of callback object arguments
  • Fix big endian bug in if/unless optimization
  • Simplify known value handling in the optimizer
  • Make graph_spesh.p6 also show the dominance tree
  • Fix bugs in string_index_from_end
  • Bump dyncall revision
  • Fix big endian bug in the P6bigint REPR
  • Fix system detection in triple for cross compilation
  • Stop fiddling with slashes in openpipe on Windows
  • Make index('foo','') return 0, and handle null needle when start > 0
  • Type specialization for the bindattrs_s op
  • Optimize out many set instructions
  • Add helper functions so embedders won't need to poke into MVMInstance so much
  • Use CFLAGS, CPPFLAGS, and LDFLAGS from the environment, if set
  • Re-use allocated PHI node descriptors, to reduce allocations during optimization
  • Improve optimizer memory allocation block scheme to decrease waste
  • Allow STable changes in repossessed objects
  • Fix JIT of bindpos_n
  • Fix bogus pointer casts and libc name clashes to fix MinGW build
  • Fix a bug in iter optimization
  • Better armv6 and v7 detection

Download

2015.02

  • Fix memory leak in P6bigint
  • -O2 is now the default optimization level in clang/GCC
  • Improve performance of SSA form calculation
  • Dyncall dependency is now at version 0.9
  • Better error messages in NativeCall
  • CArrays are now zero-filled by default
  • MVMArrays can now be casted and passed to native functions
  • Addition of readlink and lstat ops, and general symlink compatibility
  • libuv dependency is now at version 1.0.0
  • P6int and P6num can now be "C sized"
  • Implemented native references to lexicals, attributes, and array elements
  • Added native_ref container specification
  • Added iscont_[ins] and decont_[ins] ops
  • Make multi-dispatch cache aware of native containers
  • Mixin prefix test in P6opaque now disregards attribute-free parents
  • Fix buffer overflow when trying to inline calls with many args
  • Handle argconst_[ins] instructions in inlining
  • Fix a crash from trying to unbox type objects passed to native args
  • Decrement usage counts in some optimizations, killing more dead code

Download

2015.01

  • Decrement usage of class type for setattr ops, enabling wval elimination
  • Add missing concreteness checks in concurrency ops
  • First operand of sp_guard* is r(obj) not int16
  • Make ReentrantMutex not prevent serialization
  • Fix various ops that could return real NULL pointers and cause SEGVs
  • Spesh gethow (can be spesh slot lookup)
  • Start documenting the parametric 6model design
  • Implement parametric 6model ops
  • Avoid calling MVM_callsite_get_common twice in many situations
  • Use labs instead of abs to avoid truncation on 64-bit values
  • Fix signed/unsigned warnings in bytecode handling
  • Big signed/unsigned cleanup in string/buffer handling
  • Fix leak when join returns early
  • Fix missing free in args spesh
  • Tweak fixed size alloc configuration for a small memory saving
  • Improve missing SC code ref error reporting
  • Start integrating 6model parametrics with serialization
  • Don't delete BBs with handler annotations
  • Handle assigning Str to a CArray[Str] slot (to assign NULL)
  • Simplify and optimize varint serialization/deserialization

Download

2014.12

  • Various warnings produced by clang fixed
  • Fixed ceil_n and floor_n to return n64, not i64
  • Pass -faddress-sanitizer when --asan is set
  • Eliminate various unneeded set instructions
  • Properly update successors for non-passed optional parameters
  • Optimize can operations
  • When bindlex fails, we should report "bindlex", not "getlex"
  • Mark takeclosure as an popular allocating op in the profiler
  • Expose callsite interning for extops
  • JIT randscale_n
  • Dump lexical names when dumping spesh graph
  • Only look at MVM_NFA_DEB environment variable once, not every NFA run
  • Implement longest literal tie-breaker in NFA
  • JIT cmp_i
  • JIT isnanorinf
  • JIT cmp_n
  • Handle sometimes-allocating ops in the profiler
  • JIT invokewithcapture
  • Count allocs in spesh'd/jitted frames separately in profiler
  • Turn a bunch of can_s ops into can ops instead.
  • Give graph_spesh.p6 a little introduction text
  • Avoid a pointer getting outdated on the stack in environment access
  • Replace quicksort with insertion sort in NFA fate sorting
  • Fix MVMROOT of a non-collectable in state variable handling
  • Detect useless SUBRULE edges in NFA, and trap epsilons to 0
  • Mark callback Str parameters as not to be freed
  • Record size of gen2_roots list after each GC when profiling
  • Do not call srand() if not using rand()
  • Don't use filename to determine EOFness
  • Allow passing of length = -1 to MVM_string_utf16_encode_substr
  • Don't resolve symlinks by hand
  • Avoid some duplicate work in inter-gen root processing
  • Fix a use-after-free in openpipe, which occurred quite often on OSX
  • Don't include PHIs when rendering spesh graph diagrams

Download

2014.11

  • JIT multicacheadd, multicachefind, radix_I, bindpos_n, bindpos_s, escape, blshift_i, brshift_i, write_fhs, cmp_I
  • Optimize out a bunch of unnecessary "set" instructions
  • Turn a bunch of const_s + findmeth_s into cheaper findmeth
  • Implement nqp::closefh_i which returns the exit code of a pipe
  • Allow nativecasting a CStruct to another CStruct
  • Fix temp register usage in optimize_istrue_isfalse
  • Fix a regression by eagerly deserializing stables/objects
  • Added tool to colorize registers in spesh logs and another to turn spesh logs into a data-flow and control-flow graph.
  • Let update_ops.p6 also write a perl6 module with ops data
  • Add --bindir, --libdir and --mastdir as Configure options
  • Create pkgconfig file as pkgconfig/moar.pc

Download

2014.10

  • Added op nativecallglobal
  • Update DynASM
  • [Configure] document --asan option, Implement --has-linenoise, --has-dyncall and --has-dynasm
  • Build and install libatomic_ops conditionally
  • Improve usage, include environment variables.
  • Document bytecode directory environment flag
  • Add beginnings of a manual page in docs/moar.pod
  • Don't mark inlined locals for logging frames.
  • Fix crash upon trying to clone a type object.
  • Fix concreteness test for the reprconv
  • Fix handling of command line args on Win32
  • Build with jit by default, add --no-jit option
  • Prettify --enable-jit obsoletion notice
  • JIT savecapture, usecapture, getobjsc, sin, cos, tan, asin, acos, atan. atan2_n, time_n, pow_n and sqrt_n, nativecallinvoke and numeric negation
  • Added MVM_calloc function
  • Make "cannot invoke" errors consistent.
  • Improve err msg about oob in io_read_bytes
  • Optimize out non-interned static callsites
  • Attempt interning the callsites we use in nativecall callbacks
  • Implement set_separator for syncfiles
  • Panic if MVM_platform_alloc_pages failed on posix system

Download

2014.09

  • Add an instrumenting profiler, recording profiling information at routine level and tracking use of specialized/JITted code and inlinings
  • Support profiling allocations and GC runs
  • Use arc4random on platforms that support it
  • Fix numerous warnings
  • JIT more big integer ops: div_I, div_In, mod_I, gcd_I, coerce_In, and bool_I
  • Specialization and JIT-compilation of various iteration-related instructions
  • JIT curcode and getcodeobj
  • Include filename in spesh log
  • Fix negative division in JIT
  • Mark getlexouter as not inlinable
  • Add mechanism for objects to get a persistent ID, used in Perl 6's .WHICH
  • Fix regression on PowerPC
  • Add missing SC write barrier to MVM_repr_bind_attr_*
  • JIT getattrs_* and bindattrs_* ops
  • JIT more string operations: indexat, findcclass, and findnotcclass
  • Add JIT logging of inlines
  • Cleanly panic if allocation fails, rather than crashing
  • Fix the build on ARM 32 + gcc 4.8.2
  • Better style on arg count errors
  • Avoid unaligned reads on ARMv7
  • Conditionally set include dirs and install rules (e.g. --has-libuv)
  • Add type finalizer support to the GC
  • Update libuv from 0.11.18 to 0.11.29
  • Base full collections off promotion rate, often reducing full collections
  • Add force_gc instruction
  • Set up travis continuous integration
  • Fix mis-use of libuv: we are not supposed to open a child's pipe to our stdin
  • Fix pointer to pointer native cast
  • conditionally use/install our libtommath headers
  • Don't try to serialize file handles

Download

2014.08

  • Add support for JIT compilation on x64 (when configured with --enable-jit); supports basic arithmetic and logical operations, branching, method finding, invocation with argument passing, basic parameter handling, boxing/unboxing, attribute access, array and hash access, some big integer operations, some string operations, type checks, and more. Integrated with deoptimization, OSR (On Stack Replacement), extension ops, and exception handling.
  • Specialize various cases of istrue/isfalse to remove some indirections
  • Add charrange handling to the NFA evaluator
  • Update Unicode database generation script with latest string API
  • Add char name lookup aliases (LF, FF, CR and NEL) as line separators
  • Update moar-gdb.py for new structure of MVMString
  • Add Configure support for ASAN
  • Fix multi cache bug for no positionals, some nameds case
  • Make spesh dump show numeric literals and lexicals properly
  • Assorted OSR fixes for frames that deoptimized, then hit OSR points
  • Fix a number of SSA/dominance memory leaks
  • Fix memory leak in inlining
  • Make dead code elimination not cause unrequired guards to be kept
  • Add an API for extops to be involved in fact discovery and specialization
  • Add type and no-container facts for bigint ops
  • Support inlining of frames with handlers
  • Enable inlining of lexotic (return) handlers
  • Allow addition of temporary registers when specializing
  • Specialize boxing and unboxing of args, both named and positional
  • Avoid repeatedly allocating memory for NFAs
  • Cache frame index in MAST assembly, to avoid a linear scan
  • Fix various dynamic variable and inlining interaction bugs
  • Add a dynamic variable lookup cache
  • Devirtualize serialization read/write functions
  • Make full frame deserialization lazy, reducing memory and startup time
  • Handle static lexical values far more efficiently
  • Identify MAST nodes in assembler by exact type, cheapening assembly
  • Specialize smart stringify/numify into simpler ops in some cases
  • MAST::Label works on identify now, not name matching
  • Make "allocate in gen2" mode reentrant
  • Support lazy deserialization of static lexical values, method caches, and meta-objects
  • Remove some unused fields from STable
  • Optimize some simple control exceptions into gotos
  • Don't redo dead instruction elim on inlinees
  • Make sure inlined args are always marked as used, fixing a bug
  • Add an int -> str cache for 0..^64
  • Add asynchronous process spawning, I/O, and killing
  • Check dll cache before searching through libpath, saving many stats
  • Make a better guess at MAST assembly output buffer sizes
  • Add a mechanism for debugging strand issues
  • Fix bug in string repeat of an already repeated strand
  • Complain properly about missing late-bound methods
  • Clear special return data more eagerly, fixing a double-free
  • Refactor get_storage_spec
  • Fix P6bigint unbox portability bug

Download

2014.07

  • Make default file mode 0666
  • Auto-detect computed goto support and enable it when available
  • Implement On Stack Replacement for hot loops
  • Fix and enable isconcrete optimization
  • Use const_i64_16 in spesh-produced code for more compact output
  • Fix bug where [work|env]_alloc were not cleared, leading to mis-frees
  • Support inlining frames that use with extops
  • Add missing decl in header to quiet warnings
  • Fix logical bug in fixed-size-allocator
  • Fix capturelex race condition
  • Add missing MVMROOT in ConditionVariable setup
  • Don't share cached Lexotics over threads
  • Re-order code to avoid race on event loop startup
  • Add a bunch of missing MVMROOTing in asyncsocket
  • Make exit get out quickly
  • Close async sockets on event loop thread to avoid corruption
  • Make --no-optimize and --no-debug work in Configure
  • Implement (de)serializing of Array[uint]
  • Specialize getlexperinvtype_o (enables better roles optimization)
  • Allow pointer math using CPointer repr
  • Fix typo in CArray.elems error message
  • Add a cast to get rid of a warning in nativecall.c
  • Fix merging of inline table entries
  • Eliminate unused guard instructions at end of specialization
  • Update uthash to latest version
  • Correct computation of lexical vivifications
  • Add nativecallcast operation
  • Fix use-after-free bug with thread entry callsite
  • Cope with cross-deopt-point usage analysis
  • Give ContainerSpec a spesh function, use it for decont
  • Make various spesh things available publicly, for VM extensions
  • Significantly overhaul the strings code, fixing many performance issues
  • Optimize find_cclass and find_not_cclass

Download

2014.06

  • Correct closure semantics of native callbacks
  • Add ops for 2-possibility named parameter handling.
  • Start storing named argument names in callsite objects
  • Start interning callsites with named arguments
  • Specializer can turn named arg resolution to indexed lookups
  • Specializer can optimize named args
  • Specializer adds facts and guards for named args
  • Implement cancelling listening on a socket
  • Implement async bytes reads from sockets
  • Optimize invocation by pre-selecting callee spesh cand if possible
  • Pick a spesh threshold by bytecode size rather than a constant
  • Mark ops that are not suitable for inlining
  • Add an operand type for spesh slots
  • Implement basic inlining
  • Implement deoptimization of inlined calls, which uninlines
  • Make interp trace output more useful; include op
  • Have invoke/return end a basic block
  • Add a thread-safe fixed-size allocator
  • Use fixed-size allocator for frames/work/env.
  • Use fixed-size allocator for hash entries
  • Use fixed-size allocator for named used flags.
  • Don't refuse to spesh if we've a slurpy positional
  • Can do coerce_in of literals at spesh-time
  • Fix spesh frame handler end annotation motion in instruction deletion
  • Fix spesh fact marking bug

Download

2014.05

  • Add a libuv-managed event loop thread
  • Implement timers
  • Implement nqp::signal; support various signals
  • Add async read/write sections to IO op table
  • Implement async socket listen/connect
  • Implement async read/write ops
  • Implement chars case of async socket reads
  • Fix HLL mapping of type objects
  • Implement file watchers
  • Add infrastructure for cancellation
  • Implement cancellation of timers
  • stat the target of a symlink when we query for filesize
  • Dump deopt instruction spesh annotations
  • stat file descriptor in eof() when filename is unset
  • Serialize CStruct repr_data
  • Add MVMNull REPR and a singleton VMNull instance
  • Teach various parts of the VM about VMNull
  • Lazily allocate lexical containers
  • Optimize frame allocation
  • Remove BOM-discarding code from MVM_string_utf8_decode()
  • MVM_string_utf8_decode() should take a MVMuint8 *, not a char *
  • P6opaque now handles C structure member alignment, just like CStruct does
  • Steal P5's unlink magic for Windows; clear readonly flag when needed
  • Add lexical lookup lifetime hinting ops
  • Re-organize spesh to have log/specialize phases
  • Use spesh logging to emit guards into code
  • getlexstatic_o optimization in spesh
  • Better error on handler fixup failure in spesh
  • Implement op execname, which stores the path of the runner
  • Implement all vs. one deopt
  • Fix moving of handler annotations
  • Basic dumping of facts in spesh
  • Cope with annotations being moved to a phi
  • Make sure we don't clobber block handler setting in spesh
  • Iterate to fixed point when finding unused instructions, giving better results
  • Pre-invalidate all deopt target addresses, to catch fixup failures
  • Optimize simple calls and multi-dispatch at spesh time if possible
  • Add Makefile rules to generate pre-processed source
  • Add Makefile rules to generate assembler
  • Support for ARMv6. Don't try to read unaligned doubles or long longs
  • Ensure that MVMCompUnit can correctly free data_start
  • MVMStaticFrame now supports bytecode pointing to a private malloc()ed copy.
  • Do proper endian correction on bytecode
  • Add Ops for 32/16 bit 64 int literals
  • isnonnull op for use in spesh
  • turn islist/... into either isnonnull or a literal 0.
  • Teach spesh_diff.p6 about the new output of spesh dump
  • Teach spesh_diff.p6 about Facts
  • improve run time performance of spesh_diff.p6
  • Avoid using an uninitialized variable.
  • Harvest strings in facts discovery process
  • Specialise can and can_s ops into const_i64 when possible
  • Change the way we store SCs in object headers to allow faster lookups of indexes
  • Fix bigint bitops
  • Ensure spesh_alloc aligns on platforms needing it
  • Include SC identifiers in bytecode dump
  • Make dump_backtrace more widely available.
  • Merge the bodies of MVM_sc_get_{obj,stable}sc and set_
  • Change serialization context indexes to be unsigned. Use ~0 as a sentinel.
  • Add inline functions to wrap accesses to sc.sc_idx and sc.idx
  • Add struct MVMSerializationIndex to hold large STable indexes
  • Free any allocated MVMSerializationIndex structs
  • Add a probe to determine the pointer size
  • Conditionally compile the MVMSerializationIndex for 32 bit platforms only
  • Allocate a MVMSerializationIndex if sc_idx would overflow in the union
  • Specialize getattr_[ins] on P6opaque
  • Fix bigint upgrade check
  • Optimize object attribute accesses in spesh
  • Spesh indirect form of attr ops with known names
  • Rakudo Bug #121273 fixed - losing a 0 from end of exponent
  • Re-arrange various structures for memory saving
  • Add handler infrastructure for supporting labeled loop exceptions

Download

2014.04

  • Brought thread ops in line with nqp:: op API
  • No longer inherit caller chain when starting a new thread
  • Fix a range of parallel garbage collection bugs
  • Block/unblock threads for GC while sleeping
  • Implement reentrant mutexes
  • Implemented semaphores
  • Implemented concurrent blocking queue support
  • Implement condition variables
  • Main thread has ID 1 now
  • Move nursery corruption check to after inter-thread work passing
  • Fix a gen2roots compaction optimization bug
  • Add flag '--has-sha' option to Configure to use a system SHA-1 library
  • GC orchestration cleanups and extra logging
  • Compact the gen2 overflows list
  • Fix decodestream_bytes_to_buf eating too much data
  • Added some missing MVMROOTs on config setup
  • Removed duplicate gen2 root cleanup call
  • Small cleanups to serialization
  • Avoid an extra level of function call in various REPR allocate functions
  • Add locking for IO handles
  • Add the Configure flags '--has-libuv and '--has-libatomic_ops'
  • Shortcut shr when we have a small lhs but rhs is >= 32
  • Add logic to turn bytecode into SSA form, and from SSA back to bytecode
  • Added infrastructure for "spesh ops", to use in type-specialized bytecode
  • Start interning positional callsites
  • Keep a rough call count per static frame
  • Add bytecdoe specialization infrastructure
  • Optimize simple positional arg fetch in specialized bytecode
  • Resolve methods at specialization time when type is known
  • Add a monomorphic method cache
  • If MVM_SPESH_LOG is in env, log spesh work to it
  • Turn known-unrequired decont into set
  • Make MVM_SPESH_DISABLE env var disable spesh
  • Add :pure annotations to side-effect-free ops; eliminate dead code
  • Add a tool for splitting and diffing spesh log output
  • Add setmultispec mechanism for optimizing away only-star proto
  • Optimize optional positoin arguments in bytecode specialization
  • Optimize out istype for a spesh-time-known value or type
  • Optimize if_i and unless_i for known values
  • Corrected atan2 op signature.
  • Implement de-optimization on mixins
  • Don't lose HLL owner during serialization
  • Optimize away hllize when possible
  • Optimize away assertparamcheck when possible
  • Infrastructure to allow REPRs to participate in spesh
  • Optimize object creation in common cases with known types
  • Small fixes to MVM_string_(latin1|windows1252)encodesubstr
  • Optimize bindattr_o on P6opaque when possible.
  • Change the way lexotic is handled to avoid the need for allocation
  • Specialize empty named slurpy args.
  • Add a way to flag a frame as a "thunk".
  • Add ctx[outer|caller]skipthunks ops.
  • Make backtrace generation ignore thunks.
  • When readline/linenoise see EOF, mark handle EOF
  • Set hint for invokespec and multispec, improving invocation performance
  • Improve the VM exit strategy, so non-app-lifetime threads are waited on
  • Correctly handle temp roots stack in callbacks
  • add sched_yield for NetBSD
  • Fix callsite size calculation in tweak_cs
  • Fix buffer overflow in UTF-16 encoding
  • Trigger repossession on OP(push_*)
  • Fake up a final entry off the end of Unicode, fixing some lookup bugs

Download

2014.03

  • Implement a fast-path for string strand flattening
  • Fix character lookup by name sometimes giving wrong result
  • Control and printable now know about Latin-1 control characters
  • Fix bug in Latin-1 handling
  • Fix and optimize various character property lookups
  • Implement lookup of non-boolean Unicode properties
  • Implement character code to name lookup
  • Implement lookup of enum/stringy Unicode properties
  • Fix memory leak of active handlers in continuations
  • Clear up gen2 memory at exit
  • Clear up frame pool at exit
  • Don't leak static frame instruction offsets
  • Fix memory leak in MVMHash
  • Simplified/optimized frame reference count handling in continuations
  • Fixed missing exception resume reference count decrement
  • Correct "on stack" continuation reference count handling
  • Add missing cleanup in MAST assembler
  • Fixed used named args tracking memory leak
  • Fixed SEGV in eof of non-file-based filehandle
  • Pass STDIN to subprocess in shell()
  • Fixed resolution of IPv6 host names
  • Implemented native calling
  • Implemented CPointer representation
  • Implemented CArray representation
  • Implemented CStruct representation
  • Improve GDB plug-in string usage analysis
  • Make GDB plug-in aware of gen2 overflows
  • Clean-up and optimization of many REPR allocate functions
  • Fixed over-eager / to \ conversion in nqp::shell on Windows
  • Implemented native callbacks
  • Correct copy size of args buffer, avoiding reading unmapped memory
  • Updated to new liblinenoise and re-instated usage of it
  • Bump dyncall to latest version
  • Add --has-libtommath option to Configure for using system libtommath

Download

2014.02

  • Increased precision of num => str coercion
  • Mechanism for per-HLL handling of method resolution errors
  • Gave can the same null-check semantics as findmethod
  • Fixed various "not found" lexical lookup semantics
  • Use a more efficient encoding for integers in the serialization blob
  • Implemented reposession conflict resolution handling for objects
  • Optimized GC worklist processing to avoid unrequired barriers
  • Added a GDB plugin to help analyse VM data structures, heap use, etc.
  • Zeroed memory in a few places, to avoid reading junk and quiet Valgrind
  • Simplified and fixed UTF-16 encoding
  • Implemented unsigned native integer array support
  • Added various missing write barriers on STables
  • Added openpipe functionality, to support qx/qqx in Perl 6
  • Corrected accidental and potentially explosive use of REPR(...) on STables
  • Switched to using flag bits to mark liveness in GC
  • GC forwarder pointer used in nursery now overwrites existing object body, saving 4 or 8 bytes on every collectable object
  • Added various GC sanity checking asserts to aid debugging
  • Encapsulated all serialization context accesses
  • Defined NDEBUG in optimized builds
  • P6bigint no longer uses libtommath for integers fitting within 32 bits
  • Optimized serialization of P6bigints fitting within 32 bits
  • Implemented link and symlink
  • Fixed mod_n op's behavior on negatives
  • Implemented floating point fallback case of the pow_I op
  • Fixed srand op to also control rand_I
  • Initialize the random seed at startup
  • Properly clean up active handlers that we unwind over
  • Radix parsing now returns an array of integers, not floating point
  • Huge refactor of I/O, fixing many bugs and leading to cleaner code
  • Proper handling of characters split over byte buffer boundaries in I/O
  • Corrected Latin-1 to be Latin-1, and added Windows-1252 encoding
  • Added a constant cache for boxing integers 0 through 15
  • Properly implemented synchronous client and server TCP socket support
  • Better estimate and perhaps shrink string memory for UTF-8 decode
  • Added probing to Configure to learn how the compiler does 'static inline'
  • Switched many macros over to static inline functions

Download

2014.01

The first official MoarVM release! Capable of running the 2014.01 release of Rakudo Perl 6, the first one with MoarVM support. (No change log for this initial release, since it's basically "all the things".)

Download