PPC/s390: [builtins] implement RunMicrotasks pump as a code stub
Port 52ff3ae48b
Original Commit Message:
- Implement RunMicrotasks in CSA to prevent a potentially large number
of jumps between C++ and JS code while consuming te queue. Appears to
provide a ~60% speedup in microtask-heavy code, which from limited
testing appears to scale linearly.
The code-stub microtask pump bails out to the old C++ microtask pump
if it encounters a CallHandlerInfo microtask, and remains in C++ for
the remainder of the queue (returning to the JS/stub implementation
after the bailed out queue is exhausted).
- Add a variation of JSEntryStub which enters the new RunMicrotasks code
stub.
- Add a new RunMicrotasks helper to Execution, which uses the
RunMicrotasks entry stub.
R=caitp@igalia.com, joransiu@ca.ibm.com, jbarboza@ca.ibm.com
BUG=
LOG=N
Change-Id: Ifa15ca19312bb92758e82d19c3e3fc0a8b908d82
Reviewed-on: https://chromium-review.googlesource.com/820197
Reviewed-by: Joran Siu <joransiu@ca.ibm.com>
Commit-Queue: Junliang Yan <jyan@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#50018}
This commit is contained in:
parent
e5d1ff2570
commit
4bc48c2185
@ -643,8 +643,6 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
||||
__ mov(cp, Operand(context_address));
|
||||
__ LoadP(cp, MemOperand(cp));
|
||||
|
||||
__ InitializeRootRegister();
|
||||
|
||||
// Push the function and the receiver onto the stack.
|
||||
__ Push(r4, r5);
|
||||
|
||||
|
@ -639,8 +639,6 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
|
||||
__ mov(cp, Operand(context_address));
|
||||
__ LoadP(cp, MemOperand(cp));
|
||||
|
||||
__ InitializeRootRegister();
|
||||
|
||||
// Push the function and the receiver onto the stack.
|
||||
__ Push(r3, r4);
|
||||
|
||||
|
@ -489,6 +489,8 @@ void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
// Set up the reserved register for 0.0.
|
||||
__ LoadDoubleLiteral(kDoubleRegZero, Double(0.0), r0);
|
||||
|
||||
__ InitializeRootRegister();
|
||||
|
||||
// Push a frame with special values setup to mark it as an entry frame.
|
||||
// r3: code entry
|
||||
// r4: function
|
||||
@ -566,12 +568,7 @@ void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
// r5: receiver
|
||||
// r6: argc
|
||||
// r7: argv
|
||||
if (type() == StackFrame::CONSTRUCT_ENTRY) {
|
||||
__ Call(BUILTIN_CODE(isolate(), JSConstructEntryTrampoline),
|
||||
RelocInfo::CODE_TARGET);
|
||||
} else {
|
||||
__ Call(BUILTIN_CODE(isolate(), JSEntryTrampoline), RelocInfo::CODE_TARGET);
|
||||
}
|
||||
__ Call(EntryTrampoline(), RelocInfo::CODE_TARGET);
|
||||
|
||||
// Unlink this frame from the handler chain.
|
||||
__ PopStackHandler();
|
||||
|
@ -495,6 +495,7 @@ void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
// kCEntryFPAddress
|
||||
// Frame type
|
||||
__ lay(sp, MemOperand(sp, -5 * kPointerSize));
|
||||
|
||||
// Push a bad frame pointer to fail if it is used.
|
||||
__ LoadImmP(r10, Operand(-1));
|
||||
|
||||
@ -512,6 +513,8 @@ void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
__ lay(fp,
|
||||
MemOperand(sp, -EntryFrameConstants::kCallerFPOffset + kPointerSize));
|
||||
|
||||
__ InitializeRootRegister();
|
||||
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
Label non_outermost_js;
|
||||
ExternalReference js_entry_sp(IsolateAddressId::kJSEntrySPAddress, isolate());
|
||||
@ -564,12 +567,7 @@ void JSEntryStub::Generate(MacroAssembler* masm) {
|
||||
// r4: receiver
|
||||
// r5: argc
|
||||
// r6: argv
|
||||
if (type() == StackFrame::CONSTRUCT_ENTRY) {
|
||||
__ Call(BUILTIN_CODE(isolate(), JSConstructEntryTrampoline),
|
||||
RelocInfo::CODE_TARGET);
|
||||
} else {
|
||||
__ Call(BUILTIN_CODE(isolate(), JSEntryTrampoline), RelocInfo::CODE_TARGET);
|
||||
}
|
||||
__ Call(EntryTrampoline(), RelocInfo::CODE_TARGET);
|
||||
|
||||
// Unlink this frame from the handler chain.
|
||||
__ PopStackHandler();
|
||||
|
Loading…
Reference in New Issue
Block a user