The comments in PreWriteBarrierImpl mention that the per-barrier verifer can
turn on incremental barriers in the atoms zone outside of a GC. This also
applies to the self hosting zone so we just need to relax the assertions to
cover that too.
Differential Revision: https://phabricator.services.mozilla.com/D93760
In clang trunk 12, mingw builds started adding an `.exe` extension by default. We need to have `ac_exeext` know about this so that we'll search for `conftest.exe` rather than `conftest`. Calling `AC_EXEEXT` will go through some logic and set the right value of `ac_exeext`.
Differential Revision: https://phabricator.services.mozilla.com/D93252
The `clobber` targets are superseded by `mach clobber`, so we don't need them for any reason. The `clean` target is meant to get you to a post-`configure` state, but it doesn't really work, and if it's necessary for you to be in that state for some reason you can just clobber and re-`configure`, so it doesn't seem worth it to get it working again. Instead, delete all of them. Also delete `everything` which is not useful when `clobber` doesn't exist.
Differential Revision: https://phabricator.services.mozilla.com/D93514
This fixes bug 1542660 for the usual case (no direct eval, less than
ParseContext::GeneratorFixedSlotLimit locals), so this adds a unit test
contributed by Mathieu Hofman in that bug.
Differential Revision: https://phabricator.services.mozilla.com/D93386
Without these changes, the tests fail because the engine returns
`{optimizedOut: true}` for some uses of `frame.environment.getVariable` and
`frame.this`. The right solution involves teaching
`DebugEnvironmentProxyHandler::handleUnaliasedAccess` how to access suspended
`GeneratorObject` state.
Differential Revision: https://phabricator.services.mozilla.com/D93388
No effect yet, since there are no stack locals to copy. Without this change,
storing generator locals in the stack would cause several debugger tests to
fail.
Differential Revision: https://phabricator.services.mozilla.com/D93387
No immediate effect, but when we start optimizing generator locals into stack
slots later in this stack, we do not want to optimize `.generator`, as e.g.
js::GetGeneratorObjectForFrame assumes it is stored in the CallObject.
Before this patch, there was no way in the frontend to force binding to be
closed-over.
Previously reviewed by jandem as part of D93381.
Differential Revision: https://phabricator.services.mozilla.com/D93647
Remove inline caching code for TypedObjects. Some of these are incorrect,
as we can no longer write to TypedObjects from JS. The rest should just
be removed to reduce code that makes assumptions on the type system of
TypedObjects.
Differential Revision: https://phabricator.services.mozilla.com/D93528
This fixes bug 1542660 for the usual case (no direct eval, less than
ParseContext::GeneratorFixedSlotLimit locals), so this adds a unit test
contributed by Mathieu Hofman in that bug.
Differential Revision: https://phabricator.services.mozilla.com/D93386
Without these changes, the tests fail because the engine returns
`{optimizedOut: true}` for some uses of `frame.environment.getVariable` and
`frame.this`. The right solution involves teaching
`DebugEnvironmentProxyHandler::handleUnaliasedAccess` how to access suspended
`GeneratorObject` state.
Differential Revision: https://phabricator.services.mozilla.com/D93388
No effect yet, since there are no stack locals to copy. Without this change,
storing generator locals in the stack would cause several debugger tests to
fail.
Differential Revision: https://phabricator.services.mozilla.com/D93387
No immediate effect, but when we start optimizing generator locals into stack
slots later in this stack, we do not want to optimize `.generator`, as e.g.
js::GetGeneratorObjectForFrame assumes it is stored in the CallObject.
Before this patch, there was no way in the frontend to force binding to be
closed-over.
Previously reviewed by jandem as part of D93381.
Depends on D93381
Differential Revision: https://phabricator.services.mozilla.com/D93647
The existing gc tests relied on struct <: externref in various ways,
this commit fixes this.
Additionally a new test is added for checking we have dynamic tests
for eqref on all wasm value entry points.
Differential Revision: https://phabricator.services.mozilla.com/D93002
Give ref.eq type of [eqref, eqref] : [i32], closing a corner case where boxed
JS values could be compared for equality.
Restrict struct.narrow to operate on eqref, as that's the super type of structs.
This also allows us to drop an unboxing from externref -> typed object as that
is now done in all wasm entries.
Differential Revision: https://phabricator.services.mozilla.com/D93001
This commit adds support for the eqref value type. It shares the same
representation as externref, with the restriction that all values must
be TypedObject's. Dynamic type checks similar to funcref are added to
stubs.
As fallout from anyref removal, struct types were left as subtypes of
externref. This commit switches them to be subtypes of eqref.
As a small tweak, the ordering on cases when switching on refTypeKind()
were standardized to binary order (i.e. funcref, externref, eqref).
I think we can refactor some code to simplify the process of adding
new reftypes and would like to do that in the future.
Differential Revision: https://phabricator.services.mozilla.com/D93000
This commit removes all tests that used the old TypedObject API.
We may be able to salvage some of these tests in the future when
the Wasm GC API is clearer, but for now remove them.
Differential Revision: https://phabricator.services.mozilla.com/D92860
Unknown crash due to a corrupt scalar type. It may be caused by this probe, so removing it to see if the crash resolves.
Differential Revision: https://phabricator.services.mozilla.com/D93155
Soft div/mod are supported on ARMv7 with Ion, and the callouts need to
preserve the Tls register and pass the Tls register offset to
callWithABI.
The introduced code follows the pattern used elsewhere in the file:
push the Tls before setting up the call and record its frame depth;
pass the frame offset to callWithABI; pop the Tls after the call.
Passes all tests on simulator.
Differential Revision: https://phabricator.services.mozilla.com/D93464
Add a separate MIR node for `GuardFunctionIsNonBuiltinCtor` instead of trying to
reuse the existing `MGuardFunctionFlags` node.
Depends on D93334
Differential Revision: https://phabricator.services.mozilla.com/D93335
Background: https://github.com/WebAssembly/simd/pull/127
For the widening dot product instruction:
- remove the internal 'Experimental' opcode suffix in the C++ code
- remove the guard on the instruction in all the C++ decoders
- move the test cases from simd/experimental.js to simd/ad-hack.js
I have checked that current V8 and wasm-tools use the same opcode
mapping. V8 in turn guarantees the correct mapping for LLVM and
binaryen.
Differential Revision: https://phabricator.services.mozilla.com/D92929
Background: https://github.com/WebAssembly/simd/pull/122
For all the pseudo-min/max SIMD instructions:
- remove the internal 'Experimental' opcode suffix in the C++ code
- remove the guard on experimental Wasm instructions in all the C++ decoders
- move the test cases from simd/experimental.js to simd/ad-hack.js
I have checked that current V8 and wasm-tools use the same opcode
mappings. V8 in turn guarantees the correct mapping for LLVM and
binaryen.
Differential Revision: https://phabricator.services.mozilla.com/D92928
pmin and pmax handled NaN incorrectly because the wonky semantics of
MINPS and MAXPS require arguments to be reversed to properly handle
NaN for these wasm SIMD instructions.
We fix this the expedient way: we keep the same masm abstraction and
introduce moves to rearrange the arguments. This should be optimized
eventually and a bug will be filed for that now.
Differential Revision: https://phabricator.services.mozilla.com/D92927
Background: https://github.com/WebAssembly/simd/pull/232
For all the rounding SIMD instructions:
- remove the internal 'Experimental' opcode suffix in the C++ code
- remove the guard on experimental Wasm instructions in all the C++ decoders
- move the test cases from simd/experimental.js to simd/ad-hack.js
I have checked that current V8 and wasm-tools use the same opcode
mappings. V8 in turn guarantees the correct mapping for LLVM and
binaryen.
Drive-by bug fix: the test predicate for f64 square root was wrong, it
would round its argument to float. This did not matter for the test
inputs we had but started to matter when I added more difficult inputs
for testing rounding.
Differential Revision: https://phabricator.services.mozilla.com/D92926
The final patch in this series. This changes the GenericTracer APIs to take a
thing pointer and return a possibly updated versions, rather than taking a
double pointer to the thing. This means that we can change the details of how
pointers are stored in the heap without chaning this interface.
Differential Revision: https://phabricator.services.mozilla.com/D93336
This caught some isEffectful instructions that were marked isMovable. That doesn't
really make sense, but this also doesn't fix any actual issues because optimizations
check both.
Depends on D92579
Differential Revision: https://phabricator.services.mozilla.com/D92580