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

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

Issue 7849017: Mechanical refactor to move ElementsKind type out of JSObject. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: latest changes Created 9 years, 3 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 | « src/mips/macro-assembler-mips.cc ('k') | src/objects.h » ('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 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 3081 matching lines...) Expand 10 before | Expand all | Expand 10 after
3092 } 3092 }
3093 3093
3094 3094
3095 MaybeObject* KeyedLoadStubCompiler::CompileLoadElement(Map* receiver_map) { 3095 MaybeObject* KeyedLoadStubCompiler::CompileLoadElement(Map* receiver_map) {
3096 // ----------- S t a t e ------------- 3096 // ----------- S t a t e -------------
3097 // -- ra : return address 3097 // -- ra : return address
3098 // -- a0 : key 3098 // -- a0 : key
3099 // -- a1 : receiver 3099 // -- a1 : receiver
3100 // ----------------------------------- 3100 // -----------------------------------
3101 Code* stub; 3101 Code* stub;
3102 JSObject::ElementsKind elements_kind = receiver_map->elements_kind(); 3102 ElementsKind elements_kind = receiver_map->elements_kind();
3103 MaybeObject* maybe_stub = KeyedLoadElementStub(elements_kind).TryGetCode(); 3103 MaybeObject* maybe_stub = KeyedLoadElementStub(elements_kind).TryGetCode();
3104 if (!maybe_stub->To(&stub)) return maybe_stub; 3104 if (!maybe_stub->To(&stub)) return maybe_stub;
3105 __ DispatchMap(a1, 3105 __ DispatchMap(a1,
3106 a2, 3106 a2,
3107 Handle<Map>(receiver_map), 3107 Handle<Map>(receiver_map),
3108 Handle<Code>(stub), 3108 Handle<Code>(stub),
3109 DO_SMI_CHECK); 3109 DO_SMI_CHECK);
3110 3110
3111 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss(); 3111 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Miss();
3112 __ Jump(ic, RelocInfo::CODE_TARGET); 3112 __ Jump(ic, RelocInfo::CODE_TARGET);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
3184 3184
3185 MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map* receiver_map) { 3185 MaybeObject* KeyedStoreStubCompiler::CompileStoreElement(Map* receiver_map) {
3186 // ----------- S t a t e ------------- 3186 // ----------- S t a t e -------------
3187 // -- a0 : value 3187 // -- a0 : value
3188 // -- a1 : key 3188 // -- a1 : key
3189 // -- a2 : receiver 3189 // -- a2 : receiver
3190 // -- ra : return address 3190 // -- ra : return address
3191 // -- a3 : scratch 3191 // -- a3 : scratch
3192 // ----------------------------------- 3192 // -----------------------------------
3193 Code* stub; 3193 Code* stub;
3194 JSObject::ElementsKind elements_kind = receiver_map->elements_kind(); 3194 ElementsKind elements_kind = receiver_map->elements_kind();
3195 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; 3195 bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
3196 MaybeObject* maybe_stub = 3196 MaybeObject* maybe_stub =
3197 KeyedStoreElementStub(is_js_array, elements_kind).TryGetCode(); 3197 KeyedStoreElementStub(is_js_array, elements_kind).TryGetCode();
3198 if (!maybe_stub->To(&stub)) return maybe_stub; 3198 if (!maybe_stub->To(&stub)) return maybe_stub;
3199 __ DispatchMap(a2, 3199 __ DispatchMap(a2,
3200 a3, 3200 a3,
3201 Handle<Map>(receiver_map), 3201 Handle<Map>(receiver_map),
3202 Handle<Code>(stub), 3202 Handle<Code>(stub),
3203 DO_SMI_CHECK); 3203 DO_SMI_CHECK);
3204 3204
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
3435 // -- a0 : key 3435 // -- a0 : key
3436 // -- a1 : receiver 3436 // -- a1 : receiver
3437 // ----------------------------------- 3437 // -----------------------------------
3438 3438
3439 Handle<Code> miss_ic = 3439 Handle<Code> miss_ic =
3440 masm->isolate()->builtins()->KeyedLoadIC_MissForceGeneric(); 3440 masm->isolate()->builtins()->KeyedLoadIC_MissForceGeneric();
3441 __ Jump(miss_ic, RelocInfo::CODE_TARGET); 3441 __ Jump(miss_ic, RelocInfo::CODE_TARGET);
3442 } 3442 }
3443 3443
3444 3444
3445 static bool IsElementTypeSigned(JSObject::ElementsKind elements_kind) { 3445 static bool IsElementTypeSigned(ElementsKind elements_kind) {
3446 switch (elements_kind) { 3446 switch (elements_kind) {
3447 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3447 case EXTERNAL_BYTE_ELEMENTS:
3448 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3448 case EXTERNAL_SHORT_ELEMENTS:
3449 case JSObject::EXTERNAL_INT_ELEMENTS: 3449 case EXTERNAL_INT_ELEMENTS:
3450 return true; 3450 return true;
3451 3451
3452 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3452 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3453 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3453 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3454 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3454 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3455 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3455 case EXTERNAL_PIXEL_ELEMENTS:
3456 return false; 3456 return false;
3457 3457
3458 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3458 case EXTERNAL_FLOAT_ELEMENTS:
3459 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3459 case EXTERNAL_DOUBLE_ELEMENTS:
3460 case JSObject::FAST_ELEMENTS: 3460 case FAST_ELEMENTS:
3461 case JSObject::FAST_DOUBLE_ELEMENTS: 3461 case FAST_DOUBLE_ELEMENTS:
3462 case JSObject::DICTIONARY_ELEMENTS: 3462 case DICTIONARY_ELEMENTS:
3463 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3463 case NON_STRICT_ARGUMENTS_ELEMENTS:
3464 UNREACHABLE(); 3464 UNREACHABLE();
3465 return false; 3465 return false;
3466 } 3466 }
3467 return false; 3467 return false;
3468 } 3468 }
3469 3469
3470 3470
3471 void KeyedLoadStubCompiler::GenerateLoadExternalArray( 3471 void KeyedLoadStubCompiler::GenerateLoadExternalArray(
3472 MacroAssembler* masm, 3472 MacroAssembler* masm,
3473 JSObject::ElementsKind elements_kind) { 3473 ElementsKind elements_kind) {
3474 // ---------- S t a t e -------------- 3474 // ---------- S t a t e --------------
3475 // -- ra : return address 3475 // -- ra : return address
3476 // -- a0 : key 3476 // -- a0 : key
3477 // -- a1 : receiver 3477 // -- a1 : receiver
3478 // ----------------------------------- 3478 // -----------------------------------
3479 Label miss_force_generic, slow, failed_allocation; 3479 Label miss_force_generic, slow, failed_allocation;
3480 3480
3481 Register key = a0; 3481 Register key = a0;
3482 Register receiver = a1; 3482 Register receiver = a1;
3483 3483
(...skipping 14 matching lines...) Expand all
3498 3498
3499 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset)); 3499 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset));
3500 // a3: base pointer of external storage 3500 // a3: base pointer of external storage
3501 3501
3502 // We are not untagging smi key and instead work with it 3502 // We are not untagging smi key and instead work with it
3503 // as if it was premultiplied by 2. 3503 // as if it was premultiplied by 2.
3504 STATIC_ASSERT((kSmiTag == 0) && (kSmiTagSize == 1)); 3504 STATIC_ASSERT((kSmiTag == 0) && (kSmiTagSize == 1));
3505 3505
3506 Register value = a2; 3506 Register value = a2;
3507 switch (elements_kind) { 3507 switch (elements_kind) {
3508 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3508 case EXTERNAL_BYTE_ELEMENTS:
3509 __ srl(t2, key, 1); 3509 __ srl(t2, key, 1);
3510 __ addu(t3, a3, t2); 3510 __ addu(t3, a3, t2);
3511 __ lb(value, MemOperand(t3, 0)); 3511 __ lb(value, MemOperand(t3, 0));
3512 break; 3512 break;
3513 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3513 case EXTERNAL_PIXEL_ELEMENTS:
3514 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3514 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3515 __ srl(t2, key, 1); 3515 __ srl(t2, key, 1);
3516 __ addu(t3, a3, t2); 3516 __ addu(t3, a3, t2);
3517 __ lbu(value, MemOperand(t3, 0)); 3517 __ lbu(value, MemOperand(t3, 0));
3518 break; 3518 break;
3519 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3519 case EXTERNAL_SHORT_ELEMENTS:
3520 __ addu(t3, a3, key); 3520 __ addu(t3, a3, key);
3521 __ lh(value, MemOperand(t3, 0)); 3521 __ lh(value, MemOperand(t3, 0));
3522 break; 3522 break;
3523 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3523 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3524 __ addu(t3, a3, key); 3524 __ addu(t3, a3, key);
3525 __ lhu(value, MemOperand(t3, 0)); 3525 __ lhu(value, MemOperand(t3, 0));
3526 break; 3526 break;
3527 case JSObject::EXTERNAL_INT_ELEMENTS: 3527 case EXTERNAL_INT_ELEMENTS:
3528 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3528 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3529 __ sll(t2, key, 1); 3529 __ sll(t2, key, 1);
3530 __ addu(t3, a3, t2); 3530 __ addu(t3, a3, t2);
3531 __ lw(value, MemOperand(t3, 0)); 3531 __ lw(value, MemOperand(t3, 0));
3532 break; 3532 break;
3533 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3533 case EXTERNAL_FLOAT_ELEMENTS:
3534 __ sll(t3, t2, 2); 3534 __ sll(t3, t2, 2);
3535 __ addu(t3, a3, t3); 3535 __ addu(t3, a3, t3);
3536 if (CpuFeatures::IsSupported(FPU)) { 3536 if (CpuFeatures::IsSupported(FPU)) {
3537 CpuFeatures::Scope scope(FPU); 3537 CpuFeatures::Scope scope(FPU);
3538 __ lwc1(f0, MemOperand(t3, 0)); 3538 __ lwc1(f0, MemOperand(t3, 0));
3539 } else { 3539 } else {
3540 __ lw(value, MemOperand(t3, 0)); 3540 __ lw(value, MemOperand(t3, 0));
3541 } 3541 }
3542 break; 3542 break;
3543 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3543 case EXTERNAL_DOUBLE_ELEMENTS:
3544 __ sll(t2, key, 2); 3544 __ sll(t2, key, 2);
3545 __ addu(t3, a3, t2); 3545 __ addu(t3, a3, t2);
3546 if (CpuFeatures::IsSupported(FPU)) { 3546 if (CpuFeatures::IsSupported(FPU)) {
3547 CpuFeatures::Scope scope(FPU); 3547 CpuFeatures::Scope scope(FPU);
3548 __ ldc1(f0, MemOperand(t3, 0)); 3548 __ ldc1(f0, MemOperand(t3, 0));
3549 } else { 3549 } else {
3550 // t3: pointer to the beginning of the double we want to load. 3550 // t3: pointer to the beginning of the double we want to load.
3551 __ lw(a2, MemOperand(t3, 0)); 3551 __ lw(a2, MemOperand(t3, 0));
3552 __ lw(a3, MemOperand(t3, Register::kSizeInBytes)); 3552 __ lw(a3, MemOperand(t3, Register::kSizeInBytes));
3553 } 3553 }
3554 break; 3554 break;
3555 case JSObject::FAST_ELEMENTS: 3555 case FAST_ELEMENTS:
3556 case JSObject::FAST_DOUBLE_ELEMENTS: 3556 case FAST_DOUBLE_ELEMENTS:
3557 case JSObject::DICTIONARY_ELEMENTS: 3557 case DICTIONARY_ELEMENTS:
3558 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3558 case NON_STRICT_ARGUMENTS_ELEMENTS:
3559 UNREACHABLE(); 3559 UNREACHABLE();
3560 break; 3560 break;
3561 } 3561 }
3562 3562
3563 // For integer array types: 3563 // For integer array types:
3564 // a2: value 3564 // a2: value
3565 // For float array type: 3565 // For float array type:
3566 // f0: value (if FPU is supported) 3566 // f0: value (if FPU is supported)
3567 // a2: value (if FPU is not supported) 3567 // a2: value (if FPU is not supported)
3568 // For double array type: 3568 // For double array type:
3569 // f0: value (if FPU is supported) 3569 // f0: value (if FPU is supported)
3570 // a2/a3: value (if FPU is not supported) 3570 // a2/a3: value (if FPU is not supported)
3571 3571
3572 if (elements_kind == JSObject::EXTERNAL_INT_ELEMENTS) { 3572 if (elements_kind == EXTERNAL_INT_ELEMENTS) {
3573 // For the Int and UnsignedInt array types, we need to see whether 3573 // For the Int and UnsignedInt array types, we need to see whether
3574 // the value can be represented in a Smi. If not, we need to convert 3574 // the value can be represented in a Smi. If not, we need to convert
3575 // it to a HeapNumber. 3575 // it to a HeapNumber.
3576 Label box_int; 3576 Label box_int;
3577 __ Subu(t3, value, Operand(0xC0000000)); // Non-smi value gives neg result. 3577 __ Subu(t3, value, Operand(0xC0000000)); // Non-smi value gives neg result.
3578 __ Branch(&box_int, lt, t3, Operand(zero_reg)); 3578 __ Branch(&box_int, lt, t3, Operand(zero_reg));
3579 // Tag integer as smi and return it. 3579 // Tag integer as smi and return it.
3580 __ sll(v0, value, kSmiTagSize); 3580 __ sll(v0, value, kSmiTagSize);
3581 __ Ret(); 3581 __ Ret();
3582 3582
(...skipping 21 matching lines...) Expand all
3604 dest, 3604 dest,
3605 f0, 3605 f0,
3606 dst1, 3606 dst1,
3607 dst2, 3607 dst2,
3608 t1, 3608 t1,
3609 f2); 3609 f2);
3610 __ sw(dst1, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); 3610 __ sw(dst1, FieldMemOperand(v0, HeapNumber::kMantissaOffset));
3611 __ sw(dst2, FieldMemOperand(v0, HeapNumber::kExponentOffset)); 3611 __ sw(dst2, FieldMemOperand(v0, HeapNumber::kExponentOffset));
3612 __ Ret(); 3612 __ Ret();
3613 } 3613 }
3614 } else if (elements_kind == JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS) { 3614 } else if (elements_kind == EXTERNAL_UNSIGNED_INT_ELEMENTS) {
3615 // The test is different for unsigned int values. Since we need 3615 // The test is different for unsigned int values. Since we need
3616 // the value to be in the range of a positive smi, we can't 3616 // the value to be in the range of a positive smi, we can't
3617 // handle either of the top two bits being set in the value. 3617 // handle either of the top two bits being set in the value.
3618 if (CpuFeatures::IsSupported(FPU)) { 3618 if (CpuFeatures::IsSupported(FPU)) {
3619 CpuFeatures::Scope scope(FPU); 3619 CpuFeatures::Scope scope(FPU);
3620 Label pl_box_int; 3620 Label pl_box_int;
3621 __ And(t2, value, Operand(0xC0000000)); 3621 __ And(t2, value, Operand(0xC0000000));
3622 __ Branch(&pl_box_int, ne, t2, Operand(zero_reg)); 3622 __ Branch(&pl_box_int, ne, t2, Operand(zero_reg));
3623 3623
3624 // It can fit in an Smi. 3624 // It can fit in an Smi.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3675 // space. 3675 // space.
3676 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex); 3676 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex);
3677 __ AllocateHeapNumber(t2, t3, t5, t6, &slow); 3677 __ AllocateHeapNumber(t2, t3, t5, t6, &slow);
3678 3678
3679 __ sw(hiword, FieldMemOperand(t2, HeapNumber::kExponentOffset)); 3679 __ sw(hiword, FieldMemOperand(t2, HeapNumber::kExponentOffset));
3680 __ sw(loword, FieldMemOperand(t2, HeapNumber::kMantissaOffset)); 3680 __ sw(loword, FieldMemOperand(t2, HeapNumber::kMantissaOffset));
3681 3681
3682 __ mov(v0, t2); 3682 __ mov(v0, t2);
3683 __ Ret(); 3683 __ Ret();
3684 } 3684 }
3685 } else if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 3685 } else if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) {
3686 // For the floating-point array type, we need to always allocate a 3686 // For the floating-point array type, we need to always allocate a
3687 // HeapNumber. 3687 // HeapNumber.
3688 if (CpuFeatures::IsSupported(FPU)) { 3688 if (CpuFeatures::IsSupported(FPU)) {
3689 CpuFeatures::Scope scope(FPU); 3689 CpuFeatures::Scope scope(FPU);
3690 // Allocate a HeapNumber for the result. Don't use a0 and a1 as 3690 // Allocate a HeapNumber for the result. Don't use a0 and a1 as
3691 // AllocateHeapNumber clobbers all registers - also when jumping due to 3691 // AllocateHeapNumber clobbers all registers - also when jumping due to
3692 // exhausted young space. 3692 // exhausted young space.
3693 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex); 3693 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex);
3694 __ AllocateHeapNumber(v0, t3, t5, t6, &slow); 3694 __ AllocateHeapNumber(v0, t3, t5, t6, &slow);
3695 // The float (single) value is already in fpu reg f0 (if we use float). 3695 // The float (single) value is already in fpu reg f0 (if we use float).
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3742 3742
3743 __ srl(t0, t4, kMantissaShiftForHiWord); 3743 __ srl(t0, t4, kMantissaShiftForHiWord);
3744 __ or_(a2, a2, t0); 3744 __ or_(a2, a2, t0);
3745 __ sll(a0, t4, kMantissaShiftForLoWord); 3745 __ sll(a0, t4, kMantissaShiftForLoWord);
3746 3746
3747 __ sw(a2, FieldMemOperand(v0, HeapNumber::kExponentOffset)); 3747 __ sw(a2, FieldMemOperand(v0, HeapNumber::kExponentOffset));
3748 __ sw(a0, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); 3748 __ sw(a0, FieldMemOperand(v0, HeapNumber::kMantissaOffset));
3749 __ Ret(); 3749 __ Ret();
3750 } 3750 }
3751 3751
3752 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 3752 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
3753 if (CpuFeatures::IsSupported(FPU)) { 3753 if (CpuFeatures::IsSupported(FPU)) {
3754 CpuFeatures::Scope scope(FPU); 3754 CpuFeatures::Scope scope(FPU);
3755 // Allocate a HeapNumber for the result. Don't use a0 and a1 as 3755 // Allocate a HeapNumber for the result. Don't use a0 and a1 as
3756 // AllocateHeapNumber clobbers all registers - also when jumping due to 3756 // AllocateHeapNumber clobbers all registers - also when jumping due to
3757 // exhausted young space. 3757 // exhausted young space.
3758 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex); 3758 __ LoadRoot(t6, Heap::kHeapNumberMapRootIndex);
3759 __ AllocateHeapNumber(v0, t3, t5, t6, &slow); 3759 __ AllocateHeapNumber(v0, t3, t5, t6, &slow);
3760 // The double value is already in f0 3760 // The double value is already in f0
3761 __ sdc1(f0, FieldMemOperand(v0, HeapNumber::kValueOffset)); 3761 __ sdc1(f0, FieldMemOperand(v0, HeapNumber::kValueOffset));
3762 __ Ret(); 3762 __ Ret();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3796 3796
3797 __ bind(&miss_force_generic); 3797 __ bind(&miss_force_generic);
3798 Code* stub = masm->isolate()->builtins()->builtin( 3798 Code* stub = masm->isolate()->builtins()->builtin(
3799 Builtins::kKeyedLoadIC_MissForceGeneric); 3799 Builtins::kKeyedLoadIC_MissForceGeneric);
3800 __ Jump(Handle<Code>(stub), RelocInfo::CODE_TARGET); 3800 __ Jump(Handle<Code>(stub), RelocInfo::CODE_TARGET);
3801 } 3801 }
3802 3802
3803 3803
3804 void KeyedStoreStubCompiler::GenerateStoreExternalArray( 3804 void KeyedStoreStubCompiler::GenerateStoreExternalArray(
3805 MacroAssembler* masm, 3805 MacroAssembler* masm,
3806 JSObject::ElementsKind elements_kind) { 3806 ElementsKind elements_kind) {
3807 // ---------- S t a t e -------------- 3807 // ---------- S t a t e --------------
3808 // -- a0 : value 3808 // -- a0 : value
3809 // -- a1 : key 3809 // -- a1 : key
3810 // -- a2 : receiver 3810 // -- a2 : receiver
3811 // -- ra : return address 3811 // -- ra : return address
3812 // ----------------------------------- 3812 // -----------------------------------
3813 3813
3814 Label slow, check_heap_number, miss_force_generic; 3814 Label slow, check_heap_number, miss_force_generic;
3815 3815
3816 // Register usage. 3816 // Register usage.
(...skipping 14 matching lines...) Expand all
3831 __ SmiUntag(t0, key); 3831 __ SmiUntag(t0, key);
3832 __ lw(t1, FieldMemOperand(a3, ExternalArray::kLengthOffset)); 3832 __ lw(t1, FieldMemOperand(a3, ExternalArray::kLengthOffset));
3833 // Unsigned comparison catches both negative and too-large values. 3833 // Unsigned comparison catches both negative and too-large values.
3834 __ Branch(&miss_force_generic, Ugreater_equal, key, Operand(t1)); 3834 __ Branch(&miss_force_generic, Ugreater_equal, key, Operand(t1));
3835 3835
3836 // Handle both smis and HeapNumbers in the fast path. Go to the 3836 // Handle both smis and HeapNumbers in the fast path. Go to the
3837 // runtime for all other kinds of values. 3837 // runtime for all other kinds of values.
3838 // a3: external array. 3838 // a3: external array.
3839 // t0: key (integer). 3839 // t0: key (integer).
3840 3840
3841 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3841 if (elements_kind == EXTERNAL_PIXEL_ELEMENTS) {
3842 // Double to pixel conversion is only implemented in the runtime for now. 3842 // Double to pixel conversion is only implemented in the runtime for now.
3843 __ JumpIfNotSmi(value, &slow); 3843 __ JumpIfNotSmi(value, &slow);
3844 } else { 3844 } else {
3845 __ JumpIfNotSmi(value, &check_heap_number); 3845 __ JumpIfNotSmi(value, &check_heap_number);
3846 } 3846 }
3847 __ SmiUntag(t1, value); 3847 __ SmiUntag(t1, value);
3848 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset)); 3848 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset));
3849 3849
3850 // a3: base pointer of external storage. 3850 // a3: base pointer of external storage.
3851 // t0: key (integer). 3851 // t0: key (integer).
3852 // t1: value (integer). 3852 // t1: value (integer).
3853 3853
3854 switch (elements_kind) { 3854 switch (elements_kind) {
3855 case JSObject::EXTERNAL_PIXEL_ELEMENTS: { 3855 case EXTERNAL_PIXEL_ELEMENTS: {
3856 // Clamp the value to [0..255]. 3856 // Clamp the value to [0..255].
3857 // v0 is used as a scratch register here. 3857 // v0 is used as a scratch register here.
3858 Label done; 3858 Label done;
3859 __ li(v0, Operand(255)); 3859 __ li(v0, Operand(255));
3860 // Normal branch: nop in delay slot. 3860 // Normal branch: nop in delay slot.
3861 __ Branch(&done, gt, t1, Operand(v0)); 3861 __ Branch(&done, gt, t1, Operand(v0));
3862 // Use delay slot in this branch. 3862 // Use delay slot in this branch.
3863 __ Branch(USE_DELAY_SLOT, &done, lt, t1, Operand(zero_reg)); 3863 __ Branch(USE_DELAY_SLOT, &done, lt, t1, Operand(zero_reg));
3864 __ mov(v0, zero_reg); // In delay slot. 3864 __ mov(v0, zero_reg); // In delay slot.
3865 __ mov(v0, t1); // Value is in range 0..255. 3865 __ mov(v0, t1); // Value is in range 0..255.
3866 __ bind(&done); 3866 __ bind(&done);
3867 __ mov(t1, v0); 3867 __ mov(t1, v0);
3868 __ addu(t8, a3, t0); 3868 __ addu(t8, a3, t0);
3869 __ sb(t1, MemOperand(t8, 0)); 3869 __ sb(t1, MemOperand(t8, 0));
3870 } 3870 }
3871 break; 3871 break;
3872 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3872 case EXTERNAL_BYTE_ELEMENTS:
3873 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3873 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3874 __ addu(t8, a3, t0); 3874 __ addu(t8, a3, t0);
3875 __ sb(t1, MemOperand(t8, 0)); 3875 __ sb(t1, MemOperand(t8, 0));
3876 break; 3876 break;
3877 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3877 case EXTERNAL_SHORT_ELEMENTS:
3878 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3878 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3879 __ sll(t8, t0, 1); 3879 __ sll(t8, t0, 1);
3880 __ addu(t8, a3, t8); 3880 __ addu(t8, a3, t8);
3881 __ sh(t1, MemOperand(t8, 0)); 3881 __ sh(t1, MemOperand(t8, 0));
3882 break; 3882 break;
3883 case JSObject::EXTERNAL_INT_ELEMENTS: 3883 case EXTERNAL_INT_ELEMENTS:
3884 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3884 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3885 __ sll(t8, t0, 2); 3885 __ sll(t8, t0, 2);
3886 __ addu(t8, a3, t8); 3886 __ addu(t8, a3, t8);
3887 __ sw(t1, MemOperand(t8, 0)); 3887 __ sw(t1, MemOperand(t8, 0));
3888 break; 3888 break;
3889 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3889 case EXTERNAL_FLOAT_ELEMENTS:
3890 // Perform int-to-float conversion and store to memory. 3890 // Perform int-to-float conversion and store to memory.
3891 StoreIntAsFloat(masm, a3, t0, t1, t2, t3, t4); 3891 StoreIntAsFloat(masm, a3, t0, t1, t2, t3, t4);
3892 break; 3892 break;
3893 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3893 case EXTERNAL_DOUBLE_ELEMENTS:
3894 __ sll(t8, t0, 3); 3894 __ sll(t8, t0, 3);
3895 __ addu(a3, a3, t8); 3895 __ addu(a3, a3, t8);
3896 // a3: effective address of the double element 3896 // a3: effective address of the double element
3897 FloatingPointHelper::Destination destination; 3897 FloatingPointHelper::Destination destination;
3898 if (CpuFeatures::IsSupported(FPU)) { 3898 if (CpuFeatures::IsSupported(FPU)) {
3899 destination = FloatingPointHelper::kFPURegisters; 3899 destination = FloatingPointHelper::kFPURegisters;
3900 } else { 3900 } else {
3901 destination = FloatingPointHelper::kCoreRegisters; 3901 destination = FloatingPointHelper::kCoreRegisters;
3902 } 3902 }
3903 FloatingPointHelper::ConvertIntToDouble( 3903 FloatingPointHelper::ConvertIntToDouble(
3904 masm, t1, destination, 3904 masm, t1, destination,
3905 f0, t2, t3, // These are: double_dst, dst1, dst2. 3905 f0, t2, t3, // These are: double_dst, dst1, dst2.
3906 t0, f2); // These are: scratch2, single_scratch. 3906 t0, f2); // These are: scratch2, single_scratch.
3907 if (destination == FloatingPointHelper::kFPURegisters) { 3907 if (destination == FloatingPointHelper::kFPURegisters) {
3908 CpuFeatures::Scope scope(FPU); 3908 CpuFeatures::Scope scope(FPU);
3909 __ sdc1(f0, MemOperand(a3, 0)); 3909 __ sdc1(f0, MemOperand(a3, 0));
3910 } else { 3910 } else {
3911 __ sw(t2, MemOperand(a3, 0)); 3911 __ sw(t2, MemOperand(a3, 0));
3912 __ sw(t3, MemOperand(a3, Register::kSizeInBytes)); 3912 __ sw(t3, MemOperand(a3, Register::kSizeInBytes));
3913 } 3913 }
3914 break; 3914 break;
3915 case JSObject::FAST_ELEMENTS: 3915 case FAST_ELEMENTS:
3916 case JSObject::FAST_DOUBLE_ELEMENTS: 3916 case FAST_DOUBLE_ELEMENTS:
3917 case JSObject::DICTIONARY_ELEMENTS: 3917 case DICTIONARY_ELEMENTS:
3918 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3918 case NON_STRICT_ARGUMENTS_ELEMENTS:
3919 UNREACHABLE(); 3919 UNREACHABLE();
3920 break; 3920 break;
3921 } 3921 }
3922 3922
3923 // Entry registers are intact, a0 holds the value which is the return value. 3923 // Entry registers are intact, a0 holds the value which is the return value.
3924 __ mov(v0, value); 3924 __ mov(v0, value);
3925 __ Ret(); 3925 __ Ret();
3926 3926
3927 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3927 if (elements_kind != EXTERNAL_PIXEL_ELEMENTS) {
3928 // a3: external array. 3928 // a3: external array.
3929 // t0: index (integer). 3929 // t0: index (integer).
3930 __ bind(&check_heap_number); 3930 __ bind(&check_heap_number);
3931 __ GetObjectType(value, t1, t2); 3931 __ GetObjectType(value, t1, t2);
3932 __ Branch(&slow, ne, t2, Operand(HEAP_NUMBER_TYPE)); 3932 __ Branch(&slow, ne, t2, Operand(HEAP_NUMBER_TYPE));
3933 3933
3934 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset)); 3934 __ lw(a3, FieldMemOperand(a3, ExternalArray::kExternalPointerOffset));
3935 3935
3936 // a3: base pointer of external storage. 3936 // a3: base pointer of external storage.
3937 // t0: key (integer). 3937 // t0: key (integer).
3938 3938
3939 // The WebGL specification leaves the behavior of storing NaN and 3939 // The WebGL specification leaves the behavior of storing NaN and
3940 // +/-Infinity into integer arrays basically undefined. For more 3940 // +/-Infinity into integer arrays basically undefined. For more
3941 // reproducible behavior, convert these to zero. 3941 // reproducible behavior, convert these to zero.
3942 3942
3943 if (CpuFeatures::IsSupported(FPU)) { 3943 if (CpuFeatures::IsSupported(FPU)) {
3944 CpuFeatures::Scope scope(FPU); 3944 CpuFeatures::Scope scope(FPU);
3945 3945
3946 __ ldc1(f0, FieldMemOperand(a0, HeapNumber::kValueOffset)); 3946 __ ldc1(f0, FieldMemOperand(a0, HeapNumber::kValueOffset));
3947 3947
3948 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 3948 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) {
3949 __ cvt_s_d(f0, f0); 3949 __ cvt_s_d(f0, f0);
3950 __ sll(t8, t0, 2); 3950 __ sll(t8, t0, 2);
3951 __ addu(t8, a3, t8); 3951 __ addu(t8, a3, t8);
3952 __ swc1(f0, MemOperand(t8, 0)); 3952 __ swc1(f0, MemOperand(t8, 0));
3953 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 3953 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
3954 __ sll(t8, t0, 3); 3954 __ sll(t8, t0, 3);
3955 __ addu(t8, a3, t8); 3955 __ addu(t8, a3, t8);
3956 __ sdc1(f0, MemOperand(t8, 0)); 3956 __ sdc1(f0, MemOperand(t8, 0));
3957 } else { 3957 } else {
3958 __ EmitECMATruncate(t3, f0, f2, t2, t1, t5); 3958 __ EmitECMATruncate(t3, f0, f2, t2, t1, t5);
3959 3959
3960 switch (elements_kind) { 3960 switch (elements_kind) {
3961 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3961 case EXTERNAL_BYTE_ELEMENTS:
3962 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3962 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3963 __ addu(t8, a3, t0); 3963 __ addu(t8, a3, t0);
3964 __ sb(t3, MemOperand(t8, 0)); 3964 __ sb(t3, MemOperand(t8, 0));
3965 break; 3965 break;
3966 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3966 case EXTERNAL_SHORT_ELEMENTS:
3967 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3967 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3968 __ sll(t8, t0, 1); 3968 __ sll(t8, t0, 1);
3969 __ addu(t8, a3, t8); 3969 __ addu(t8, a3, t8);
3970 __ sh(t3, MemOperand(t8, 0)); 3970 __ sh(t3, MemOperand(t8, 0));
3971 break; 3971 break;
3972 case JSObject::EXTERNAL_INT_ELEMENTS: 3972 case EXTERNAL_INT_ELEMENTS:
3973 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3973 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
3974 __ sll(t8, t0, 2); 3974 __ sll(t8, t0, 2);
3975 __ addu(t8, a3, t8); 3975 __ addu(t8, a3, t8);
3976 __ sw(t3, MemOperand(t8, 0)); 3976 __ sw(t3, MemOperand(t8, 0));
3977 break; 3977 break;
3978 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3978 case EXTERNAL_PIXEL_ELEMENTS:
3979 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3979 case EXTERNAL_FLOAT_ELEMENTS:
3980 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3980 case EXTERNAL_DOUBLE_ELEMENTS:
3981 case JSObject::FAST_ELEMENTS: 3981 case FAST_ELEMENTS:
3982 case JSObject::FAST_DOUBLE_ELEMENTS: 3982 case FAST_DOUBLE_ELEMENTS:
3983 case JSObject::DICTIONARY_ELEMENTS: 3983 case DICTIONARY_ELEMENTS:
3984 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3984 case NON_STRICT_ARGUMENTS_ELEMENTS:
3985 UNREACHABLE(); 3985 UNREACHABLE();
3986 break; 3986 break;
3987 } 3987 }
3988 } 3988 }
3989 3989
3990 // Entry registers are intact, a0 holds the value 3990 // Entry registers are intact, a0 holds the value
3991 // which is the return value. 3991 // which is the return value.
3992 __ mov(v0, value); 3992 __ mov(v0, value);
3993 __ Ret(); 3993 __ Ret();
3994 } else { 3994 } else {
3995 // FPU is not available, do manual conversions. 3995 // FPU is not available, do manual conversions.
3996 3996
3997 __ lw(t3, FieldMemOperand(value, HeapNumber::kExponentOffset)); 3997 __ lw(t3, FieldMemOperand(value, HeapNumber::kExponentOffset));
3998 __ lw(t4, FieldMemOperand(value, HeapNumber::kMantissaOffset)); 3998 __ lw(t4, FieldMemOperand(value, HeapNumber::kMantissaOffset));
3999 3999
4000 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 4000 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) {
4001 Label done, nan_or_infinity_or_zero; 4001 Label done, nan_or_infinity_or_zero;
4002 static const int kMantissaInHiWordShift = 4002 static const int kMantissaInHiWordShift =
4003 kBinary32MantissaBits - HeapNumber::kMantissaBitsInTopWord; 4003 kBinary32MantissaBits - HeapNumber::kMantissaBitsInTopWord;
4004 4004
4005 static const int kMantissaInLoWordShift = 4005 static const int kMantissaInLoWordShift =
4006 kBitsPerInt - kMantissaInHiWordShift; 4006 kBitsPerInt - kMantissaInHiWordShift;
4007 4007
4008 // Test for all special exponent values: zeros, subnormal numbers, NaNs 4008 // Test for all special exponent values: zeros, subnormal numbers, NaNs
4009 // and infinities. All these should be converted to 0. 4009 // and infinities. All these should be converted to 0.
4010 __ li(t5, HeapNumber::kExponentMask); 4010 __ li(t5, HeapNumber::kExponentMask);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4055 4055
4056 __ bind(&nan_or_infinity_or_zero); 4056 __ bind(&nan_or_infinity_or_zero);
4057 __ And(t7, t3, Operand(HeapNumber::kSignMask)); 4057 __ And(t7, t3, Operand(HeapNumber::kSignMask));
4058 __ And(t3, t3, Operand(HeapNumber::kMantissaMask)); 4058 __ And(t3, t3, Operand(HeapNumber::kMantissaMask));
4059 __ or_(t6, t6, t7); 4059 __ or_(t6, t6, t7);
4060 __ sll(t3, t3, kMantissaInHiWordShift); 4060 __ sll(t3, t3, kMantissaInHiWordShift);
4061 __ or_(t6, t6, t3); 4061 __ or_(t6, t6, t3);
4062 __ srl(t4, t4, kMantissaInLoWordShift); 4062 __ srl(t4, t4, kMantissaInLoWordShift);
4063 __ or_(t3, t6, t4); 4063 __ or_(t3, t6, t4);
4064 __ Branch(&done); 4064 __ Branch(&done);
4065 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 4065 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
4066 __ sll(t8, t0, 3); 4066 __ sll(t8, t0, 3);
4067 __ addu(t8, a3, t8); 4067 __ addu(t8, a3, t8);
4068 // t8: effective address of destination element. 4068 // t8: effective address of destination element.
4069 __ sw(t4, MemOperand(t8, 0)); 4069 __ sw(t4, MemOperand(t8, 0));
4070 __ sw(t3, MemOperand(t8, Register::kSizeInBytes)); 4070 __ sw(t3, MemOperand(t8, Register::kSizeInBytes));
4071 __ Ret(); 4071 __ Ret();
4072 } else { 4072 } else {
4073 bool is_signed_type = IsElementTypeSigned(elements_kind); 4073 bool is_signed_type = IsElementTypeSigned(elements_kind);
4074 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt; 4074 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt;
4075 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000; 4075 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4121 4121
4122 __ bind(&sign); 4122 __ bind(&sign);
4123 __ subu(t2, t3, zero_reg); 4123 __ subu(t2, t3, zero_reg);
4124 __ movz(t3, t2, t5); // Only if t5 is zero. 4124 __ movz(t3, t2, t5); // Only if t5 is zero.
4125 4125
4126 __ bind(&done); 4126 __ bind(&done);
4127 4127
4128 // Result is in t3. 4128 // Result is in t3.
4129 // This switch block should be exactly the same as above (FPU mode). 4129 // This switch block should be exactly the same as above (FPU mode).
4130 switch (elements_kind) { 4130 switch (elements_kind) {
4131 case JSObject::EXTERNAL_BYTE_ELEMENTS: 4131 case EXTERNAL_BYTE_ELEMENTS:
4132 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 4132 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
4133 __ addu(t8, a3, t0); 4133 __ addu(t8, a3, t0);
4134 __ sb(t3, MemOperand(t8, 0)); 4134 __ sb(t3, MemOperand(t8, 0));
4135 break; 4135 break;
4136 case JSObject::EXTERNAL_SHORT_ELEMENTS: 4136 case EXTERNAL_SHORT_ELEMENTS:
4137 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 4137 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
4138 __ sll(t8, t0, 1); 4138 __ sll(t8, t0, 1);
4139 __ addu(t8, a3, t8); 4139 __ addu(t8, a3, t8);
4140 __ sh(t3, MemOperand(t8, 0)); 4140 __ sh(t3, MemOperand(t8, 0));
4141 break; 4141 break;
4142 case JSObject::EXTERNAL_INT_ELEMENTS: 4142 case EXTERNAL_INT_ELEMENTS:
4143 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 4143 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
4144 __ sll(t8, t0, 2); 4144 __ sll(t8, t0, 2);
4145 __ addu(t8, a3, t8); 4145 __ addu(t8, a3, t8);
4146 __ sw(t3, MemOperand(t8, 0)); 4146 __ sw(t3, MemOperand(t8, 0));
4147 break; 4147 break;
4148 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 4148 case EXTERNAL_PIXEL_ELEMENTS:
4149 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 4149 case EXTERNAL_FLOAT_ELEMENTS:
4150 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 4150 case EXTERNAL_DOUBLE_ELEMENTS:
4151 case JSObject::FAST_ELEMENTS: 4151 case FAST_ELEMENTS:
4152 case JSObject::FAST_DOUBLE_ELEMENTS: 4152 case FAST_DOUBLE_ELEMENTS:
4153 case JSObject::DICTIONARY_ELEMENTS: 4153 case DICTIONARY_ELEMENTS:
4154 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 4154 case NON_STRICT_ARGUMENTS_ELEMENTS:
4155 UNREACHABLE(); 4155 UNREACHABLE();
4156 break; 4156 break;
4157 } 4157 }
4158 } 4158 }
4159 } 4159 }
4160 } 4160 }
4161 4161
4162 // Slow case, key and receiver still in a0 and a1. 4162 // Slow case, key and receiver still in a0 and a1.
4163 __ bind(&slow); 4163 __ bind(&slow);
4164 __ IncrementCounter( 4164 __ IncrementCounter(
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
4488 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); 4488 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric();
4489 __ Jump(ic, RelocInfo::CODE_TARGET); 4489 __ Jump(ic, RelocInfo::CODE_TARGET);
4490 } 4490 }
4491 4491
4492 4492
4493 #undef __ 4493 #undef __
4494 4494
4495 } } // namespace v8::internal 4495 } } // namespace v8::internal
4496 4496
4497 #endif // V8_TARGET_ARCH_MIPS 4497 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698