Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: src/mips64/full-codegen-mips64.cc

Issue 1157213004: Drop computed handler count and index from AST. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips/full-codegen-mips.cc ('k') | src/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_MIPS64 7 #if V8_TARGET_ARCH_MIPS64
8 8
9 // Note on Mips implementation: 9 // Note on Mips implementation:
10 // 10 //
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // o a1: the JS function object being called (i.e. ourselves) 106 // o a1: the JS function object being called (i.e. ourselves)
107 // o cp: our context 107 // o cp: our context
108 // o fp: our caller's frame pointer 108 // o fp: our caller's frame pointer
109 // o sp: stack pointer 109 // o sp: stack pointer
110 // o ra: return address 110 // o ra: return address
111 // 111 //
112 // The function builds a JS frame. Please see JavaScriptFrameConstants in 112 // The function builds a JS frame. Please see JavaScriptFrameConstants in
113 // frames-mips.h for its layout. 113 // frames-mips.h for its layout.
114 void FullCodeGenerator::Generate() { 114 void FullCodeGenerator::Generate() {
115 CompilationInfo* info = info_; 115 CompilationInfo* info = info_;
116 handler_table_ =
117 Handle<HandlerTable>::cast(isolate()->factory()->NewFixedArray(
118 HandlerTable::LengthForRange(function()->handler_count()), TENURED));
119
120 profiling_counter_ = isolate()->factory()->NewCell( 116 profiling_counter_ = isolate()->factory()->NewCell(
121 Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate())); 117 Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate()));
122 SetFunctionPosition(function()); 118 SetFunctionPosition(function());
123 Comment cmnt(masm_, "[ function compiled by full code generator"); 119 Comment cmnt(masm_, "[ function compiled by full code generator");
124 120
125 ProfileEntryHookStub::MaybeCallEntryHook(masm_); 121 ProfileEntryHookStub::MaybeCallEntryHook(masm_);
126 122
127 #ifdef DEBUG 123 #ifdef DEBUG
128 if (strlen(FLAG_stop_at) > 0 && 124 if (strlen(FLAG_stop_at) > 0 &&
129 info->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) { 125 info->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) {
(...skipping 2053 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 __ LoadRoot(a2, Heap::kthrow_stringRootIndex); // "throw" 2179 __ LoadRoot(a2, Heap::kthrow_stringRootIndex); // "throw"
2184 __ ld(a3, MemOperand(sp, 1 * kPointerSize)); // iter 2180 __ ld(a3, MemOperand(sp, 1 * kPointerSize)); // iter
2185 __ Push(a2, a3, a0); // "throw", iter, except 2181 __ Push(a2, a3, a0); // "throw", iter, except
2186 __ jmp(&l_call); 2182 __ jmp(&l_call);
2187 2183
2188 // try { received = %yield result } 2184 // try { received = %yield result }
2189 // Shuffle the received result above a try handler and yield it without 2185 // Shuffle the received result above a try handler and yield it without
2190 // re-boxing. 2186 // re-boxing.
2191 __ bind(&l_try); 2187 __ bind(&l_try);
2192 __ pop(a0); // result 2188 __ pop(a0); // result
2193 EnterTryBlock(expr->index(), &l_catch); 2189 int handler_index = NewHandlerTableEntry();
2190 EnterTryBlock(handler_index, &l_catch);
2194 const int try_block_size = TryCatch::kElementCount * kPointerSize; 2191 const int try_block_size = TryCatch::kElementCount * kPointerSize;
2195 __ push(a0); // result 2192 __ push(a0); // result
2196 __ jmp(&l_suspend); 2193 __ jmp(&l_suspend);
2197 __ bind(&l_continuation); 2194 __ bind(&l_continuation);
2198 __ mov(a0, v0); 2195 __ mov(a0, v0);
2199 __ jmp(&l_resume); 2196 __ jmp(&l_resume);
2200 __ bind(&l_suspend); 2197 __ bind(&l_suspend);
2201 const int generator_object_depth = kPointerSize + try_block_size; 2198 const int generator_object_depth = kPointerSize + try_block_size;
2202 __ ld(a0, MemOperand(sp, generator_object_depth)); 2199 __ ld(a0, MemOperand(sp, generator_object_depth));
2203 __ push(a0); // g 2200 __ push(a0); // g
2204 __ Push(Smi::FromInt(expr->index())); // handler-index 2201 __ Push(Smi::FromInt(handler_index)); // handler-index
2205 DCHECK(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos())); 2202 DCHECK(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos()));
2206 __ li(a1, Operand(Smi::FromInt(l_continuation.pos()))); 2203 __ li(a1, Operand(Smi::FromInt(l_continuation.pos())));
2207 __ sd(a1, FieldMemOperand(a0, JSGeneratorObject::kContinuationOffset)); 2204 __ sd(a1, FieldMemOperand(a0, JSGeneratorObject::kContinuationOffset));
2208 __ sd(cp, FieldMemOperand(a0, JSGeneratorObject::kContextOffset)); 2205 __ sd(cp, FieldMemOperand(a0, JSGeneratorObject::kContextOffset));
2209 __ mov(a1, cp); 2206 __ mov(a1, cp);
2210 __ RecordWriteField(a0, JSGeneratorObject::kContextOffset, a1, a2, 2207 __ RecordWriteField(a0, JSGeneratorObject::kContextOffset, a1, a2,
2211 kRAHasBeenSaved, kDontSaveFPRegs); 2208 kRAHasBeenSaved, kDontSaveFPRegs);
2212 __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 2); 2209 __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 2);
2213 __ ld(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2210 __ ld(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2214 __ pop(v0); // result 2211 __ pop(v0); // result
2215 EmitReturnSequence(); 2212 EmitReturnSequence();
2216 __ mov(a0, v0); 2213 __ mov(a0, v0);
2217 __ bind(&l_resume); // received in a0 2214 __ bind(&l_resume); // received in a0
2218 ExitTryBlock(expr->index()); 2215 ExitTryBlock(handler_index);
2219 2216
2220 // receiver = iter; f = 'next'; arg = received; 2217 // receiver = iter; f = 'next'; arg = received;
2221 __ bind(&l_next); 2218 __ bind(&l_next);
2222 __ LoadRoot(load_name, Heap::knext_stringRootIndex); // "next" 2219 __ LoadRoot(load_name, Heap::knext_stringRootIndex); // "next"
2223 __ ld(a3, MemOperand(sp, 1 * kPointerSize)); // iter 2220 __ ld(a3, MemOperand(sp, 1 * kPointerSize)); // iter
2224 __ Push(load_name, a3, a0); // "next", iter, received 2221 __ Push(load_name, a3, a0); // "next", iter, received
2225 2222
2226 // result = receiver[f](arg); 2223 // result = receiver[f](arg);
2227 __ bind(&l_call); 2224 __ bind(&l_call);
2228 __ ld(load_receiver, MemOperand(sp, kPointerSize)); 2225 __ ld(load_receiver, MemOperand(sp, kPointerSize));
(...skipping 3327 matching lines...) Expand 10 before | Expand all | Expand 10 after
5556 reinterpret_cast<uint64_t>( 5553 reinterpret_cast<uint64_t>(
5557 isolate->builtins()->OsrAfterStackCheck()->entry())); 5554 isolate->builtins()->OsrAfterStackCheck()->entry()));
5558 return OSR_AFTER_STACK_CHECK; 5555 return OSR_AFTER_STACK_CHECK;
5559 } 5556 }
5560 5557
5561 5558
5562 } // namespace internal 5559 } // namespace internal
5563 } // namespace v8 5560 } // namespace v8
5564 5561
5565 #endif // V8_TARGET_ARCH_MIPS64 5562 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips/full-codegen-mips.cc ('k') | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698