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

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

Issue 1413923005: Fix deoptimization at ForInStatement::BodyId() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: moar test cases Created 5 years, 1 month 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/debug/debug.h" 10 #include "src/debug/debug.h"
(...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 __ CompareObjectType(r5, r6, r6, LAST_JS_PROXY_TYPE); 1098 __ CompareObjectType(r5, r6, r6, LAST_JS_PROXY_TYPE);
1099 __ bgt(&non_proxy); 1099 __ bgt(&non_proxy);
1100 __ LoadSmiLiteral(r4, Smi::FromInt(0)); // Zero indicates proxy 1100 __ LoadSmiLiteral(r4, Smi::FromInt(0)); // Zero indicates proxy
1101 __ bind(&non_proxy); 1101 __ bind(&non_proxy);
1102 __ Push(r4, r3); // Smi and array 1102 __ Push(r4, r3); // Smi and array
1103 __ LoadP(r4, FieldMemOperand(r3, FixedArray::kLengthOffset)); 1103 __ LoadP(r4, FieldMemOperand(r3, FixedArray::kLengthOffset));
1104 __ LoadSmiLiteral(r3, Smi::FromInt(0)); 1104 __ LoadSmiLiteral(r3, Smi::FromInt(0));
1105 __ Push(r4, r3); // Fixed array length (as smi) and initial index. 1105 __ Push(r4, r3); // Fixed array length (as smi) and initial index.
1106 1106
1107 // Generate code for doing the condition check. 1107 // Generate code for doing the condition check.
1108 PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS);
1109 __ bind(&loop); 1108 __ bind(&loop);
1110 SetExpressionAsStatementPosition(stmt->each()); 1109 SetExpressionAsStatementPosition(stmt->each());
1111 1110
1112 // Load the current count to r3, load the length to r4. 1111 // Load the current count to r3, load the length to r4.
1113 __ LoadP(r3, MemOperand(sp, 0 * kPointerSize)); 1112 __ LoadP(r3, MemOperand(sp, 0 * kPointerSize));
1114 __ LoadP(r4, MemOperand(sp, 1 * kPointerSize)); 1113 __ LoadP(r4, MemOperand(sp, 1 * kPointerSize));
1115 __ cmpl(r3, r4); // Compare to the array length. 1114 __ cmpl(r3, r4); // Compare to the array length.
1116 __ bge(loop_statement.break_label()); 1115 __ bge(loop_statement.break_label());
1117 1116
1118 // Get the current entry of the array into register r6. 1117 // Get the current entry of the array into register r6.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 // entry in register r6. 1152 // entry in register r6.
1154 __ bind(&update_each); 1153 __ bind(&update_each);
1155 __ mr(result_register(), r6); 1154 __ mr(result_register(), r6);
1156 // Perform the assignment as if via '='. 1155 // Perform the assignment as if via '='.
1157 { 1156 {
1158 EffectContext context(this); 1157 EffectContext context(this);
1159 EmitAssignment(stmt->each(), stmt->EachFeedbackSlot()); 1158 EmitAssignment(stmt->each(), stmt->EachFeedbackSlot());
1160 PrepareForBailoutForId(stmt->AssignmentId(), NO_REGISTERS); 1159 PrepareForBailoutForId(stmt->AssignmentId(), NO_REGISTERS);
1161 } 1160 }
1162 1161
1162 // Both Crankshaft and Turbofan expect BodyId to be right before stmt->body().
1163 PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS);
1163 // Generate code for the body of the loop. 1164 // Generate code for the body of the loop.
1164 Visit(stmt->body()); 1165 Visit(stmt->body());
1165 1166
1166 // Generate code for the going to the next element by incrementing 1167 // Generate code for the going to the next element by incrementing
1167 // the index (smi) stored on top of the stack. 1168 // the index (smi) stored on top of the stack.
1168 __ bind(loop_statement.continue_label()); 1169 __ bind(loop_statement.continue_label());
1169 __ pop(r3); 1170 __ pop(r3);
1170 __ AddSmiLiteral(r3, r3, Smi::FromInt(1), r0); 1171 __ AddSmiLiteral(r3, r3, Smi::FromInt(1), r0);
1171 __ push(r3); 1172 __ push(r3);
1172 1173
(...skipping 3969 matching lines...) Expand 10 before | Expand all | Expand 10 after
5142 return ON_STACK_REPLACEMENT; 5143 return ON_STACK_REPLACEMENT;
5143 } 5144 }
5144 5145
5145 DCHECK(interrupt_address == 5146 DCHECK(interrupt_address ==
5146 isolate->builtins()->OsrAfterStackCheck()->entry()); 5147 isolate->builtins()->OsrAfterStackCheck()->entry());
5147 return OSR_AFTER_STACK_CHECK; 5148 return OSR_AFTER_STACK_CHECK;
5148 } 5149 }
5149 } // namespace internal 5150 } // namespace internal
5150 } // namespace v8 5151 } // namespace v8
5151 #endif // V8_TARGET_ARCH_PPC 5152 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/full-codegen/mips64/full-codegen-mips64.cc ('k') | src/full-codegen/x64/full-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698