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

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

Issue 1135243004: [es6] Support super.property in eval and arrow functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: All ports done Created 5 years, 7 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 | « no previous file | src/arm64/full-codegen-arm64.cc » ('j') | src/preparser.h » ('J')
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_ARM 7 #if V8_TARGET_ARCH_ARM
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; 300 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW;
301 } else { 301 } else {
302 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; 302 type = ArgumentsAccessStub::NEW_SLOPPY_FAST;
303 } 303 }
304 ArgumentsAccessStub stub(isolate(), type, has_new_target); 304 ArgumentsAccessStub stub(isolate(), type, has_new_target);
305 __ CallStub(&stub); 305 __ CallStub(&stub);
306 306
307 SetVar(arguments, r0, r1, r2); 307 SetVar(arguments, r0, r1, r2);
308 } 308 }
309 309
310 // Possibly set up a local binding to the [[HomeObject]].
311 Variable* home_object_var = scope()->home_object_var();
312 if (home_object_var != nullptr) {
313 Comment cmnt(masm_, "[ Home object");
314 if (function_in_register) {
315 __ Move(LoadDescriptor::ReceiverRegister(), r1);
316 } else {
317 __ ldr(LoadDescriptor::ReceiverRegister(),
318 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
319 }
320 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
321 __ Move(LoadDescriptor::NameRegister(), home_object_symbol);
322
323 if (FLAG_vector_ics) {
324 __ mov(VectorLoadICDescriptor::SlotRegister(),
325 Operand(SmiFromSlot(function()->HomeObjectFeedbackSlot())));
326 }
327 CallLoadIC(NOT_CONTEXTUAL);
328
329 SetVar(home_object_var, r0, r1, r2);
330 }
331
310 if (FLAG_trace) { 332 if (FLAG_trace) {
311 __ CallRuntime(Runtime::kTraceEnter, 0); 333 __ CallRuntime(Runtime::kTraceEnter, 0);
312 } 334 }
313 335
314 // Visit the declarations and body unless there is an illegal 336 // Visit the declarations and body unless there is an illegal
315 // redeclaration. 337 // redeclaration.
316 if (scope()->HasIllegalRedeclaration()) { 338 if (scope()->HasIllegalRedeclaration()) {
317 Comment cmnt(masm_, "[ Declarations"); 339 Comment cmnt(masm_, "[ Declarations");
318 scope()->VisitIllegalRedeclaration(this); 340 scope()->VisitIllegalRedeclaration(this);
319 341
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 context()->Plug(r0); 1340 context()->Plug(r0);
1319 } 1341 }
1320 1342
1321 1343
1322 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { 1344 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
1323 Comment cmnt(masm_, "[ VariableProxy"); 1345 Comment cmnt(masm_, "[ VariableProxy");
1324 EmitVariableLoad(expr); 1346 EmitVariableLoad(expr);
1325 } 1347 }
1326 1348
1327 1349
1328 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) {
1329 Comment cnmt(masm_, "[ SuperReference ");
1330
1331 __ ldr(LoadDescriptor::ReceiverRegister(),
1332 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
1333
1334 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
1335 __ Move(LoadDescriptor::NameRegister(), home_object_symbol);
1336
1337 if (FLAG_vector_ics) {
1338 __ mov(VectorLoadICDescriptor::SlotRegister(),
1339 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot())));
1340 CallLoadIC(NOT_CONTEXTUAL);
1341 } else {
1342 CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId());
1343 }
1344
1345 __ cmp(r0, Operand(isolate()->factory()->undefined_value()));
1346 Label done;
1347 __ b(ne, &done);
1348 __ CallRuntime(Runtime::kThrowNonMethodError, 0);
1349 __ bind(&done);
1350 }
1351
1352
1353 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, 1350 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer,
1354 int offset) { 1351 int offset) {
1355 if (NeedsHomeObject(initializer)) { 1352 if (NeedsHomeObject(initializer)) {
1356 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); 1353 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp));
1357 __ mov(StoreDescriptor::NameRegister(), 1354 __ mov(StoreDescriptor::NameRegister(),
1358 Operand(isolate()->factory()->home_object_symbol())); 1355 Operand(isolate()->factory()->home_object_symbol()));
1359 __ ldr(StoreDescriptor::ValueRegister(), 1356 __ ldr(StoreDescriptor::ValueRegister(),
1360 MemOperand(sp, offset * kPointerSize)); 1357 MemOperand(sp, offset * kPointerSize));
1361 CallStoreIC(); 1358 CallStoreIC();
1362 } 1359 }
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1958 if (expr->is_compound()) { 1955 if (expr->is_compound()) {
1959 // We need the receiver both on the stack and in the register. 1956 // We need the receiver both on the stack and in the register.
1960 VisitForStackValue(property->obj()); 1957 VisitForStackValue(property->obj());
1961 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); 1958 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0));
1962 } else { 1959 } else {
1963 VisitForStackValue(property->obj()); 1960 VisitForStackValue(property->obj());
1964 } 1961 }
1965 break; 1962 break;
1966 case NAMED_SUPER_PROPERTY: 1963 case NAMED_SUPER_PROPERTY:
1967 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1964 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1968 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1965 VisitForAccumulatorValue(
1966 property->obj()->AsSuperReference()->home_object_var());
1969 __ Push(result_register()); 1967 __ Push(result_register());
1970 if (expr->is_compound()) { 1968 if (expr->is_compound()) {
1971 const Register scratch = r1; 1969 const Register scratch = r1;
1972 __ ldr(scratch, MemOperand(sp, kPointerSize)); 1970 __ ldr(scratch, MemOperand(sp, kPointerSize));
1973 __ Push(scratch); 1971 __ Push(scratch);
1974 __ Push(result_register()); 1972 __ Push(result_register());
1975 } 1973 }
1976 break; 1974 break;
1977 case KEYED_SUPER_PROPERTY: 1975 case KEYED_SUPER_PROPERTY:
1978 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1976 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1979 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1977 VisitForStackValue(
1980 __ Push(result_register()); 1978 property->obj()->AsSuperReference()->home_object_var());
1981 VisitForAccumulatorValue(property->key()); 1979 VisitForAccumulatorValue(property->key());
1982 __ Push(result_register()); 1980 __ Push(result_register());
1983 if (expr->is_compound()) { 1981 if (expr->is_compound()) {
1984 const Register scratch = r1; 1982 const Register scratch = r1;
1985 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); 1983 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
1986 __ Push(scratch); 1984 __ Push(scratch);
1987 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); 1985 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
1988 __ Push(scratch); 1986 __ Push(scratch);
1989 __ Push(result_register()); 1987 __ Push(result_register());
1990 } 1988 }
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
2626 __ Move(StoreDescriptor::ReceiverRegister(), r0); 2624 __ Move(StoreDescriptor::ReceiverRegister(), r0);
2627 __ pop(StoreDescriptor::ValueRegister()); // Restore value. 2625 __ pop(StoreDescriptor::ValueRegister()); // Restore value.
2628 __ mov(StoreDescriptor::NameRegister(), 2626 __ mov(StoreDescriptor::NameRegister(),
2629 Operand(prop->key()->AsLiteral()->value())); 2627 Operand(prop->key()->AsLiteral()->value()));
2630 CallStoreIC(); 2628 CallStoreIC();
2631 break; 2629 break;
2632 } 2630 }
2633 case NAMED_SUPER_PROPERTY: { 2631 case NAMED_SUPER_PROPERTY: {
2634 __ Push(r0); 2632 __ Push(r0);
2635 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2633 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2636 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2634 VisitForAccumulatorValue(
2635 prop->obj()->AsSuperReference()->home_object_var());
2637 // stack: value, this; r0: home_object 2636 // stack: value, this; r0: home_object
2638 Register scratch = r2; 2637 Register scratch = r2;
2639 Register scratch2 = r3; 2638 Register scratch2 = r3;
2640 __ mov(scratch, result_register()); // home_object 2639 __ mov(scratch, result_register()); // home_object
2641 __ ldr(r0, MemOperand(sp, kPointerSize)); // value 2640 __ ldr(r0, MemOperand(sp, kPointerSize)); // value
2642 __ ldr(scratch2, MemOperand(sp, 0)); // this 2641 __ ldr(scratch2, MemOperand(sp, 0)); // this
2643 __ str(scratch2, MemOperand(sp, kPointerSize)); // this 2642 __ str(scratch2, MemOperand(sp, kPointerSize)); // this
2644 __ str(scratch, MemOperand(sp, 0)); // home_object 2643 __ str(scratch, MemOperand(sp, 0)); // home_object
2645 // stack: this, home_object; r0: value 2644 // stack: this, home_object; r0: value
2646 EmitNamedSuperPropertyStore(prop); 2645 EmitNamedSuperPropertyStore(prop);
2647 break; 2646 break;
2648 } 2647 }
2649 case KEYED_SUPER_PROPERTY: { 2648 case KEYED_SUPER_PROPERTY: {
2650 __ Push(r0); 2649 __ Push(r0);
2651 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2650 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2652 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2651 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
2653 __ Push(result_register());
2654 VisitForAccumulatorValue(prop->key()); 2652 VisitForAccumulatorValue(prop->key());
2655 Register scratch = r2; 2653 Register scratch = r2;
2656 Register scratch2 = r3; 2654 Register scratch2 = r3;
2657 __ ldr(scratch2, MemOperand(sp, 2 * kPointerSize)); // value 2655 __ ldr(scratch2, MemOperand(sp, 2 * kPointerSize)); // value
2658 // stack: value, this, home_object; r0: key, r3: value 2656 // stack: value, this, home_object; r0: key, r3: value
2659 __ ldr(scratch, MemOperand(sp, kPointerSize)); // this 2657 __ ldr(scratch, MemOperand(sp, kPointerSize)); // this
2660 __ str(scratch, MemOperand(sp, 2 * kPointerSize)); 2658 __ str(scratch, MemOperand(sp, 2 * kPointerSize));
2661 __ ldr(scratch, MemOperand(sp, 0)); // home_object 2659 __ ldr(scratch, MemOperand(sp, 0)); // home_object
2662 __ str(scratch, MemOperand(sp, kPointerSize)); 2660 __ str(scratch, MemOperand(sp, kPointerSize));
2663 __ str(r0, MemOperand(sp, 0)); 2661 __ str(r0, MemOperand(sp, 0));
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2855 Comment cmnt(masm_, "[ Property"); 2853 Comment cmnt(masm_, "[ Property");
2856 Expression* key = expr->key(); 2854 Expression* key = expr->key();
2857 2855
2858 if (key->IsPropertyName()) { 2856 if (key->IsPropertyName()) {
2859 if (!expr->IsSuperAccess()) { 2857 if (!expr->IsSuperAccess()) {
2860 VisitForAccumulatorValue(expr->obj()); 2858 VisitForAccumulatorValue(expr->obj());
2861 __ Move(LoadDescriptor::ReceiverRegister(), r0); 2859 __ Move(LoadDescriptor::ReceiverRegister(), r0);
2862 EmitNamedPropertyLoad(expr); 2860 EmitNamedPropertyLoad(expr);
2863 } else { 2861 } else {
2864 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2862 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2865 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2863 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2866 __ Push(result_register());
2867 EmitNamedSuperPropertyLoad(expr); 2864 EmitNamedSuperPropertyLoad(expr);
2868 } 2865 }
2869 } else { 2866 } else {
2870 if (!expr->IsSuperAccess()) { 2867 if (!expr->IsSuperAccess()) {
2871 VisitForStackValue(expr->obj()); 2868 VisitForStackValue(expr->obj());
2872 VisitForAccumulatorValue(expr->key()); 2869 VisitForAccumulatorValue(expr->key());
2873 __ Move(LoadDescriptor::NameRegister(), r0); 2870 __ Move(LoadDescriptor::NameRegister(), r0);
2874 __ pop(LoadDescriptor::ReceiverRegister()); 2871 __ pop(LoadDescriptor::ReceiverRegister());
2875 EmitKeyedPropertyLoad(expr); 2872 EmitKeyedPropertyLoad(expr);
2876 } else { 2873 } else {
2877 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2874 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2878 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2875 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2879 __ Push(result_register());
2880 VisitForStackValue(expr->key()); 2876 VisitForStackValue(expr->key());
2881 EmitKeyedSuperPropertyLoad(expr); 2877 EmitKeyedSuperPropertyLoad(expr);
2882 } 2878 }
2883 } 2879 }
2884 PrepareForBailoutForId(expr->LoadId(), TOS_REG); 2880 PrepareForBailoutForId(expr->LoadId(), TOS_REG);
2885 context()->Plug(r0); 2881 context()->Plug(r0);
2886 } 2882 }
2887 2883
2888 2884
2889 void FullCodeGenerator::CallIC(Handle<Code> code, 2885 void FullCodeGenerator::CallIC(Handle<Code> code,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2935 DCHECK(callee->IsProperty()); 2931 DCHECK(callee->IsProperty());
2936 Property* prop = callee->AsProperty(); 2932 Property* prop = callee->AsProperty();
2937 DCHECK(prop->IsSuperAccess()); 2933 DCHECK(prop->IsSuperAccess());
2938 2934
2939 SetSourcePosition(prop->position()); 2935 SetSourcePosition(prop->position());
2940 Literal* key = prop->key()->AsLiteral(); 2936 Literal* key = prop->key()->AsLiteral();
2941 DCHECK(!key->value()->IsSmi()); 2937 DCHECK(!key->value()->IsSmi());
2942 // Load the function from the receiver. 2938 // Load the function from the receiver.
2943 const Register scratch = r1; 2939 const Register scratch = r1;
2944 SuperReference* super_ref = prop->obj()->AsSuperReference(); 2940 SuperReference* super_ref = prop->obj()->AsSuperReference();
2945 EmitLoadHomeObject(super_ref); 2941 VisitForStackValue(super_ref->home_object_var());
2946 __ Push(r0);
2947 VisitForAccumulatorValue(super_ref->this_var()); 2942 VisitForAccumulatorValue(super_ref->this_var());
2948 __ Push(r0); 2943 __ Push(r0);
2949 __ Push(r0); 2944 __ Push(r0);
2950 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); 2945 __ ldr(scratch, MemOperand(sp, kPointerSize * 2));
2951 __ Push(scratch); 2946 __ Push(scratch);
2952 __ Push(key->value()); 2947 __ Push(key->value());
2953 2948
2954 // Stack here: 2949 // Stack here:
2955 // - home_object 2950 // - home_object
2956 // - this (receiver) 2951 // - this (receiver)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2996 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { 2991 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) {
2997 Expression* callee = expr->expression(); 2992 Expression* callee = expr->expression();
2998 DCHECK(callee->IsProperty()); 2993 DCHECK(callee->IsProperty());
2999 Property* prop = callee->AsProperty(); 2994 Property* prop = callee->AsProperty();
3000 DCHECK(prop->IsSuperAccess()); 2995 DCHECK(prop->IsSuperAccess());
3001 2996
3002 SetSourcePosition(prop->position()); 2997 SetSourcePosition(prop->position());
3003 // Load the function from the receiver. 2998 // Load the function from the receiver.
3004 const Register scratch = r1; 2999 const Register scratch = r1;
3005 SuperReference* super_ref = prop->obj()->AsSuperReference(); 3000 SuperReference* super_ref = prop->obj()->AsSuperReference();
3006 EmitLoadHomeObject(super_ref); 3001 VisitForStackValue(super_ref->home_object_var());
3007 __ Push(r0);
3008 VisitForAccumulatorValue(super_ref->this_var()); 3002 VisitForAccumulatorValue(super_ref->this_var());
3009 __ Push(r0); 3003 __ Push(r0);
3010 __ Push(r0); 3004 __ Push(r0);
3011 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); 3005 __ ldr(scratch, MemOperand(sp, kPointerSize * 2));
3012 __ Push(scratch); 3006 __ Push(scratch);
3013 VisitForStackValue(prop->key()); 3007 VisitForStackValue(prop->key());
3014 3008
3015 // Stack here: 3009 // Stack here:
3016 // - home_object 3010 // - home_object
3017 // - this (receiver) 3011 // - this (receiver)
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after
4843 case NAMED_PROPERTY: { 4837 case NAMED_PROPERTY: {
4844 // Put the object both on the stack and in the register. 4838 // Put the object both on the stack and in the register.
4845 VisitForStackValue(prop->obj()); 4839 VisitForStackValue(prop->obj());
4846 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); 4840 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0));
4847 EmitNamedPropertyLoad(prop); 4841 EmitNamedPropertyLoad(prop);
4848 break; 4842 break;
4849 } 4843 }
4850 4844
4851 case NAMED_SUPER_PROPERTY: { 4845 case NAMED_SUPER_PROPERTY: {
4852 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4846 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4853 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4847 VisitForAccumulatorValue(
4848 prop->obj()->AsSuperReference()->home_object_var());
4854 __ Push(result_register()); 4849 __ Push(result_register());
4855 const Register scratch = r1; 4850 const Register scratch = r1;
4856 __ ldr(scratch, MemOperand(sp, kPointerSize)); 4851 __ ldr(scratch, MemOperand(sp, kPointerSize));
4857 __ Push(scratch); 4852 __ Push(scratch);
4858 __ Push(result_register()); 4853 __ Push(result_register());
4859 EmitNamedSuperPropertyLoad(prop); 4854 EmitNamedSuperPropertyLoad(prop);
4860 break; 4855 break;
4861 } 4856 }
4862 4857
4863 case KEYED_SUPER_PROPERTY: { 4858 case KEYED_SUPER_PROPERTY: {
4864 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4859 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4865 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4860 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
4866 __ Push(result_register());
4867 VisitForAccumulatorValue(prop->key()); 4861 VisitForAccumulatorValue(prop->key());
4868 __ Push(result_register()); 4862 __ Push(result_register());
4869 const Register scratch = r1; 4863 const Register scratch = r1;
4870 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); 4864 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
4871 __ Push(scratch); 4865 __ Push(scratch);
4872 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); 4866 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
4873 __ Push(scratch); 4867 __ Push(scratch);
4874 __ Push(result_register()); 4868 __ Push(result_register());
4875 EmitKeyedSuperPropertyLoad(prop); 4869 EmitKeyedSuperPropertyLoad(prop);
4876 break; 4870 break;
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
5511 5505
5512 DCHECK(interrupt_address == 5506 DCHECK(interrupt_address ==
5513 isolate->builtins()->OsrAfterStackCheck()->entry()); 5507 isolate->builtins()->OsrAfterStackCheck()->entry());
5514 return OSR_AFTER_STACK_CHECK; 5508 return OSR_AFTER_STACK_CHECK;
5515 } 5509 }
5516 5510
5517 5511
5518 } } // namespace v8::internal 5512 } } // namespace v8::internal
5519 5513
5520 #endif // V8_TARGET_ARCH_ARM 5514 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/full-codegen-arm64.cc » ('j') | src/preparser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698