Improve the performance of JNI calls by making JNI calls require a
Context object. LocalRef inherits from Context and can make calls
directly. Non-local Ref classes will generate a Context object when
making a call. The patch also makes the template design cleaner in
several cases.
Currently it will fail with errors such as:
Insufficient debug information (private symbols are needed) or code from
unknown language. The following modules didn't have full symbols:
nsBrowserApp.obj
AppData.obj (xpcomglue_staticruntime.lib)
FileUtils.obj (xpcomglue_staticruntime.lib)
nsCRTGlue.obj (xpcomglue_staticruntime.lib)
nsXPCOMGlue.obj (xpcomglue_staticruntime.lib)
We need to turn this back on when clang-cl grows more debug
info support.
Now that all the MSimd* instructions require unboxed arguments of the right
type, there is no need to explicitly pass in the specialization MIRType when
creating these instructions.
- Remove the specialization MIRType argument from instruction constructors,
::New() and ::NewAsmJS() functions.
- Add tighter argument checking assertions in the constructors.
--HG--
extra : commitid : GZLfA6snptI
The MIRType is not specific enough for MSimdUnbox to distinguish signed from
unsigned SIMD types, and when generating code for a MSimdBox, we can't look at
the templateObject to get the SimdType because it belongs to a different thread.
Pass a SimdType to CodeGenerator::registerSimdTemplate() instead of inspecting
the template object.
Delete MIRTypeToSimdType() which can't be accurate because MIRType doesn't
carry signedness information.
Add an optimization to unboxSimd(): With a SimdType on MSimdBox, we can
recognize the very common pattern where unboxSimd() gets called with an MSimdBox
value. In the types check out, just reuse the MSimdBox input and don't even
inert the check code.
--HG--
extra : commitid : AXu1cE30ziy
The SIMD type policies no longer needd to insert MSimdUnbox instructions before
SIMD operations. This is already handled before the SIMD operations are created.
Assert that the MIRTypes are as expected instead.
--HG--
extra : commitid : A8jdZTGmDSi
When inlining SIMD operations that take a SIMD type as an argument, explicitly
insert a type checking MSimdUnbox using the new unboxSimd() function. This
requires passing down the SimdType argument from inlineSimd().
- Remove SimdSign and other arguments that can be inferred from the SimdType.
- Add a new function inlineSimdShift() to handle the shift operations where the
second argument is a scalar.
- Add a GetSimdLanes() function to SIMD.h which counts the number of lanes in a
SIMD type.
--HG--
extra : commitid : 8GFBUY1ifsW
This helper function inserts an MUnboxSimd node which checks the arguments to
an inlined SIMD operation.
Use it for inlineSimdCheck() which now takes a SimdType argument. Also make
inlineSimdCheck produce a value that is a box/unbox pair instead of simply
returning its argument. This means that any SIMD type checking and unboxing
will happen at the time the check() function is executed, rather than when its
result is used. This is usually what you want.
--HG--
extra : commitid : dDKTWaCHSS
We now have functions to create a (MIRType, SimdSign) from a SimdType, so use
those instead.
Calling SimdTypeToMIRType() also has the benefit of verifying that the list of
supported types in this function is consistent with the types in InlinableNative.
Following patches will push the SimdType to MIRType conversion further down the
call tree.
--HG--
extra : commitid : 13xUuY4JznE
Provide two versions of this function:
- MaybeSimdTypeToMIRType returns false for unsupported SimdTypes.
- SimdTypeToMIRType asserts that the type is supported.
The conditional one is used in IonBuilder::inlineConstructSimdObject() to
provide a 'SimdTypeNotOptimized' outcome for JIT coach.
--HG--
extra : commitid : 5ujN5FiDEWN
Implement GetTarget() and functions of CSSPseudoElement.
We use a strong reference from CSSPseudoElement to Element and a non-owning
reference from Element to CSSPseudoElement.