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

Side by Side Diff: src/arm/code-stubs-arm.cc

Issue 15094018: Create AllocationSite objects, pointed to by AllocationSiteInfo. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Comment response Created 7 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « include/v8.h ('k') | src/arm/ic-arm.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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 Isolate* isolate, 53 Isolate* isolate,
54 CodeStubInterfaceDescriptor* descriptor) { 54 CodeStubInterfaceDescriptor* descriptor) {
55 static Register registers[] = { r3, r2, r1, r0 }; 55 static Register registers[] = { r3, r2, r1, r0 };
56 descriptor->register_param_count_ = 4; 56 descriptor->register_param_count_ = 4;
57 descriptor->register_params_ = registers; 57 descriptor->register_params_ = registers;
58 descriptor->deoptimization_handler_ = 58 descriptor->deoptimization_handler_ =
59 Runtime::FunctionForId(Runtime::kCreateObjectLiteralShallow)->entry; 59 Runtime::FunctionForId(Runtime::kCreateObjectLiteralShallow)->entry;
60 } 60 }
61 61
62 62
63 void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
64 Isolate* isolate,
65 CodeStubInterfaceDescriptor* descriptor) {
66 static Register registers[] = { r2 };
67 descriptor->register_param_count_ = 1;
68 descriptor->register_params_ = registers;
69 descriptor->deoptimization_handler_ = NULL;
70 }
71
72
63 void KeyedLoadFastElementStub::InitializeInterfaceDescriptor( 73 void KeyedLoadFastElementStub::InitializeInterfaceDescriptor(
64 Isolate* isolate, 74 Isolate* isolate,
65 CodeStubInterfaceDescriptor* descriptor) { 75 CodeStubInterfaceDescriptor* descriptor) {
66 static Register registers[] = { r1, r0 }; 76 static Register registers[] = { r1, r0 };
67 descriptor->register_param_count_ = 2; 77 descriptor->register_param_count_ = 2;
68 descriptor->register_params_ = registers; 78 descriptor->register_params_ = registers;
69 descriptor->deoptimization_handler_ = 79 descriptor->deoptimization_handler_ =
70 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure); 80 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure);
71 } 81 }
72 82
(...skipping 2673 matching lines...) Expand 10 before | Expand all | Expand 10 after
2746 } 2756 }
2747 2757
2748 2758
2749 void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) { 2759 void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
2750 CEntryStub::GenerateAheadOfTime(isolate); 2760 CEntryStub::GenerateAheadOfTime(isolate);
2751 WriteInt32ToHeapNumberStub::GenerateFixedRegStubsAheadOfTime(isolate); 2761 WriteInt32ToHeapNumberStub::GenerateFixedRegStubsAheadOfTime(isolate);
2752 StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate); 2762 StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate);
2753 StubFailureTrampolineStub::GenerateAheadOfTime(isolate); 2763 StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
2754 RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate); 2764 RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
2755 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); 2765 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
2766 CreateAllocationSiteStub::GenerateAheadOfTime(isolate);
2756 } 2767 }
2757 2768
2758 2769
2759 void CodeStub::GenerateFPStubs(Isolate* isolate) { 2770 void CodeStub::GenerateFPStubs(Isolate* isolate) {
2760 SaveFPRegsMode mode = kSaveFPRegs; 2771 SaveFPRegsMode mode = kSaveFPRegs;
2761 CEntryStub save_doubles(1, mode); 2772 CEntryStub save_doubles(1, mode);
2762 StoreBufferOverflowStub stub(mode); 2773 StoreBufferOverflowStub stub(mode);
2763 // These stubs might already be in the snapshot, detect that and don't 2774 // These stubs might already be in the snapshot, detect that and don't
2764 // regenerate, which would lead to code stub initialization state being messed 2775 // regenerate, which would lead to code stub initialization state being messed
2765 // up. 2776 // up.
(...skipping 1628 matching lines...) Expand 10 before | Expand all | Expand 10 after
4394 ASSERT_EQ(*TypeFeedbackCells::UninitializedSentinel(masm->isolate()), 4405 ASSERT_EQ(*TypeFeedbackCells::UninitializedSentinel(masm->isolate()),
4395 masm->isolate()->heap()->the_hole_value()); 4406 masm->isolate()->heap()->the_hole_value());
4396 4407
4397 // Load the cache state into r3. 4408 // Load the cache state into r3.
4398 __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset)); 4409 __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset));
4399 4410
4400 // A monomorphic cache hit or an already megamorphic state: invoke the 4411 // A monomorphic cache hit or an already megamorphic state: invoke the
4401 // function without changing the state. 4412 // function without changing the state.
4402 __ cmp(r3, r1); 4413 __ cmp(r3, r1);
4403 __ b(eq, &done); 4414 __ b(eq, &done);
4404 __ CompareRoot(r3, Heap::kUndefinedValueRootIndex);
4405 __ b(eq, &done);
4406 4415
4407 // Special handling of the Array() function, which caches not only the 4416 // If we came here, we need to see if we are the array function.
4408 // monomorphic Array function but the initial ElementsKind with special 4417 // If we didn't have a matching function, and we didn't find the megamorph
4409 // sentinels 4418 // sentinel, then we have in the cell either some other function or an
4410 __ JumpIfNotSmi(r3, &miss); 4419 // AllocationSite. Do a map check on the object in ecx.
4411 if (FLAG_debug_code) { 4420 Handle<Map> allocation_site_map(
4412 Handle<Object> terminal_kind_sentinel = 4421 masm->isolate()->heap()->allocation_site_map(),
4413 TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(), 4422 masm->isolate());
4414 LAST_FAST_ELEMENTS_KIND); 4423 __ ldr(r5, FieldMemOperand(r3, 0));
4415 __ cmp(r3, Operand(terminal_kind_sentinel)); 4424 __ CompareRoot(r5, Heap::kAllocationSiteMapRootIndex);
4416 __ Assert(le, "Array function sentinel is not an ElementsKind"); 4425 __ b(ne, &miss);
4417 }
4418 4426
4419 // Make sure the function is the Array() function 4427 // Make sure the function is the Array() function
4420 __ LoadArrayFunction(r3); 4428 __ LoadArrayFunction(r3);
4421 __ cmp(r1, r3); 4429 __ cmp(r1, r3);
4422 __ b(ne, &megamorphic); 4430 __ b(ne, &megamorphic);
4423 __ jmp(&done); 4431 __ jmp(&done);
4424 4432
4425 __ bind(&miss); 4433 __ bind(&miss);
4426 4434
4427 // A monomorphic miss (i.e, here the cache is not uninitialized) goes 4435 // A monomorphic miss (i.e, here the cache is not uninitialized) goes
4428 // megamorphic. 4436 // megamorphic.
4429 __ CompareRoot(r3, Heap::kTheHoleValueRootIndex); 4437 __ CompareRoot(r3, Heap::kTheHoleValueRootIndex);
4430 __ b(eq, &initialize); 4438 __ b(eq, &initialize);
4431 // MegamorphicSentinel is an immortal immovable object (undefined) so no 4439 // MegamorphicSentinel is an immortal immovable object (undefined) so no
4432 // write-barrier is needed. 4440 // write-barrier is needed.
4433 __ bind(&megamorphic); 4441 __ bind(&megamorphic);
4434 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); 4442 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
4435 __ str(ip, FieldMemOperand(r2, Cell::kValueOffset)); 4443 __ str(ip, FieldMemOperand(r2, Cell::kValueOffset));
4436 __ jmp(&done); 4444 __ jmp(&done);
4437 4445
4438 // An uninitialized cache is patched with the function or sentinel to 4446 // An uninitialized cache is patched with the function or sentinel to
4439 // indicate the ElementsKind if function is the Array constructor. 4447 // indicate the ElementsKind if function is the Array constructor.
4440 __ bind(&initialize); 4448 __ bind(&initialize);
4441 // Make sure the function is the Array() function 4449 // Make sure the function is the Array() function
4442 __ LoadArrayFunction(r3); 4450 __ LoadArrayFunction(r3);
4443 __ cmp(r1, r3); 4451 __ cmp(r1, r3);
4444 __ b(ne, &not_array_function); 4452 __ b(ne, &not_array_function);
4445 4453
4446 // The target function is the Array constructor, install a sentinel value in 4454 // The target function is the Array constructor,
4447 // the constructor's type info cell that will track the initial ElementsKind 4455 // Create an AllocationSite if we don't already have it, store it in the cell
4448 // that should be used for the array when its constructed. 4456 {
4449 Handle<Object> initial_kind_sentinel = 4457 FrameScope scope(masm, StackFrame::INTERNAL);
4450 TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(), 4458
4451 GetInitialFastElementsKind()); 4459 __ push(r0);
4452 __ mov(r3, Operand(initial_kind_sentinel)); 4460 __ push(r1);
4453 __ str(r3, FieldMemOperand(r2, Cell::kValueOffset)); 4461 __ push(r2);
4462
4463 CreateAllocationSiteStub create_stub;
4464 __ CallStub(&create_stub);
4465
4466 __ pop(r2);
4467 __ pop(r1);
4468 __ pop(r0);
4469 }
4454 __ b(&done); 4470 __ b(&done);
4455 4471
4456 __ bind(&not_array_function); 4472 __ bind(&not_array_function);
4457 __ str(r1, FieldMemOperand(r2, Cell::kValueOffset)); 4473 __ str(r1, FieldMemOperand(r2, Cell::kValueOffset));
4458 // No need for a write barrier here - cells are rescanned. 4474 // No need for a write barrier here - cells are rescanned.
4459 4475
4460 __ bind(&done); 4476 __ bind(&done);
4461 } 4477 }
4462 4478
4463 4479
(...skipping 2463 matching lines...) Expand 10 before | Expand all | Expand 10 after
6927 // r0 - number of arguments 6943 // r0 - number of arguments
6928 // r1 - constructor? 6944 // r1 - constructor?
6929 // sp[0] - last argument 6945 // sp[0] - last argument
6930 ASSERT(FAST_SMI_ELEMENTS == 0); 6946 ASSERT(FAST_SMI_ELEMENTS == 0);
6931 ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); 6947 ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1);
6932 ASSERT(FAST_ELEMENTS == 2); 6948 ASSERT(FAST_ELEMENTS == 2);
6933 ASSERT(FAST_HOLEY_ELEMENTS == 3); 6949 ASSERT(FAST_HOLEY_ELEMENTS == 3);
6934 ASSERT(FAST_DOUBLE_ELEMENTS == 4); 6950 ASSERT(FAST_DOUBLE_ELEMENTS == 4);
6935 ASSERT(FAST_HOLEY_DOUBLE_ELEMENTS == 5); 6951 ASSERT(FAST_HOLEY_DOUBLE_ELEMENTS == 5);
6936 6952
6937 Handle<Object> undefined_sentinel(
6938 masm->isolate()->heap()->undefined_value(),
6939 masm->isolate());
6940
6941 // is the low bit set? If so, we are holey and that is good. 6953 // is the low bit set? If so, we are holey and that is good.
6942 __ tst(r3, Operand(1)); 6954 __ tst(r3, Operand(1));
6943 Label normal_sequence; 6955 Label normal_sequence;
6944 __ b(ne, &normal_sequence); 6956 __ b(ne, &normal_sequence);
6945 6957
6946 // look at the first argument 6958 // look at the first argument
6947 __ ldr(r5, MemOperand(sp, 0)); 6959 __ ldr(r5, MemOperand(sp, 0));
6948 __ cmp(r5, Operand::Zero()); 6960 __ cmp(r5, Operand::Zero());
6949 __ b(eq, &normal_sequence); 6961 __ b(eq, &normal_sequence);
6950 6962
6951 // We are going to create a holey array, but our kind is non-holey. 6963 // We are going to create a holey array, but our kind is non-holey.
6952 // Fix kind and retry 6964 // Fix kind and retry (only if we have an allocation site in the cell).
6953 __ add(r3, r3, Operand(1)); 6965 __ add(r3, r3, Operand(1));
6954 __ cmp(r2, Operand(undefined_sentinel)); 6966 __ CompareRoot(r2, Heap::kUndefinedValueRootIndex);
6955 __ b(eq, &normal_sequence); 6967 __ b(eq, &normal_sequence);
6956 6968 __ ldr(r5, FieldMemOperand(r2, Cell::kValueOffset));
6957 // The type cell may have gone megamorphic, don't overwrite if so 6969 __ ldr(r5, FieldMemOperand(r5, 0));
6958 __ ldr(r5, FieldMemOperand(r2, kPointerSize)); 6970 __ CompareRoot(r5, Heap::kAllocationSiteMapRootIndex);
6959 __ JumpIfNotSmi(r5, &normal_sequence); 6971 __ b(ne, &normal_sequence);
6960 6972
6961 // Save the resulting elements kind in type info 6973 // Save the resulting elements kind in type info
6962 __ SmiTag(r3); 6974 __ SmiTag(r3);
6963 __ str(r3, FieldMemOperand(r2, kPointerSize)); 6975 __ ldr(r5, FieldMemOperand(r2, Cell::kValueOffset));
6976 __ str(r3, FieldMemOperand(r5, AllocationSite::kPayloadOffset));
6964 __ SmiUntag(r3); 6977 __ SmiUntag(r3);
6965 6978
6966 __ bind(&normal_sequence); 6979 __ bind(&normal_sequence);
6967 int last_index = GetSequenceIndexFromFastElementsKind( 6980 int last_index = GetSequenceIndexFromFastElementsKind(
6968 TERMINAL_FAST_ELEMENTS_KIND); 6981 TERMINAL_FAST_ELEMENTS_KIND);
6969 for (int i = 0; i <= last_index; ++i) { 6982 for (int i = 0; i <= last_index; ++i) {
6970 Label next; 6983 Label next;
6971 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); 6984 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
6972 __ cmp(r3, Operand(kind)); 6985 __ cmp(r3, Operand(kind));
6973 __ b(ne, &next); 6986 __ b(ne, &next);
6974 ArraySingleArgumentConstructorStub stub(kind); 6987 ArraySingleArgumentConstructorStub stub(kind);
6975 __ TailCallStub(&stub); 6988 __ TailCallStub(&stub);
6976 __ bind(&next); 6989 __ bind(&next);
6977 } 6990 }
6978 6991
6979 // If we reached this point there is a problem. 6992 // If we reached this point there is a problem.
6980 __ Abort("Unexpected ElementsKind in array constructor"); 6993 __ Abort("Unexpected ElementsKind in array constructor");
6981 } 6994 }
6982 6995
6983 6996
6984 template<class T> 6997 template<class T>
6985 static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) { 6998 static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
6986 int to_index = GetSequenceIndexFromFastElementsKind( 6999 int to_index = GetSequenceIndexFromFastElementsKind(
6987 TERMINAL_FAST_ELEMENTS_KIND); 7000 TERMINAL_FAST_ELEMENTS_KIND);
6988 for (int i = 0; i <= to_index; ++i) { 7001 for (int i = 0; i <= to_index; ++i) {
6989 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i); 7002 ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
6990 T stub(kind); 7003 T stub(kind);
6991 stub.GetCode(isolate)->set_is_pregenerated(true); 7004 stub.GetCode(isolate)->set_is_pregenerated(true);
6992 if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) { 7005 if (AllocationSite::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
6993 T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES); 7006 T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
6994 stub1.GetCode(isolate)->set_is_pregenerated(true); 7007 stub1.GetCode(isolate)->set_is_pregenerated(true);
6995 } 7008 }
6996 } 7009 }
6997 } 7010 }
6998 7011
6999 7012
7000 void ArrayConstructorStubBase::GenerateStubsAheadOfTime(Isolate* isolate) { 7013 void ArrayConstructorStubBase::GenerateStubsAheadOfTime(Isolate* isolate) {
7001 ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>( 7014 ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>(
7002 isolate); 7015 isolate);
(...skipping 20 matching lines...) Expand all
7023 7036
7024 7037
7025 void ArrayConstructorStub::Generate(MacroAssembler* masm) { 7038 void ArrayConstructorStub::Generate(MacroAssembler* masm) {
7026 // ----------- S t a t e ------------- 7039 // ----------- S t a t e -------------
7027 // -- r0 : argc (only if argument_count_ == ANY) 7040 // -- r0 : argc (only if argument_count_ == ANY)
7028 // -- r1 : constructor 7041 // -- r1 : constructor
7029 // -- r2 : type info cell 7042 // -- r2 : type info cell
7030 // -- sp[0] : return address 7043 // -- sp[0] : return address
7031 // -- sp[4] : last argument 7044 // -- sp[4] : last argument
7032 // ----------------------------------- 7045 // -----------------------------------
7033 Handle<Object> undefined_sentinel(
7034 masm->isolate()->heap()->undefined_value(),
7035 masm->isolate());
7036
7037 if (FLAG_debug_code) { 7046 if (FLAG_debug_code) {
7038 // The array construct code is only set for the global and natives 7047 // The array construct code is only set for the global and natives
7039 // builtin Array functions which always have maps. 7048 // builtin Array functions which always have maps.
7040 7049
7041 // Initial map for the builtin Array function should be a map. 7050 // Initial map for the builtin Array function should be a map.
7042 __ ldr(r3, FieldMemOperand(r1, JSFunction::kPrototypeOrInitialMapOffset)); 7051 __ ldr(r3, FieldMemOperand(r1, JSFunction::kPrototypeOrInitialMapOffset));
7043 // Will both indicate a NULL and a Smi. 7052 // Will both indicate a NULL and a Smi.
7044 __ tst(r3, Operand(kSmiTagMask)); 7053 __ tst(r3, Operand(kSmiTagMask));
7045 __ Assert(ne, "Unexpected initial map for Array function"); 7054 __ Assert(ne, "Unexpected initial map for Array function");
7046 __ CompareObjectType(r3, r3, r4, MAP_TYPE); 7055 __ CompareObjectType(r3, r3, r4, MAP_TYPE);
7047 __ Assert(eq, "Unexpected initial map for Array function"); 7056 __ Assert(eq, "Unexpected initial map for Array function");
7048 7057
7049 // We should either have undefined in ebx or a valid cell 7058 // We should either have undefined in ebx or a valid cell
7050 Label okay_here; 7059 Label okay_here;
7051 Handle<Map> cell_map = masm->isolate()->factory()->cell_map(); 7060 Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
7052 __ cmp(r2, Operand(undefined_sentinel)); 7061 __ CompareRoot(r2, Heap::kUndefinedValueRootIndex);
7053 __ b(eq, &okay_here); 7062 __ b(eq, &okay_here);
7054 __ ldr(r3, FieldMemOperand(r2, 0)); 7063 __ ldr(r3, FieldMemOperand(r2, 0));
7055 __ cmp(r3, Operand(cell_map)); 7064 __ cmp(r3, Operand(cell_map));
7056 __ Assert(eq, "Expected property cell in register ebx"); 7065 __ Assert(eq, "Expected property cell in register ebx");
7057 __ bind(&okay_here); 7066 __ bind(&okay_here);
7058 } 7067 }
7059 7068
7060 Label no_info, switch_ready; 7069 Label no_info, switch_ready;
7061 // Get the elements kind and case on that. 7070 // Get the elements kind and case on that.
7062 __ cmp(r2, Operand(undefined_sentinel)); 7071 __ CompareRoot(r2, Heap::kUndefinedValueRootIndex);
7063 __ b(eq, &no_info); 7072 __ b(eq, &no_info);
7064 __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset)); 7073 __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset));
7065 __ JumpIfNotSmi(r3, &no_info); 7074
7075 // The type cell may have undefined in its value.
7076 __ CompareRoot(r3, Heap::kUndefinedValueRootIndex);
7077 __ b(eq, &no_info);
7078
7079 // We should have an allocation site object
7080 if (FLAG_debug_code) {
7081 __ push(r3);
7082 __ ldr(r3, FieldMemOperand(r3, 0));
7083 __ CompareRoot(r3, Heap::kAllocationSiteMapRootIndex);
7084 __ Assert(eq, "Expected AllocationSite object in register edx");
7085 }
7086
7087 __ ldr(r3, FieldMemOperand(r3, AllocationSite::kPayloadOffset));
7066 __ SmiUntag(r3); 7088 __ SmiUntag(r3);
7067 __ jmp(&switch_ready); 7089 __ jmp(&switch_ready);
7068 __ bind(&no_info); 7090 __ bind(&no_info);
7069 __ mov(r3, Operand(GetInitialFastElementsKind())); 7091 __ mov(r3, Operand(GetInitialFastElementsKind()));
7070 __ bind(&switch_ready); 7092 __ bind(&switch_ready);
7071 7093
7072 if (argument_count_ == ANY) { 7094 if (argument_count_ == ANY) {
7073 Label not_zero_case, not_one_case; 7095 Label not_zero_case, not_one_case;
7074 __ tst(r0, r0); 7096 __ tst(r0, r0);
7075 __ b(ne, &not_zero_case); 7097 __ b(ne, &not_zero_case);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
7177 __ bind(&fast_elements_case); 7199 __ bind(&fast_elements_case);
7178 GenerateCase(masm, FAST_ELEMENTS); 7200 GenerateCase(masm, FAST_ELEMENTS);
7179 } 7201 }
7180 7202
7181 7203
7182 #undef __ 7204 #undef __
7183 7205
7184 } } // namespace v8::internal 7206 } } // namespace v8::internal
7185 7207
7186 #endif // V8_TARGET_ARCH_ARM 7208 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/arm/ic-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698