Remove the `if (!mozilla::IsPointer<T>::value || thing)` check in
GCVariantImplementation::trace, as GCPolicy will dispatch these to
GCPointerPolicy and InternalPointerPolicy (for pointers) and StructGCPolicy (for
non-pointers).
Also use Rooted for prevState_ in AutoSetNewObjectMetadata and remove
inherit from CustomAutoRooter.
The CacheIR code only sees transparent CCWs so it's fine to do a static unwrap.
DebuggerObject::unwrap is more complicated. We're in the debugger's compartment
there; I went with UnwrapOneCheckedStatic as it seems safest and simplest for
now.
Differential Revision: https://phabricator.services.mozilla.com/D21354
--HG--
extra : moz-landing-system : lando
I've only added support for these, renamed in a couple of error
messages and a few test cases, not renamed all the uses, because there
are so many. Will file followup bugs for that work, but it won't be
urgent.
Note, wabt no longer recognizes get_local et al, it requires local.get
etc. But we should remain backward compatible for a long while still.
Differential Revision: https://phabricator.services.mozilla.com/D21502
--HG--
extra : rebase_source : b78b23ee5edb6121da6884b1bf36336e07ea82ef
Wabt is now supporting funcref exclusively, and with the reftypes
proposal I think there's broad agreement that we will stop using
anyfunc. So let's accept funcref both in the text format and in the
table creation dictionary, and let's use this name as the canonical
name in error messages and similar.
But let's also continue to accept anyfunc, since there may be
in-flight tests and other content that uses it. This includes a
couple of emscripten-compiled benchmarks currently in the repo; I
chose not to change those.
Differential Revision: https://phabricator.services.mozilla.com/D21388
--HG--
extra : rebase_source : 078ffbac2c3d88b2ce74fdcf06493b4db8000dac
StackMapGenerator::createStackMap() creates stack maps in the wasm baseline
compiler. For release builds, it first performs a check to determine whether
the stackmap would describe only non-ref words, and if so, exits without
creating the map, since the map would be useless.
To make the check cheaper, it is inexact but safe, so it sometimes causes a
map to be created even though it is unnecessary. Specifically, the vector
|extras|, which may contain a description of exit stub register save
locations, is regarded as possibly-contributing-refs if it is merely
non-empty. The actual contents are not checked. This causes creation of
33,688 unnecessary stack maps in the Tanks test case, probably one for each
function.
The fix is simple. Actually check every element of |extras| to see if any are
|true|. This makes the test exact, removes all unnecessary map creation, and
reduces the Tanks compile cost from 2.43 billion instructions to 2.39 billion
instructions. That is, the shortcut was overall a loss anyway, presumably due
to the extra costs incurred by the pointless stackmap creation.
--HG--
extra : rebase_source : 4990f28ec6d3d50e289432572c79a6ca105aecc3
Add an RAII guarded initialization for the IO interposer to the
initialization process for xpc shell tests. This ensures that whenever
an xpcshell tests uses the IOInterposer, that it will correctly
catch all registered threads, and will not miss any.
Differential Revision: https://phabricator.services.mozilla.com/D20736
--HG--
extra : moz-landing-system : lando
We are doing this to:
1) Eliminate (hundreds of) static constructors. These account for a significant
fraction of all remaining static constructors in Gecko.
2) Use constexpr for VMFunction data. This was not possible with the linked list
but the new design stores all data in a constexpr array. This will save a few
KB per process.
3) Make it easier to define a new VMFunction.
4) Coalesce duplicate VMFunction copies in Baseline/Ion/ICs.
5) Get rid of the (read-only) HashMap for the VMFunction => code lookup. We can
use a Vector instead.
6) Make it easier in the future to generate the wrappers at compile time.
This patch will let us incrementally convert the remaining VM functions. The
only thing not handled by this patch is support for the TailCall and
extraValuesToPop fields. We can do this when we convert the Baseline IC code
that uses these fields.
Once all VM functions have been converted we can remove and simplify more code.
Differential Revision: https://phabricator.services.mozilla.com/D21332
--HG--
extra : moz-landing-system : lando
This was useful when we had ExclusiveContext and PJS ThreadSafeContext but now we
only use JSContext* so it's simpler to just use that.
Differential Revision: https://phabricator.services.mozilla.com/D21331
--HG--
extra : moz-landing-system : lando