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

Side by Side Diff: src/arm/stub-cache-arm.cc

Issue 8393003: Handlify simple functions of [keyed] store stub compiler. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/ia32/stub-cache-ia32.cc » ('j') | src/list-inl.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 __ mov(r0, scratch1); 418 __ mov(r0, scratch1);
419 __ Ret(); 419 __ Ret();
420 } 420 }
421 421
422 422
423 // Generate StoreField code, value is passed in r0 register. 423 // Generate StoreField code, value is passed in r0 register.
424 // When leaving generated code after success, the receiver_reg and name_reg 424 // When leaving generated code after success, the receiver_reg and name_reg
425 // may be clobbered. Upon branch to miss_label, the receiver and name 425 // may be clobbered. Upon branch to miss_label, the receiver and name
426 // registers have their original values. 426 // registers have their original values.
427 void StubCompiler::GenerateStoreField(MacroAssembler* masm, 427 void StubCompiler::GenerateStoreField(MacroAssembler* masm,
428 JSObject* object, 428 Handle<JSObject> object,
429 int index, 429 int index,
430 Map* transition, 430 Handle<Map> transition,
431 Register receiver_reg, 431 Register receiver_reg,
432 Register name_reg, 432 Register name_reg,
433 Register scratch, 433 Register scratch,
434 Label* miss_label) { 434 Label* miss_label) {
435 // r0 : value 435 // r0 : value
436 Label exit; 436 Label exit;
437 437
438 // Check that the receiver isn't a smi. 438 // Check that the receiver isn't a smi.
439 __ JumpIfSmi(receiver_reg, miss_label); 439 __ JumpIfSmi(receiver_reg, miss_label);
440 440
441 // Check that the map of the receiver hasn't changed. 441 // Check that the map of the receiver hasn't changed.
442 __ ldr(scratch, FieldMemOperand(receiver_reg, HeapObject::kMapOffset)); 442 __ ldr(scratch, FieldMemOperand(receiver_reg, HeapObject::kMapOffset));
443 __ cmp(scratch, Operand(Handle<Map>(object->map()))); 443 __ cmp(scratch, Operand(Handle<Map>(object->map())));
444 __ b(ne, miss_label); 444 __ b(ne, miss_label);
445 445
446 // Perform global security token check if needed. 446 // Perform global security token check if needed.
447 if (object->IsJSGlobalProxy()) { 447 if (object->IsJSGlobalProxy()) {
448 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label); 448 __ CheckAccessGlobalProxy(receiver_reg, scratch, miss_label);
449 } 449 }
450 450
451 // Stub never generated for non-global objects that require access 451 // Stub never generated for non-global objects that require access
452 // checks. 452 // checks.
453 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); 453 ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
454 454
455 // Perform map transition for the receiver if necessary. 455 // Perform map transition for the receiver if necessary.
456 if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) { 456 if (!transition.is_null() && (object->map()->unused_property_fields() == 0)) {
457 // The properties must be extended before we can store the value. 457 // The properties must be extended before we can store the value.
458 // We jump to a runtime call that extends the properties array. 458 // We jump to a runtime call that extends the properties array.
459 __ push(receiver_reg); 459 __ push(receiver_reg);
460 __ mov(r2, Operand(Handle<Map>(transition))); 460 __ mov(r2, Operand(transition));
461 __ Push(r2, r0); 461 __ Push(r2, r0);
462 __ TailCallExternalReference( 462 __ TailCallExternalReference(
463 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage), 463 ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage),
464 masm->isolate()), 464 masm->isolate()),
465 3, 465 3,
466 1); 466 1);
467 return; 467 return;
468 } 468 }
469 469
470 if (transition != NULL) { 470 if (!transition.is_null()) {
471 // Update the map of the object; no write barrier updating is 471 // Update the map of the object; no write barrier updating is
472 // needed because the map is never in new space. 472 // needed because the map is never in new space.
473 __ mov(ip, Operand(Handle<Map>(transition))); 473 __ mov(ip, Operand(transition));
474 __ str(ip, FieldMemOperand(receiver_reg, HeapObject::kMapOffset)); 474 __ str(ip, FieldMemOperand(receiver_reg, HeapObject::kMapOffset));
475 } 475 }
476 476
477 // Adjust for the number of properties stored in the object. Even in the 477 // Adjust for the number of properties stored in the object. Even in the
478 // face of a transition we can use the old map here because the size of the 478 // face of a transition we can use the old map here because the size of the
479 // object and the number of in-object properties is not going to change. 479 // object and the number of in-object properties is not going to change.
480 index -= object->map()->inobject_properties(); 480 index -= object->map()->inobject_properties();
481 481
482 if (index < 0) { 482 if (index < 0) {
483 // Set the property straight into the object. 483 // Set the property straight into the object.
(...skipping 2330 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 __ bind(&miss); 2814 __ bind(&miss);
2815 __ IncrementCounter(counters->call_global_inline_miss(), 1, r1, r3); 2815 __ IncrementCounter(counters->call_global_inline_miss(), 1, r1, r3);
2816 MaybeObject* maybe_result = TryGenerateMissBranch(); 2816 MaybeObject* maybe_result = TryGenerateMissBranch();
2817 if (maybe_result->IsFailure()) return maybe_result; 2817 if (maybe_result->IsFailure()) return maybe_result;
2818 2818
2819 // Return the generated code. 2819 // Return the generated code.
2820 return TryGetCode(NORMAL, name); 2820 return TryGetCode(NORMAL, name);
2821 } 2821 }
2822 2822
2823 2823
2824 MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object, 2824 Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object,
2825 int index, 2825 int index,
2826 Map* transition, 2826 Handle<Map> transition,
2827 String* name) { 2827 Handle<String> name) {
2828 // ----------- S t a t e ------------- 2828 // ----------- S t a t e -------------
2829 // -- r0 : value 2829 // -- r0 : value
2830 // -- r1 : receiver 2830 // -- r1 : receiver
2831 // -- r2 : name 2831 // -- r2 : name
2832 // -- lr : return address 2832 // -- lr : return address
2833 // ----------------------------------- 2833 // -----------------------------------
2834 Label miss; 2834 Label miss;
2835 2835
2836 GenerateStoreField(masm(), 2836 GenerateStoreField(masm(), object, index, transition, r1, r2, r3, &miss);
2837 object,
2838 index,
2839 transition,
2840 r1, r2, r3,
2841 &miss);
2842 __ bind(&miss); 2837 __ bind(&miss);
2843 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); 2838 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss();
2844 __ Jump(ic, RelocInfo::CODE_TARGET); 2839 __ Jump(ic, RelocInfo::CODE_TARGET);
2845 2840
2846 // Return the generated code. 2841 // Return the generated code.
2847 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 2842 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
2848 } 2843 }
2849 2844
2850 2845
2851 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, 2846 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
2852 AccessorInfo* callback, 2847 AccessorInfo* callback,
2853 String* name) { 2848 String* name) {
2854 // ----------- S t a t e ------------- 2849 // ----------- S t a t e -------------
2855 // -- r0 : value 2850 // -- r0 : value
2856 // -- r1 : receiver 2851 // -- r1 : receiver
2857 // -- r2 : name 2852 // -- r2 : name
(...skipping 27 matching lines...) Expand all
2885 ExternalReference(IC_Utility(IC::kStoreCallbackProperty), 2880 ExternalReference(IC_Utility(IC::kStoreCallbackProperty),
2886 masm()->isolate()); 2881 masm()->isolate());
2887 __ TailCallExternalReference(store_callback_property, 4, 1); 2882 __ TailCallExternalReference(store_callback_property, 4, 1);
2888 2883
2889 // Handle store cache miss. 2884 // Handle store cache miss.
2890 __ bind(&miss); 2885 __ bind(&miss);
2891 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); 2886 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss();
2892 __ Jump(ic, RelocInfo::CODE_TARGET); 2887 __ Jump(ic, RelocInfo::CODE_TARGET);
2893 2888
2894 // Return the generated code. 2889 // Return the generated code.
2895 return GetCode(CALLBACKS, name); 2890 return TryGetCode(CALLBACKS, name);
2896 } 2891 }
2897 2892
2898 2893
2899 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, 2894 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
2900 String* name) { 2895 String* name) {
2901 // ----------- S t a t e ------------- 2896 // ----------- S t a t e -------------
2902 // -- r0 : value 2897 // -- r0 : value
2903 // -- r1 : receiver 2898 // -- r1 : receiver
2904 // -- r2 : name 2899 // -- r2 : name
2905 // -- lr : return address 2900 // -- lr : return address
(...skipping 27 matching lines...) Expand all
2933 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty), 2928 ExternalReference(IC_Utility(IC::kStoreInterceptorProperty),
2934 masm()->isolate()); 2929 masm()->isolate());
2935 __ TailCallExternalReference(store_ic_property, 4, 1); 2930 __ TailCallExternalReference(store_ic_property, 4, 1);
2936 2931
2937 // Handle store cache miss. 2932 // Handle store cache miss.
2938 __ bind(&miss); 2933 __ bind(&miss);
2939 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss(); 2934 Handle<Code> ic = masm()->isolate()->builtins()->StoreIC_Miss();
2940 __ Jump(ic, RelocInfo::CODE_TARGET); 2935 __ Jump(ic, RelocInfo::CODE_TARGET);
2941 2936
2942 // Return the generated code. 2937 // Return the generated code.
2943 return GetCode(INTERCEPTOR, name); 2938 return TryGetCode(INTERCEPTOR, name);
2944 } 2939 }
2945 2940
2946 2941
2947 MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, 2942 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
2948 JSGlobalPropertyCell* cell, 2943 Handle<GlobalObject> object,
2949 String* name) { 2944 Handle<JSGlobalPropertyCell> cell,
2945 Handle<String> name) {
2950 // ----------- S t a t e ------------- 2946 // ----------- S t a t e -------------
2951 // -- r0 : value 2947 // -- r0 : value
2952 // -- r1 : receiver 2948 // -- r1 : receiver
2953 // -- r2 : name 2949 // -- r2 : name
2954 // -- lr : return address 2950 // -- lr : return address
2955 // ----------------------------------- 2951 // -----------------------------------
2956 Label miss; 2952 Label miss;
2957 2953
2958 // Check that the map of the global has not changed. 2954 // Check that the map of the global has not changed.
2959 __ ldr(r3, FieldMemOperand(r1, HeapObject::kMapOffset)); 2955 __ ldr(r3, FieldMemOperand(r1, HeapObject::kMapOffset));
2960 __ cmp(r3, Operand(Handle<Map>(object->map()))); 2956 __ cmp(r3, Operand(Handle<Map>(object->map())));
2961 __ b(ne, &miss); 2957 __ b(ne, &miss);
2962 2958
2963 // Check that the value in the cell is not the hole. If it is, this 2959 // Check that the value in the cell is not the hole. If it is, this
2964 // cell could have been deleted and reintroducing the global needs 2960 // cell could have been deleted and reintroducing the global needs
2965 // to update the property details in the property dictionary of the 2961 // to update the property details in the property dictionary of the
2966 // global object. We bail out to the runtime system to do that. 2962 // global object. We bail out to the runtime system to do that.
2967 __ mov(r4, Operand(Handle<JSGlobalPropertyCell>(cell))); 2963 __ mov(r4, Operand(cell));
2968 __ LoadRoot(r5, Heap::kTheHoleValueRootIndex); 2964 __ LoadRoot(r5, Heap::kTheHoleValueRootIndex);
2969 __ ldr(r6, FieldMemOperand(r4, JSGlobalPropertyCell::kValueOffset)); 2965 __ ldr(r6, FieldMemOperand(r4, JSGlobalPropertyCell::kValueOffset));
2970 __ cmp(r5, r6); 2966 __ cmp(r5, r6);
2971 __ b(eq, &miss); 2967 __ b(eq, &miss);
2972 2968
2973 // Store the value in the cell. 2969 // Store the value in the cell.
2974 __ str(r0, FieldMemOperand(r4, JSGlobalPropertyCell::kValueOffset)); 2970 __ str(r0, FieldMemOperand(r4, JSGlobalPropertyCell::kValueOffset));
2975 2971
2976 __ mov(r1, r0); 2972 __ mov(r1, r0);
2977 __ RecordWriteField(r4, 2973 __ RecordWriteField(r4,
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
3404 3400
3405 __ bind(&miss); 3401 __ bind(&miss);
3406 Handle<Code> miss_ic = isolate()->builtins()->KeyedLoadIC_Miss(); 3402 Handle<Code> miss_ic = isolate()->builtins()->KeyedLoadIC_Miss();
3407 __ Jump(miss_ic, RelocInfo::CODE_TARGET, al); 3403 __ Jump(miss_ic, RelocInfo::CODE_TARGET, al);
3408 3404
3409 // Return the generated code. 3405 // Return the generated code.
3410 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC); 3406 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC);
3411 } 3407 }
3412 3408
3413 3409
3414 MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, 3410 Handle<Code> KeyedStoreStubCompiler::CompileStoreField(Handle<JSObject> object,
3415 int index, 3411 int index,
3416 Map* transition, 3412 Handle<Map> transition,
3417 String* name) { 3413 Handle<String> name) {
3418 // ----------- S t a t e ------------- 3414 // ----------- S t a t e -------------
3419 // -- r0 : value 3415 // -- r0 : value
3420 // -- r1 : name 3416 // -- r1 : name
3421 // -- r2 : receiver 3417 // -- r2 : receiver
3422 // -- lr : return address 3418 // -- lr : return address
3423 // ----------------------------------- 3419 // -----------------------------------
3424 Label miss; 3420 Label miss;
3425 3421
3426 Counters* counters = masm()->isolate()->counters(); 3422 Counters* counters = masm()->isolate()->counters();
3427 __ IncrementCounter(counters->keyed_store_field(), 1, r3, r4); 3423 __ IncrementCounter(counters->keyed_store_field(), 1, r3, r4);
3428 3424
3429 // Check that the name has not changed. 3425 // Check that the name has not changed.
3430 __ cmp(r1, Operand(Handle<String>(name))); 3426 __ cmp(r1, Operand(name));
3431 __ b(ne, &miss); 3427 __ b(ne, &miss);
3432 3428
3433 // r3 is used as scratch register. r1 and r2 keep their values if a jump to 3429 // r3 is used as scratch register. r1 and r2 keep their values if a jump to
3434 // the miss label is generated. 3430 // the miss label is generated.
3435 GenerateStoreField(masm(), 3431 GenerateStoreField(masm(), object, index, transition, r2, r1, r3, &miss);
3436 object,
3437 index,
3438 transition,
3439 r2, r1, r3,
3440 &miss);
3441 __ bind(&miss); 3432 __ bind(&miss);
3442 3433
3443 __ DecrementCounter(counters->keyed_store_field(), 1, r3, r4); 3434 __ DecrementCounter(counters->keyed_store_field(), 1, r3, r4);
3444 Handle<Code> ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss(); 3435 Handle<Code> ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss();
3445 __ Jump(ic, RelocInfo::CODE_TARGET); 3436 __ Jump(ic, RelocInfo::CODE_TARGET);
3446 3437
3447 // Return the generated code. 3438 // Return the generated code.
3448 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); 3439 return GetCode(transition.is_null() ? FIELD : MAP_TRANSITION, name);
3449 } 3440 }
3450 3441
3451 3442
3452 MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map* receiver_map) { 3443 Handle<Code> KeyedStoreStubCompiler::CompileStoreElement(
3444 Handle<Map> receiver_map) {
3453 // ----------- S t a t e ------------- 3445 // ----------- S t a t e -------------
3454 // -- r0 : value 3446 // -- r0 : value
3455 // -- r1 : key 3447 // -- r1 : key
3456 // -- r2 : receiver 3448 // -- r2 : receiver
3457 // -- lr : return address 3449 // -- lr : return address
3458 // -- r3 : scratch 3450 // -- r3 : scratch
3459 // ----------------------------------- 3451 // -----------------------------------
3460 Code* stub;
3461 ElementsKind elements_kind = receiver_map->elements_kind(); 3452 ElementsKind elements_kind = receiver_map->elements_kind();
3462 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; 3453 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
3463 MaybeObject* maybe_stub = 3454 Handle<Code> stub =
3464 KeyedStoreElementStub(is_js_array, elements_kind).TryGetCode(); 3455 KeyedStoreElementStub(is_js_array, elements_kind).GetCode();
3465 if (!maybe_stub->To(&stub)) return maybe_stub; 3456
3466 __ DispatchMap(r2, 3457 __ DispatchMap(r2, r3, receiver_map, stub, DO_SMI_CHECK);
3467 r3,
3468 Handle<Map>(receiver_map),
3469 Handle<Code>(stub),
3470 DO_SMI_CHECK);
3471 3458
3472 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss(); 3459 Handle<Code> ic = isolate()->builtins()->KeyedStoreIC_Miss();
3473 __ Jump(ic, RelocInfo::CODE_TARGET); 3460 __ Jump(ic, RelocInfo::CODE_TARGET);
3474 3461
3475 // Return the generated code. 3462 // Return the generated code.
3476 return GetCode(NORMAL, NULL); 3463 return GetCode(NORMAL, factory()->empty_string());
3477 } 3464 }
3478 3465
3479 3466
3480 MaybeObject* KeyedStoreStubCompiler::CompileStorePolymorphic( 3467 Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic(
3481 MapList* receiver_maps, 3468 MapHandleList* receiver_maps,
3482 CodeList* handler_stubs, 3469 CodeHandleList* handler_stubs,
3483 MapList* transitioned_maps) { 3470 MapHandleList* transitioned_maps) {
3484 // ----------- S t a t e ------------- 3471 // ----------- S t a t e -------------
3485 // -- r0 : value 3472 // -- r0 : value
3486 // -- r1 : key 3473 // -- r1 : key
3487 // -- r2 : receiver 3474 // -- r2 : receiver
3488 // -- lr : return address 3475 // -- lr : return address
3489 // -- r3 : scratch 3476 // -- r3 : scratch
3490 // ----------------------------------- 3477 // -----------------------------------
3491 Label miss; 3478 Label miss;
3492 __ JumpIfSmi(r2, &miss); 3479 __ JumpIfSmi(r2, &miss);
3493 3480
3494 int receiver_count = receiver_maps->length(); 3481 int receiver_count = receiver_maps->length();
3495 __ ldr(r3, FieldMemOperand(r2, HeapObject::kMapOffset)); 3482 __ ldr(r3, FieldMemOperand(r2, HeapObject::kMapOffset));
3496 for (int i = 0; i < receiver_count; ++i) { 3483 for (int i = 0; i < receiver_count; ++i) {
3497 Handle<Map> map(receiver_maps->at(i)); 3484 __ mov(ip, Operand(receiver_maps->at(i)));
3498 Handle<Code> code(handler_stubs->at(i));
3499 __ mov(ip, Operand(map));
3500 __ cmp(r3, ip); 3485 __ cmp(r3, ip);
3501 if (transitioned_maps->at(i) == NULL) { 3486 if (transitioned_maps->at(i).is_null()) {
3502 __ Jump(code, RelocInfo::CODE_TARGET, eq); 3487 __ Jump(handler_stubs->at(i), RelocInfo::CODE_TARGET, eq);
3503 } else { 3488 } else {
3504 Label next_map; 3489 Label next_map;
3505 __ b(ne, &next_map); 3490 __ b(ne, &next_map);
3506 __ mov(r3, Operand(Handle<Map>(transitioned_maps->at(i)))); 3491 __ mov(r3, Operand(transitioned_maps->at(i)));
3507 __ Jump(code, RelocInfo::CODE_TARGET, al); 3492 __ Jump(handler_stubs->at(i), RelocInfo::CODE_TARGET, al);
3508 __ bind(&next_map); 3493 __ bind(&next_map);
3509 } 3494 }
3510 } 3495 }
3511 3496
3512 __ bind(&miss); 3497 __ bind(&miss);
3513 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss(); 3498 Handle<Code> miss_ic = isolate()->builtins()->KeyedStoreIC_Miss();
3514 __ Jump(miss_ic, RelocInfo::CODE_TARGET, al); 3499 __ Jump(miss_ic, RelocInfo::CODE_TARGET, al);
3515 3500
3516 // Return the generated code. 3501 // Return the generated code.
3517 return GetCode(NORMAL, NULL, MEGAMORPHIC); 3502 return GetCode(NORMAL, factory()->empty_string(), MEGAMORPHIC);
3518 } 3503 }
3519 3504
3520 3505
3521 MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) { 3506 MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) {
3522 // ----------- S t a t e ------------- 3507 // ----------- S t a t e -------------
3523 // -- r0 : argc 3508 // -- r0 : argc
3524 // -- r1 : constructor 3509 // -- r1 : constructor
3525 // -- lr : return address 3510 // -- lr : return address
3526 // -- [sp] : last argument 3511 // -- [sp] : last argument
3527 // ----------------------------------- 3512 // -----------------------------------
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after
4663 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss(); 4648 Handle<Code> ic_miss = masm->isolate()->builtins()->KeyedStoreIC_Miss();
4664 __ Jump(ic_miss, RelocInfo::CODE_TARGET); 4649 __ Jump(ic_miss, RelocInfo::CODE_TARGET);
4665 } 4650 }
4666 4651
4667 4652
4668 #undef __ 4653 #undef __
4669 4654
4670 } } // namespace v8::internal 4655 } } // namespace v8::internal
4671 4656
4672 #endif // V8_TARGET_ARCH_ARM 4657 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/ia32/stub-cache-ia32.cc » ('j') | src/list-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698