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

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

Issue 1424153003: VectorICs: Remove --vector-stores flag. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Response to Hannes comment. 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
« no previous file with comments | « src/full-codegen/arm/full-codegen-arm.cc ('k') | src/full-codegen/ia32/full-codegen-ia32.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_ARM64 5 #if V8_TARGET_ARCH_ARM64
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 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 } 1228 }
1229 1229
1230 1230
1231 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset, 1231 void FullCodeGenerator::EmitSetHomeObject(Expression* initializer, int offset,
1232 FeedbackVectorSlot slot) { 1232 FeedbackVectorSlot slot) {
1233 DCHECK(NeedsHomeObject(initializer)); 1233 DCHECK(NeedsHomeObject(initializer));
1234 __ Peek(StoreDescriptor::ReceiverRegister(), 0); 1234 __ Peek(StoreDescriptor::ReceiverRegister(), 0);
1235 __ Mov(StoreDescriptor::NameRegister(), 1235 __ Mov(StoreDescriptor::NameRegister(),
1236 Operand(isolate()->factory()->home_object_symbol())); 1236 Operand(isolate()->factory()->home_object_symbol()));
1237 __ Peek(StoreDescriptor::ValueRegister(), offset * kPointerSize); 1237 __ Peek(StoreDescriptor::ValueRegister(), offset * kPointerSize);
1238 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1238 EmitLoadStoreICSlot(slot);
1239 CallStoreIC(); 1239 CallStoreIC();
1240 } 1240 }
1241 1241
1242 1242
1243 void FullCodeGenerator::EmitSetHomeObjectAccumulator(Expression* initializer, 1243 void FullCodeGenerator::EmitSetHomeObjectAccumulator(Expression* initializer,
1244 int offset, 1244 int offset,
1245 FeedbackVectorSlot slot) { 1245 FeedbackVectorSlot slot) {
1246 DCHECK(NeedsHomeObject(initializer)); 1246 DCHECK(NeedsHomeObject(initializer));
1247 __ Move(StoreDescriptor::ReceiverRegister(), x0); 1247 __ Move(StoreDescriptor::ReceiverRegister(), x0);
1248 __ Mov(StoreDescriptor::NameRegister(), 1248 __ Mov(StoreDescriptor::NameRegister(),
1249 Operand(isolate()->factory()->home_object_symbol())); 1249 Operand(isolate()->factory()->home_object_symbol()));
1250 __ Peek(StoreDescriptor::ValueRegister(), offset * kPointerSize); 1250 __ Peek(StoreDescriptor::ValueRegister(), offset * kPointerSize);
1251 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 1251 EmitLoadStoreICSlot(slot);
1252 CallStoreIC(); 1252 CallStoreIC();
1253 } 1253 }
1254 1254
1255 1255
1256 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy, 1256 void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy,
1257 TypeofMode typeof_mode, 1257 TypeofMode typeof_mode,
1258 Label* slow) { 1258 Label* slow) {
1259 Register current = cp; 1259 Register current = cp;
1260 Register next = x10; 1260 Register next = x10;
1261 Register temp = x11; 1261 Register temp = x11;
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 // Fall through. 1556 // Fall through.
1557 case ObjectLiteral::Property::COMPUTED: 1557 case ObjectLiteral::Property::COMPUTED:
1558 // It is safe to use [[Put]] here because the boilerplate already 1558 // It is safe to use [[Put]] here because the boilerplate already
1559 // contains computed properties with an uninitialized value. 1559 // contains computed properties with an uninitialized value.
1560 if (key->value()->IsInternalizedString()) { 1560 if (key->value()->IsInternalizedString()) {
1561 if (property->emit_store()) { 1561 if (property->emit_store()) {
1562 VisitForAccumulatorValue(value); 1562 VisitForAccumulatorValue(value);
1563 DCHECK(StoreDescriptor::ValueRegister().is(x0)); 1563 DCHECK(StoreDescriptor::ValueRegister().is(x0));
1564 __ Mov(StoreDescriptor::NameRegister(), Operand(key->value())); 1564 __ Mov(StoreDescriptor::NameRegister(), Operand(key->value()));
1565 __ Peek(StoreDescriptor::ReceiverRegister(), 0); 1565 __ Peek(StoreDescriptor::ReceiverRegister(), 0);
1566 if (FLAG_vector_stores) { 1566 EmitLoadStoreICSlot(property->GetSlot(0));
1567 EmitLoadStoreICSlot(property->GetSlot(0)); 1567 CallStoreIC();
1568 CallStoreIC();
1569 } else {
1570 CallStoreIC(key->LiteralFeedbackId());
1571 }
1572 PrepareForBailoutForId(key->id(), NO_REGISTERS); 1568 PrepareForBailoutForId(key->id(), NO_REGISTERS);
1573 1569
1574 if (NeedsHomeObject(value)) { 1570 if (NeedsHomeObject(value)) {
1575 EmitSetHomeObjectAccumulator(value, 0, property->GetSlot(1)); 1571 EmitSetHomeObjectAccumulator(value, 0, property->GetSlot(1));
1576 } 1572 }
1577 } else { 1573 } else {
1578 VisitForEffect(value); 1574 VisitForEffect(value);
1579 } 1575 }
1580 break; 1576 break;
1581 } 1577 }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 // is already set in the cloned array. 1749 // is already set in the cloned array.
1754 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue; 1750 if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
1755 1751
1756 if (!result_saved) { 1752 if (!result_saved) {
1757 __ Mov(x1, Smi::FromInt(expr->literal_index())); 1753 __ Mov(x1, Smi::FromInt(expr->literal_index()));
1758 __ Push(x0, x1); 1754 __ Push(x0, x1);
1759 result_saved = true; 1755 result_saved = true;
1760 } 1756 }
1761 VisitForAccumulatorValue(subexpr); 1757 VisitForAccumulatorValue(subexpr);
1762 1758
1763 if (FLAG_vector_stores) { 1759 __ Mov(StoreDescriptor::NameRegister(), Smi::FromInt(array_index));
1764 __ Mov(StoreDescriptor::NameRegister(), Smi::FromInt(array_index)); 1760 __ Peek(StoreDescriptor::ReceiverRegister(), kPointerSize);
1765 __ Peek(StoreDescriptor::ReceiverRegister(), kPointerSize); 1761 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot());
1766 EmitLoadStoreICSlot(expr->LiteralFeedbackSlot()); 1762 Handle<Code> ic =
1767 Handle<Code> ic = 1763 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
1768 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 1764 CallIC(ic);
1769 CallIC(ic);
1770 } else if (has_fast_elements) {
1771 int offset = FixedArray::kHeaderSize + (array_index * kPointerSize);
1772 __ Peek(x6, kPointerSize); // Copy of array literal.
1773 __ Ldr(x1, FieldMemOperand(x6, JSObject::kElementsOffset));
1774 __ Str(result_register(), FieldMemOperand(x1, offset));
1775 // Update the write barrier for the array store.
1776 __ RecordWriteField(x1, offset, result_register(), x10,
1777 kLRHasBeenSaved, kDontSaveFPRegs,
1778 EMIT_REMEMBERED_SET, INLINE_SMI_CHECK);
1779 } else {
1780 __ Mov(x3, Smi::FromInt(array_index));
1781 StoreArrayLiteralElementStub stub(isolate());
1782 __ CallStub(&stub);
1783 }
1784 1765
1785 PrepareForBailoutForId(expr->GetIdForElement(array_index), NO_REGISTERS); 1766 PrepareForBailoutForId(expr->GetIdForElement(array_index), NO_REGISTERS);
1786 } 1767 }
1787 1768
1788 // In case the array literal contains spread expressions it has two parts. The 1769 // In case the array literal contains spread expressions it has two parts. The
1789 // first part is the "static" array which has a literal index is handled 1770 // first part is the "static" array which has a literal index is handled
1790 // above. The second part is the part after the first spread expression 1771 // above. The second part is the part after the first spread expression
1791 // (inclusive) and these elements gets appended to the array. Note that the 1772 // (inclusive) and these elements gets appended to the array. Note that the
1792 // number elements an iterable produces is unknown ahead of time. 1773 // number elements an iterable produces is unknown ahead of time.
1793 if (array_index < length && result_saved) { 1774 if (array_index < length && result_saved) {
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
2202 } 2183 }
2203 case NAMED_PROPERTY: { 2184 case NAMED_PROPERTY: {
2204 __ Push(x0); // Preserve value. 2185 __ Push(x0); // Preserve value.
2205 VisitForAccumulatorValue(prop->obj()); 2186 VisitForAccumulatorValue(prop->obj());
2206 // TODO(all): We could introduce a VisitForRegValue(reg, expr) to avoid 2187 // TODO(all): We could introduce a VisitForRegValue(reg, expr) to avoid
2207 // this copy. 2188 // this copy.
2208 __ Mov(StoreDescriptor::ReceiverRegister(), x0); 2189 __ Mov(StoreDescriptor::ReceiverRegister(), x0);
2209 __ Pop(StoreDescriptor::ValueRegister()); // Restore value. 2190 __ Pop(StoreDescriptor::ValueRegister()); // Restore value.
2210 __ Mov(StoreDescriptor::NameRegister(), 2191 __ Mov(StoreDescriptor::NameRegister(),
2211 Operand(prop->key()->AsLiteral()->value())); 2192 Operand(prop->key()->AsLiteral()->value()));
2212 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2193 EmitLoadStoreICSlot(slot);
2213 CallStoreIC(); 2194 CallStoreIC();
2214 break; 2195 break;
2215 } 2196 }
2216 case NAMED_SUPER_PROPERTY: { 2197 case NAMED_SUPER_PROPERTY: {
2217 __ Push(x0); 2198 __ Push(x0);
2218 VisitForStackValue(prop->obj()->AsSuperPropertyReference()->this_var()); 2199 VisitForStackValue(prop->obj()->AsSuperPropertyReference()->this_var());
2219 VisitForAccumulatorValue( 2200 VisitForAccumulatorValue(
2220 prop->obj()->AsSuperPropertyReference()->home_object()); 2201 prop->obj()->AsSuperPropertyReference()->home_object());
2221 // stack: value, this; x0: home_object 2202 // stack: value, this; x0: home_object
2222 Register scratch = x10; 2203 Register scratch = x10;
(...skipping 27 matching lines...) Expand all
2250 EmitKeyedSuperPropertyStore(prop); 2231 EmitKeyedSuperPropertyStore(prop);
2251 break; 2232 break;
2252 } 2233 }
2253 case KEYED_PROPERTY: { 2234 case KEYED_PROPERTY: {
2254 __ Push(x0); // Preserve value. 2235 __ Push(x0); // Preserve value.
2255 VisitForStackValue(prop->obj()); 2236 VisitForStackValue(prop->obj());
2256 VisitForAccumulatorValue(prop->key()); 2237 VisitForAccumulatorValue(prop->key());
2257 __ Mov(StoreDescriptor::NameRegister(), x0); 2238 __ Mov(StoreDescriptor::NameRegister(), x0);
2258 __ Pop(StoreDescriptor::ReceiverRegister(), 2239 __ Pop(StoreDescriptor::ReceiverRegister(),
2259 StoreDescriptor::ValueRegister()); 2240 StoreDescriptor::ValueRegister());
2260 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2241 EmitLoadStoreICSlot(slot);
2261 Handle<Code> ic = 2242 Handle<Code> ic =
2262 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 2243 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2263 CallIC(ic); 2244 CallIC(ic);
2264 break; 2245 break;
2265 } 2246 }
2266 } 2247 }
2267 context()->Plug(x0); 2248 context()->Plug(x0);
2268 } 2249 }
2269 2250
2270 2251
(...skipping 10 matching lines...) Expand all
2281 } 2262 }
2282 2263
2283 2264
2284 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op, 2265 void FullCodeGenerator::EmitVariableAssignment(Variable* var, Token::Value op,
2285 FeedbackVectorSlot slot) { 2266 FeedbackVectorSlot slot) {
2286 ASM_LOCATION("FullCodeGenerator::EmitVariableAssignment"); 2267 ASM_LOCATION("FullCodeGenerator::EmitVariableAssignment");
2287 if (var->IsUnallocated()) { 2268 if (var->IsUnallocated()) {
2288 // Global var, const, or let. 2269 // Global var, const, or let.
2289 __ Mov(StoreDescriptor::NameRegister(), Operand(var->name())); 2270 __ Mov(StoreDescriptor::NameRegister(), Operand(var->name()));
2290 __ Ldr(StoreDescriptor::ReceiverRegister(), GlobalObjectMemOperand()); 2271 __ Ldr(StoreDescriptor::ReceiverRegister(), GlobalObjectMemOperand());
2291 if (FLAG_vector_stores) EmitLoadStoreICSlot(slot); 2272 EmitLoadStoreICSlot(slot);
2292 CallStoreIC(); 2273 CallStoreIC();
2293 2274
2294 } else if (var->mode() == LET && op != Token::INIT) { 2275 } else if (var->mode() == LET && op != Token::INIT) {
2295 // Non-initializing assignment to let variable needs a write barrier. 2276 // Non-initializing assignment to let variable needs a write barrier.
2296 DCHECK(!var->IsLookupSlot()); 2277 DCHECK(!var->IsLookupSlot());
2297 DCHECK(var->IsStackAllocated() || var->IsContextSlot()); 2278 DCHECK(var->IsStackAllocated() || var->IsContextSlot());
2298 Label assign; 2279 Label assign;
2299 MemOperand location = VarOperand(var, x1); 2280 MemOperand location = VarOperand(var, x1);
2300 __ Ldr(x10, location); 2281 __ Ldr(x10, location);
2301 __ JumpIfNotRoot(x10, Heap::kTheHoleValueRootIndex, &assign); 2282 __ JumpIfNotRoot(x10, Heap::kTheHoleValueRootIndex, &assign);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2388 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { 2369 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
2389 ASM_LOCATION("FullCodeGenerator::EmitNamedPropertyAssignment"); 2370 ASM_LOCATION("FullCodeGenerator::EmitNamedPropertyAssignment");
2390 // Assignment to a property, using a named store IC. 2371 // Assignment to a property, using a named store IC.
2391 Property* prop = expr->target()->AsProperty(); 2372 Property* prop = expr->target()->AsProperty();
2392 DCHECK(prop != NULL); 2373 DCHECK(prop != NULL);
2393 DCHECK(prop->key()->IsLiteral()); 2374 DCHECK(prop->key()->IsLiteral());
2394 2375
2395 __ Mov(StoreDescriptor::NameRegister(), 2376 __ Mov(StoreDescriptor::NameRegister(),
2396 Operand(prop->key()->AsLiteral()->value())); 2377 Operand(prop->key()->AsLiteral()->value()));
2397 __ Pop(StoreDescriptor::ReceiverRegister()); 2378 __ Pop(StoreDescriptor::ReceiverRegister());
2398 if (FLAG_vector_stores) { 2379 EmitLoadStoreICSlot(expr->AssignmentSlot());
2399 EmitLoadStoreICSlot(expr->AssignmentSlot()); 2380 CallStoreIC();
2400 CallStoreIC();
2401 } else {
2402 CallStoreIC(expr->AssignmentFeedbackId());
2403 }
2404 2381
2405 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2382 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2406 context()->Plug(x0); 2383 context()->Plug(x0);
2407 } 2384 }
2408 2385
2409 2386
2410 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { 2387 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) {
2411 // Assignment to named property of super. 2388 // Assignment to named property of super.
2412 // x0 : value 2389 // x0 : value
2413 // stack : receiver ('this'), home_object 2390 // stack : receiver ('this'), home_object
(...skipping 26 matching lines...) Expand all
2440 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { 2417 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
2441 ASM_LOCATION("FullCodeGenerator::EmitKeyedPropertyAssignment"); 2418 ASM_LOCATION("FullCodeGenerator::EmitKeyedPropertyAssignment");
2442 // Assignment to a property, using a keyed store IC. 2419 // Assignment to a property, using a keyed store IC.
2443 2420
2444 // TODO(all): Could we pass this in registers rather than on the stack? 2421 // TODO(all): Could we pass this in registers rather than on the stack?
2445 __ Pop(StoreDescriptor::NameRegister(), StoreDescriptor::ReceiverRegister()); 2422 __ Pop(StoreDescriptor::NameRegister(), StoreDescriptor::ReceiverRegister());
2446 DCHECK(StoreDescriptor::ValueRegister().is(x0)); 2423 DCHECK(StoreDescriptor::ValueRegister().is(x0));
2447 2424
2448 Handle<Code> ic = 2425 Handle<Code> ic =
2449 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 2426 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
2450 if (FLAG_vector_stores) { 2427 EmitLoadStoreICSlot(expr->AssignmentSlot());
2451 EmitLoadStoreICSlot(expr->AssignmentSlot()); 2428 CallIC(ic);
2452 CallIC(ic);
2453 } else {
2454 CallIC(ic, expr->AssignmentFeedbackId());
2455 }
2456 2429
2457 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2430 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2458 context()->Plug(x0); 2431 context()->Plug(x0);
2459 } 2432 }
2460 2433
2461 2434
2462 void FullCodeGenerator::VisitProperty(Property* expr) { 2435 void FullCodeGenerator::VisitProperty(Property* expr) {
2463 Comment cmnt(masm_, "[ Property"); 2436 Comment cmnt(masm_, "[ Property");
2464 SetExpressionPosition(expr); 2437 SetExpressionPosition(expr);
2465 Expression* key = expr->key(); 2438 Expression* key = expr->key();
(...skipping 1826 matching lines...) Expand 10 before | Expand all | Expand 10 after
4292 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), 4265 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(),
4293 Token::ASSIGN, expr->CountSlot()); 4266 Token::ASSIGN, expr->CountSlot());
4294 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4267 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4295 context()->Plug(x0); 4268 context()->Plug(x0);
4296 } 4269 }
4297 break; 4270 break;
4298 case NAMED_PROPERTY: { 4271 case NAMED_PROPERTY: {
4299 __ Mov(StoreDescriptor::NameRegister(), 4272 __ Mov(StoreDescriptor::NameRegister(),
4300 Operand(prop->key()->AsLiteral()->value())); 4273 Operand(prop->key()->AsLiteral()->value()));
4301 __ Pop(StoreDescriptor::ReceiverRegister()); 4274 __ Pop(StoreDescriptor::ReceiverRegister());
4302 if (FLAG_vector_stores) { 4275 EmitLoadStoreICSlot(expr->CountSlot());
4303 EmitLoadStoreICSlot(expr->CountSlot()); 4276 CallStoreIC();
4304 CallStoreIC();
4305 } else {
4306 CallStoreIC(expr->CountStoreFeedbackId());
4307 }
4308 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4277 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4309 if (expr->is_postfix()) { 4278 if (expr->is_postfix()) {
4310 if (!context()->IsEffect()) { 4279 if (!context()->IsEffect()) {
4311 context()->PlugTOS(); 4280 context()->PlugTOS();
4312 } 4281 }
4313 } else { 4282 } else {
4314 context()->Plug(x0); 4283 context()->Plug(x0);
4315 } 4284 }
4316 break; 4285 break;
4317 } 4286 }
(...skipping 17 matching lines...) Expand all
4335 } else { 4304 } else {
4336 context()->Plug(x0); 4305 context()->Plug(x0);
4337 } 4306 }
4338 break; 4307 break;
4339 } 4308 }
4340 case KEYED_PROPERTY: { 4309 case KEYED_PROPERTY: {
4341 __ Pop(StoreDescriptor::NameRegister()); 4310 __ Pop(StoreDescriptor::NameRegister());
4342 __ Pop(StoreDescriptor::ReceiverRegister()); 4311 __ Pop(StoreDescriptor::ReceiverRegister());
4343 Handle<Code> ic = 4312 Handle<Code> ic =
4344 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); 4313 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code();
4345 if (FLAG_vector_stores) { 4314 EmitLoadStoreICSlot(expr->CountSlot());
4346 EmitLoadStoreICSlot(expr->CountSlot()); 4315 CallIC(ic);
4347 CallIC(ic);
4348 } else {
4349 CallIC(ic, expr->CountStoreFeedbackId());
4350 }
4351 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4316 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4352 if (expr->is_postfix()) { 4317 if (expr->is_postfix()) {
4353 if (!context()->IsEffect()) { 4318 if (!context()->IsEffect()) {
4354 context()->PlugTOS(); 4319 context()->PlugTOS();
4355 } 4320 }
4356 } else { 4321 } else {
4357 context()->Plug(x0); 4322 context()->Plug(x0);
4358 } 4323 }
4359 break; 4324 break;
4360 } 4325 }
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
4970 DCHECK(!result_register().is(x10)); 4935 DCHECK(!result_register().is(x10));
4971 ExternalReference pending_message_obj = 4936 ExternalReference pending_message_obj =
4972 ExternalReference::address_of_pending_message_obj(isolate()); 4937 ExternalReference::address_of_pending_message_obj(isolate());
4973 __ LoadRoot(x10, Heap::kTheHoleValueRootIndex); 4938 __ LoadRoot(x10, Heap::kTheHoleValueRootIndex);
4974 __ Mov(x13, pending_message_obj); 4939 __ Mov(x13, pending_message_obj);
4975 __ Str(x10, MemOperand(x13)); 4940 __ Str(x10, MemOperand(x13));
4976 } 4941 }
4977 4942
4978 4943
4979 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorSlot slot) { 4944 void FullCodeGenerator::EmitLoadStoreICSlot(FeedbackVectorSlot slot) {
4980 DCHECK(FLAG_vector_stores && !slot.IsInvalid()); 4945 DCHECK(!slot.IsInvalid());
4981 __ Mov(VectorStoreICTrampolineDescriptor::SlotRegister(), SmiFromSlot(slot)); 4946 __ Mov(VectorStoreICTrampolineDescriptor::SlotRegister(), SmiFromSlot(slot));
4982 } 4947 }
4983 4948
4984 4949
4985 #undef __ 4950 #undef __
4986 4951
4987 4952
4988 void BackEdgeTable::PatchAt(Code* unoptimized_code, 4953 void BackEdgeTable::PatchAt(Code* unoptimized_code,
4989 Address pc, 4954 Address pc,
4990 BackEdgeState target_state, 4955 BackEdgeState target_state,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
5077 } 5042 }
5078 5043
5079 return INTERRUPT; 5044 return INTERRUPT;
5080 } 5045 }
5081 5046
5082 5047
5083 } // namespace internal 5048 } // namespace internal
5084 } // namespace v8 5049 } // namespace v8
5085 5050
5086 #endif // V8_TARGET_ARCH_ARM64 5051 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/full-codegen/arm/full-codegen-arm.cc ('k') | src/full-codegen/ia32/full-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698