X87: Reimplement Maps and Sets in JS
port 909500aa1d
(r27605)
original commit message:
Previously, the only optimized code path for Maps and Sets was for String keys.
This was achieved through an implementation of various complex operations
in Hydrogen. This approach was neither scalable nor forward-compatible.
This patch adds the necessary intrinsics to implement Maps and Sets almost entirely
in JS. The added intrinsics are:
%_FixedArrayGet
%_FixedArraySet
%_TheHole
%_JSCollectionGetTable
%_StringGetRawHashField
With these additions, as well as a few changes to what's exposed as runtime functions,
most of the C++ code backing Maps and Sets is gone (including both runtime code in
objects.cc and Crankshaft in hydrogen.cc).
BUG=
Review URL: https://codereview.chromium.org/1066373002
Cr-Commit-Position: refs/heads/master@{#27681}
This commit is contained in:
parent
e965a1f84a
commit
56600a35a4
@ -2186,16 +2186,6 @@ void CEntryStub::Generate(MacroAssembler* masm) {
|
||||
__ call(ebx);
|
||||
// Result is in eax or edx:eax - do not destroy these registers!
|
||||
|
||||
// Runtime functions should not return 'the hole'. Allowing it to escape may
|
||||
// lead to crashes in the IC code later.
|
||||
if (FLAG_debug_code) {
|
||||
Label okay;
|
||||
__ cmp(eax, isolate()->factory()->the_hole_value());
|
||||
__ j(not_equal, &okay, Label::kNear);
|
||||
__ int3();
|
||||
__ bind(&okay);
|
||||
}
|
||||
|
||||
// Check result for exception sentinel.
|
||||
Label exception_returned;
|
||||
__ cmp(eax, isolate()->factory()->exception());
|
||||
|
Loading…
Reference in New Issue
Block a user