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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 2426923002: [stubs] Removes the BranchIf.*() methods from CodeAssembler, changes their uses to Branch(). (Closed)
Patch Set: Created 4 years, 2 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/compiler/code-assembler.cc ('k') | src/interpreter/interpreter-assembler.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include <fstream> 7 #include <fstream>
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/ast/prettyprinter.h" 10 #include "src/ast/prettyprinter.h"
(...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 1215
1216 Node* reg_index = __ BytecodeOperandReg(1); 1216 Node* reg_index = __ BytecodeOperandReg(1);
1217 Node* left = __ LoadRegister(reg_index); 1217 Node* left = __ LoadRegister(reg_index);
1218 Node* raw_int = __ BytecodeOperandImm(0); 1218 Node* raw_int = __ BytecodeOperandImm(0);
1219 Node* right = __ SmiTag(raw_int); 1219 Node* right = __ SmiTag(raw_int);
1220 Node* slot_index = __ BytecodeOperandIdx(2); 1220 Node* slot_index = __ BytecodeOperandIdx(2);
1221 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 1221 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
1222 1222
1223 // {right} is known to be a Smi. 1223 // {right} is known to be a Smi.
1224 // Check if the {left} is a Smi take the fast path. 1224 // Check if the {left} is a Smi take the fast path.
1225 __ BranchIf(__ TaggedIsSmi(left), &fastpath, &slowpath); 1225 __ Branch(__ TaggedIsSmi(left), &fastpath, &slowpath);
1226 __ Bind(&fastpath); 1226 __ Bind(&fastpath);
1227 { 1227 {
1228 // Try fast Smi addition first. 1228 // Try fast Smi addition first.
1229 Node* pair = __ IntPtrAddWithOverflow(__ BitcastTaggedToWord(left), 1229 Node* pair = __ IntPtrAddWithOverflow(__ BitcastTaggedToWord(left),
1230 __ BitcastTaggedToWord(right)); 1230 __ BitcastTaggedToWord(right));
1231 Node* overflow = __ Projection(1, pair); 1231 Node* overflow = __ Projection(1, pair);
1232 1232
1233 // Check if the Smi additon overflowed. 1233 // Check if the Smi additon overflowed.
1234 Label if_notoverflow(assembler); 1234 Label if_notoverflow(assembler);
1235 __ BranchIf(overflow, &slowpath, &if_notoverflow); 1235 __ Branch(overflow, &slowpath, &if_notoverflow);
1236 __ Bind(&if_notoverflow); 1236 __ Bind(&if_notoverflow);
1237 { 1237 {
1238 __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall), 1238 __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall),
1239 type_feedback_vector, slot_index); 1239 type_feedback_vector, slot_index);
1240 var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair))); 1240 var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair)));
1241 __ Goto(&end); 1241 __ Goto(&end);
1242 } 1242 }
1243 } 1243 }
1244 __ Bind(&slowpath); 1244 __ Bind(&slowpath);
1245 { 1245 {
(...skipping 23 matching lines...) Expand all
1269 1269
1270 Node* reg_index = __ BytecodeOperandReg(1); 1270 Node* reg_index = __ BytecodeOperandReg(1);
1271 Node* left = __ LoadRegister(reg_index); 1271 Node* left = __ LoadRegister(reg_index);
1272 Node* raw_int = __ BytecodeOperandImm(0); 1272 Node* raw_int = __ BytecodeOperandImm(0);
1273 Node* right = __ SmiTag(raw_int); 1273 Node* right = __ SmiTag(raw_int);
1274 Node* slot_index = __ BytecodeOperandIdx(2); 1274 Node* slot_index = __ BytecodeOperandIdx(2);
1275 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 1275 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
1276 1276
1277 // {right} is known to be a Smi. 1277 // {right} is known to be a Smi.
1278 // Check if the {left} is a Smi take the fast path. 1278 // Check if the {left} is a Smi take the fast path.
1279 __ BranchIf(__ TaggedIsSmi(left), &fastpath, &slowpath); 1279 __ Branch(__ TaggedIsSmi(left), &fastpath, &slowpath);
1280 __ Bind(&fastpath); 1280 __ Bind(&fastpath);
1281 { 1281 {
1282 // Try fast Smi subtraction first. 1282 // Try fast Smi subtraction first.
1283 Node* pair = __ IntPtrSubWithOverflow(__ BitcastTaggedToWord(left), 1283 Node* pair = __ IntPtrSubWithOverflow(__ BitcastTaggedToWord(left),
1284 __ BitcastTaggedToWord(right)); 1284 __ BitcastTaggedToWord(right));
1285 Node* overflow = __ Projection(1, pair); 1285 Node* overflow = __ Projection(1, pair);
1286 1286
1287 // Check if the Smi subtraction overflowed. 1287 // Check if the Smi subtraction overflowed.
1288 Label if_notoverflow(assembler); 1288 Label if_notoverflow(assembler);
1289 __ BranchIf(overflow, &slowpath, &if_notoverflow); 1289 __ Branch(overflow, &slowpath, &if_notoverflow);
1290 __ Bind(&if_notoverflow); 1290 __ Bind(&if_notoverflow);
1291 { 1291 {
1292 __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall), 1292 __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall),
1293 type_feedback_vector, slot_index); 1293 type_feedback_vector, slot_index);
1294 var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair))); 1294 var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair)));
1295 __ Goto(&end); 1295 __ Goto(&end);
1296 } 1296 }
1297 } 1297 }
1298 __ Bind(&slowpath); 1298 __ Bind(&slowpath);
1299 { 1299 {
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 // LogicalNot 1523 // LogicalNot
1524 // 1524 //
1525 // Perform logical-not on the accumulator, which must already be a boolean 1525 // Perform logical-not on the accumulator, which must already be a boolean
1526 // value. 1526 // value.
1527 void Interpreter::DoLogicalNot(InterpreterAssembler* assembler) { 1527 void Interpreter::DoLogicalNot(InterpreterAssembler* assembler) {
1528 Node* value = __ GetAccumulator(); 1528 Node* value = __ GetAccumulator();
1529 Variable result(assembler, MachineRepresentation::kTagged); 1529 Variable result(assembler, MachineRepresentation::kTagged);
1530 Label if_true(assembler), if_false(assembler), end(assembler); 1530 Label if_true(assembler), if_false(assembler), end(assembler);
1531 Node* true_value = __ BooleanConstant(true); 1531 Node* true_value = __ BooleanConstant(true);
1532 Node* false_value = __ BooleanConstant(false); 1532 Node* false_value = __ BooleanConstant(false);
1533 __ BranchIfWordEqual(value, true_value, &if_true, &if_false); 1533 __ Branch(__ WordEqual(value, true_value), &if_true, &if_false);
1534 __ Bind(&if_true); 1534 __ Bind(&if_true);
1535 { 1535 {
1536 result.Bind(false_value); 1536 result.Bind(false_value);
1537 __ Goto(&end); 1537 __ Goto(&end);
1538 } 1538 }
1539 __ Bind(&if_false); 1539 __ Bind(&if_false);
1540 { 1540 {
1541 if (FLAG_debug_code) { 1541 if (FLAG_debug_code) {
1542 __ AbortIfWordNotEqual(value, false_value, 1542 __ AbortIfWordNotEqual(value, false_value,
1543 BailoutReason::kExpectedBooleanValue); 1543 BailoutReason::kExpectedBooleanValue);
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
2057 Node* literal_index = __ SmiTag(literal_index_raw); 2057 Node* literal_index = __ SmiTag(literal_index_raw);
2058 Node* closure = __ LoadRegister(Register::function_closure()); 2058 Node* closure = __ LoadRegister(Register::function_closure());
2059 Node* context = __ GetContext(); 2059 Node* context = __ GetContext();
2060 Node* bytecode_flags = __ BytecodeOperandFlag(2); 2060 Node* bytecode_flags = __ BytecodeOperandFlag(2);
2061 2061
2062 Label fast_shallow_clone(assembler), 2062 Label fast_shallow_clone(assembler),
2063 call_runtime(assembler, Label::kDeferred); 2063 call_runtime(assembler, Label::kDeferred);
2064 Node* use_fast_shallow_clone = __ Word32And( 2064 Node* use_fast_shallow_clone = __ Word32And(
2065 bytecode_flags, 2065 bytecode_flags,
2066 __ Int32Constant(CreateArrayLiteralFlags::FastShallowCloneBit::kMask)); 2066 __ Int32Constant(CreateArrayLiteralFlags::FastShallowCloneBit::kMask));
2067 __ BranchIf(use_fast_shallow_clone, &fast_shallow_clone, &call_runtime); 2067 __ Branch(use_fast_shallow_clone, &fast_shallow_clone, &call_runtime);
2068 2068
2069 __ Bind(&fast_shallow_clone); 2069 __ Bind(&fast_shallow_clone);
2070 { 2070 {
2071 DCHECK(FLAG_allocation_site_pretenuring); 2071 DCHECK(FLAG_allocation_site_pretenuring);
2072 Node* result = FastCloneShallowArrayStub::Generate( 2072 Node* result = FastCloneShallowArrayStub::Generate(
2073 assembler, closure, literal_index, context, &call_runtime, 2073 assembler, closure, literal_index, context, &call_runtime,
2074 TRACK_ALLOCATION_SITE); 2074 TRACK_ALLOCATION_SITE);
2075 __ SetAccumulator(result); 2075 __ SetAccumulator(result);
2076 __ Dispatch(); 2076 __ Dispatch();
2077 } 2077 }
(...skipping 24 matching lines...) Expand all
2102 Node* literal_index = __ SmiTag(literal_index_raw); 2102 Node* literal_index = __ SmiTag(literal_index_raw);
2103 Node* bytecode_flags = __ BytecodeOperandFlag(2); 2103 Node* bytecode_flags = __ BytecodeOperandFlag(2);
2104 Node* closure = __ LoadRegister(Register::function_closure()); 2104 Node* closure = __ LoadRegister(Register::function_closure());
2105 2105
2106 // Check if we can do a fast clone or have to call the runtime. 2106 // Check if we can do a fast clone or have to call the runtime.
2107 Label if_fast_clone(assembler), 2107 Label if_fast_clone(assembler),
2108 if_not_fast_clone(assembler, Label::kDeferred); 2108 if_not_fast_clone(assembler, Label::kDeferred);
2109 Node* fast_clone_properties_count = 2109 Node* fast_clone_properties_count =
2110 __ BitFieldDecode<CreateObjectLiteralFlags::FastClonePropertiesCountBits>( 2110 __ BitFieldDecode<CreateObjectLiteralFlags::FastClonePropertiesCountBits>(
2111 bytecode_flags); 2111 bytecode_flags);
2112 __ BranchIf(fast_clone_properties_count, &if_fast_clone, &if_not_fast_clone); 2112 __ Branch(fast_clone_properties_count, &if_fast_clone, &if_not_fast_clone);
2113 2113
2114 __ Bind(&if_fast_clone); 2114 __ Bind(&if_fast_clone);
2115 { 2115 {
2116 // If we can do a fast clone do the fast-path in FastCloneShallowObjectStub. 2116 // If we can do a fast clone do the fast-path in FastCloneShallowObjectStub.
2117 Node* result = FastCloneShallowObjectStub::GenerateFastPath( 2117 Node* result = FastCloneShallowObjectStub::GenerateFastPath(
2118 assembler, &if_not_fast_clone, closure, literal_index, 2118 assembler, &if_not_fast_clone, closure, literal_index,
2119 fast_clone_properties_count); 2119 fast_clone_properties_count);
2120 __ StoreRegister(result, __ BytecodeOperandReg(3)); 2120 __ StoreRegister(result, __ BytecodeOperandReg(3));
2121 __ Dispatch(); 2121 __ Dispatch();
2122 } 2122 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2249 // TODO(rmcilroy): Remove this check when FastNewSloppyArgumentsStub supports 2249 // TODO(rmcilroy): Remove this check when FastNewSloppyArgumentsStub supports
2250 // duplicate parameters. 2250 // duplicate parameters.
2251 Node* shared_info = 2251 Node* shared_info =
2252 __ LoadObjectField(closure, JSFunction::kSharedFunctionInfoOffset); 2252 __ LoadObjectField(closure, JSFunction::kSharedFunctionInfoOffset);
2253 Node* compiler_hints = __ LoadObjectField( 2253 Node* compiler_hints = __ LoadObjectField(
2254 shared_info, SharedFunctionInfo::kHasDuplicateParametersByteOffset, 2254 shared_info, SharedFunctionInfo::kHasDuplicateParametersByteOffset,
2255 MachineType::Uint8()); 2255 MachineType::Uint8());
2256 Node* duplicate_parameters_bit = __ Int32Constant( 2256 Node* duplicate_parameters_bit = __ Int32Constant(
2257 1 << SharedFunctionInfo::kHasDuplicateParametersBitWithinByte); 2257 1 << SharedFunctionInfo::kHasDuplicateParametersBitWithinByte);
2258 Node* compare = __ Word32And(compiler_hints, duplicate_parameters_bit); 2258 Node* compare = __ Word32And(compiler_hints, duplicate_parameters_bit);
2259 __ BranchIf(compare, &if_duplicate_parameters, &if_not_duplicate_parameters); 2259 __ Branch(compare, &if_duplicate_parameters, &if_not_duplicate_parameters);
2260 2260
2261 __ Bind(&if_not_duplicate_parameters); 2261 __ Bind(&if_not_duplicate_parameters);
2262 { 2262 {
2263 // TODO(rmcilroy): Inline FastNewSloppyArguments when it is a TurboFan stub. 2263 // TODO(rmcilroy): Inline FastNewSloppyArguments when it is a TurboFan stub.
2264 Callable callable = CodeFactory::FastNewSloppyArguments(isolate_, true); 2264 Callable callable = CodeFactory::FastNewSloppyArguments(isolate_, true);
2265 Node* target = __ HeapConstant(callable.code()); 2265 Node* target = __ HeapConstant(callable.code());
2266 Node* result = __ CallStub(callable.descriptor(), target, context, closure); 2266 Node* result = __ CallStub(callable.descriptor(), target, context, closure);
2267 __ SetAccumulator(result); 2267 __ SetAccumulator(result);
2268 __ Dispatch(); 2268 __ Dispatch();
2269 } 2269 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2305 __ Dispatch(); 2305 __ Dispatch();
2306 } 2306 }
2307 2307
2308 // StackCheck 2308 // StackCheck
2309 // 2309 //
2310 // Performs a stack guard check. 2310 // Performs a stack guard check.
2311 void Interpreter::DoStackCheck(InterpreterAssembler* assembler) { 2311 void Interpreter::DoStackCheck(InterpreterAssembler* assembler) {
2312 Label ok(assembler), stack_check_interrupt(assembler, Label::kDeferred); 2312 Label ok(assembler), stack_check_interrupt(assembler, Label::kDeferred);
2313 2313
2314 Node* interrupt = __ StackCheckTriggeredInterrupt(); 2314 Node* interrupt = __ StackCheckTriggeredInterrupt();
2315 __ BranchIf(interrupt, &stack_check_interrupt, &ok); 2315 __ Branch(interrupt, &stack_check_interrupt, &ok);
2316 2316
2317 __ Bind(&ok); 2317 __ Bind(&ok);
2318 __ Dispatch(); 2318 __ Dispatch();
2319 2319
2320 __ Bind(&stack_check_interrupt); 2320 __ Bind(&stack_check_interrupt);
2321 { 2321 {
2322 Node* context = __ GetContext(); 2322 Node* context = __ GetContext();
2323 __ CallRuntime(Runtime::kStackGuard, context); 2323 __ CallRuntime(Runtime::kStackGuard, context);
2324 __ Dispatch(); 2324 __ Dispatch();
2325 } 2325 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2478 Node* cache_array_reg = __ NextRegister(cache_type_reg); 2478 Node* cache_array_reg = __ NextRegister(cache_type_reg);
2479 Node* cache_array = __ LoadRegister(cache_array_reg); 2479 Node* cache_array = __ LoadRegister(cache_array_reg);
2480 2480
2481 // Load the next key from the enumeration array. 2481 // Load the next key from the enumeration array.
2482 Node* key = __ LoadFixedArrayElement(cache_array, index, 0, 2482 Node* key = __ LoadFixedArrayElement(cache_array, index, 0,
2483 CodeStubAssembler::SMI_PARAMETERS); 2483 CodeStubAssembler::SMI_PARAMETERS);
2484 2484
2485 // Check if we can use the for-in fast path potentially using the enum cache. 2485 // Check if we can use the for-in fast path potentially using the enum cache.
2486 Label if_fast(assembler), if_slow(assembler, Label::kDeferred); 2486 Label if_fast(assembler), if_slow(assembler, Label::kDeferred);
2487 Node* receiver_map = __ LoadObjectField(receiver, HeapObject::kMapOffset); 2487 Node* receiver_map = __ LoadObjectField(receiver, HeapObject::kMapOffset);
2488 __ BranchIfWordEqual(receiver_map, cache_type, &if_fast, &if_slow); 2488 __ Branch(__ WordEqual(receiver_map, cache_type), &if_fast, &if_slow);
2489 __ Bind(&if_fast); 2489 __ Bind(&if_fast);
2490 { 2490 {
2491 // Enum cache in use for {receiver}, the {key} is definitely valid. 2491 // Enum cache in use for {receiver}, the {key} is definitely valid.
2492 __ SetAccumulator(key); 2492 __ SetAccumulator(key);
2493 __ Dispatch(); 2493 __ Dispatch();
2494 } 2494 }
2495 __ Bind(&if_slow); 2495 __ Bind(&if_slow);
2496 { 2496 {
2497 // Record the fact that we hit the for-in slow path. 2497 // Record the fact that we hit the for-in slow path.
2498 Node* vector_index = __ BytecodeOperandIdx(3); 2498 Node* vector_index = __ BytecodeOperandIdx(3);
(...skipping 16 matching lines...) Expand all
2515 // 2515 //
2516 // Returns false if the end of the enumerable properties has been reached. 2516 // Returns false if the end of the enumerable properties has been reached.
2517 void Interpreter::DoForInContinue(InterpreterAssembler* assembler) { 2517 void Interpreter::DoForInContinue(InterpreterAssembler* assembler) {
2518 Node* index_reg = __ BytecodeOperandReg(0); 2518 Node* index_reg = __ BytecodeOperandReg(0);
2519 Node* index = __ LoadRegister(index_reg); 2519 Node* index = __ LoadRegister(index_reg);
2520 Node* cache_length_reg = __ BytecodeOperandReg(1); 2520 Node* cache_length_reg = __ BytecodeOperandReg(1);
2521 Node* cache_length = __ LoadRegister(cache_length_reg); 2521 Node* cache_length = __ LoadRegister(cache_length_reg);
2522 2522
2523 // Check if {index} is at {cache_length} already. 2523 // Check if {index} is at {cache_length} already.
2524 Label if_true(assembler), if_false(assembler), end(assembler); 2524 Label if_true(assembler), if_false(assembler), end(assembler);
2525 __ BranchIfWordEqual(index, cache_length, &if_true, &if_false); 2525 __ Branch(__ WordEqual(index, cache_length), &if_true, &if_false);
2526 __ Bind(&if_true); 2526 __ Bind(&if_true);
2527 { 2527 {
2528 __ SetAccumulator(__ BooleanConstant(false)); 2528 __ SetAccumulator(__ BooleanConstant(false));
2529 __ Goto(&end); 2529 __ Goto(&end);
2530 } 2530 }
2531 __ Bind(&if_false); 2531 __ Bind(&if_false);
2532 { 2532 {
2533 __ SetAccumulator(__ BooleanConstant(true)); 2533 __ SetAccumulator(__ BooleanConstant(true));
2534 __ Goto(&end); 2534 __ Goto(&end);
2535 } 2535 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2586 Node* generator = __ LoadRegister(generator_reg); 2586 Node* generator = __ LoadRegister(generator_reg);
2587 2587
2588 Label if_stepping(assembler, Label::kDeferred), ok(assembler); 2588 Label if_stepping(assembler, Label::kDeferred), ok(assembler);
2589 Node* step_action_address = __ ExternalConstant( 2589 Node* step_action_address = __ ExternalConstant(
2590 ExternalReference::debug_last_step_action_address(isolate_)); 2590 ExternalReference::debug_last_step_action_address(isolate_));
2591 Node* step_action = __ Load(MachineType::Int8(), step_action_address); 2591 Node* step_action = __ Load(MachineType::Int8(), step_action_address);
2592 STATIC_ASSERT(StepIn > StepNext); 2592 STATIC_ASSERT(StepIn > StepNext);
2593 STATIC_ASSERT(StepFrame > StepNext); 2593 STATIC_ASSERT(StepFrame > StepNext);
2594 STATIC_ASSERT(LastStepAction == StepFrame); 2594 STATIC_ASSERT(LastStepAction == StepFrame);
2595 Node* step_next = __ Int32Constant(StepNext); 2595 Node* step_next = __ Int32Constant(StepNext);
2596 __ BranchIfInt32LessThanOrEqual(step_next, step_action, &if_stepping, &ok); 2596 __ Branch(__ Int32LessThanOrEqual(step_next, step_action), &if_stepping, &ok);
2597 __ Bind(&ok); 2597 __ Bind(&ok);
2598 2598
2599 Node* array = 2599 Node* array =
2600 __ LoadObjectField(generator, JSGeneratorObject::kOperandStackOffset); 2600 __ LoadObjectField(generator, JSGeneratorObject::kOperandStackOffset);
2601 Node* context = __ GetContext(); 2601 Node* context = __ GetContext();
2602 Node* state = __ GetAccumulator(); 2602 Node* state = __ GetAccumulator();
2603 2603
2604 __ ExportRegisterFile(array); 2604 __ ExportRegisterFile(array);
2605 __ StoreObjectField(generator, JSGeneratorObject::kContextOffset, context); 2605 __ StoreObjectField(generator, JSGeneratorObject::kContextOffset, context);
2606 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, state); 2606 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, state);
(...skipping 30 matching lines...) Expand all
2637 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 2637 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
2638 __ SmiTag(new_state)); 2638 __ SmiTag(new_state));
2639 __ SetAccumulator(old_state); 2639 __ SetAccumulator(old_state);
2640 2640
2641 __ Dispatch(); 2641 __ Dispatch();
2642 } 2642 }
2643 2643
2644 } // namespace interpreter 2644 } // namespace interpreter
2645 } // namespace internal 2645 } // namespace internal
2646 } // namespace v8 2646 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.cc ('k') | src/interpreter/interpreter-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698