| OLD | NEW |
| 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_MIPS64 | 7 #if V8_TARGET_ARCH_MIPS64 |
| 8 | 8 |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 3663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3674 // Check that both operands are heap objects. | 3674 // Check that both operands are heap objects. |
| 3675 __ JumpIfEitherSmi(left, right, &miss); | 3675 __ JumpIfEitherSmi(left, right, &miss); |
| 3676 | 3676 |
| 3677 // Check that both operands are unique names. This leaves the instance | 3677 // Check that both operands are unique names. This leaves the instance |
| 3678 // types loaded in tmp1 and tmp2. | 3678 // types loaded in tmp1 and tmp2. |
| 3679 __ ld(tmp1, FieldMemOperand(left, HeapObject::kMapOffset)); | 3679 __ ld(tmp1, FieldMemOperand(left, HeapObject::kMapOffset)); |
| 3680 __ ld(tmp2, FieldMemOperand(right, HeapObject::kMapOffset)); | 3680 __ ld(tmp2, FieldMemOperand(right, HeapObject::kMapOffset)); |
| 3681 __ lbu(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset)); | 3681 __ lbu(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset)); |
| 3682 __ lbu(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset)); | 3682 __ lbu(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset)); |
| 3683 | 3683 |
| 3684 __ JumpIfNotUniqueName(tmp1, &miss); | 3684 __ JumpIfNotUniqueNameInstanceType(tmp1, &miss); |
| 3685 __ JumpIfNotUniqueName(tmp2, &miss); | 3685 __ JumpIfNotUniqueNameInstanceType(tmp2, &miss); |
| 3686 | 3686 |
| 3687 // Use a0 as result | 3687 // Use a0 as result |
| 3688 __ mov(v0, a0); | 3688 __ mov(v0, a0); |
| 3689 | 3689 |
| 3690 // Unique names are compared by identity. | 3690 // Unique names are compared by identity. |
| 3691 Label done; | 3691 Label done; |
| 3692 __ Branch(&done, ne, left, Operand(right)); | 3692 __ Branch(&done, ne, left, Operand(right)); |
| 3693 // Make sure a0 is non-zero. At this point input operands are | 3693 // Make sure a0 is non-zero. At this point input operands are |
| 3694 // guaranteed to be non-zero. | 3694 // guaranteed to be non-zero. |
| 3695 DCHECK(right.is(a0)); | 3695 DCHECK(right.is(a0)); |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3930 // Stop if found the property. | 3930 // Stop if found the property. |
| 3931 __ Branch(miss, eq, entity_name, Operand(Handle<Name>(name))); | 3931 __ Branch(miss, eq, entity_name, Operand(Handle<Name>(name))); |
| 3932 | 3932 |
| 3933 Label good; | 3933 Label good; |
| 3934 __ Branch(&good, eq, entity_name, Operand(tmp)); | 3934 __ Branch(&good, eq, entity_name, Operand(tmp)); |
| 3935 | 3935 |
| 3936 // Check if the entry name is not a unique name. | 3936 // Check if the entry name is not a unique name. |
| 3937 __ ld(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); | 3937 __ ld(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); |
| 3938 __ lbu(entity_name, | 3938 __ lbu(entity_name, |
| 3939 FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); | 3939 FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); |
| 3940 __ JumpIfNotUniqueName(entity_name, miss); | 3940 __ JumpIfNotUniqueNameInstanceType(entity_name, miss); |
| 3941 __ bind(&good); | 3941 __ bind(&good); |
| 3942 | 3942 |
| 3943 // Restore the properties. | 3943 // Restore the properties. |
| 3944 __ ld(properties, | 3944 __ ld(properties, |
| 3945 FieldMemOperand(receiver, JSObject::kPropertiesOffset)); | 3945 FieldMemOperand(receiver, JSObject::kPropertiesOffset)); |
| 3946 } | 3946 } |
| 3947 | 3947 |
| 3948 const int spill_mask = | 3948 const int spill_mask = |
| 3949 (ra.bit() | a6.bit() | a5.bit() | a4.bit() | a3.bit() | | 3949 (ra.bit() | a6.bit() | a5.bit() | a4.bit() | a3.bit() | |
| 3950 a2.bit() | a1.bit() | a0.bit() | v0.bit()); | 3950 a2.bit() | a1.bit() | a0.bit() | v0.bit()); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4107 __ Branch(¬_in_dictionary, eq, entry_key, Operand(undefined)); | 4107 __ Branch(¬_in_dictionary, eq, entry_key, Operand(undefined)); |
| 4108 | 4108 |
| 4109 // Stop if found the property. | 4109 // Stop if found the property. |
| 4110 __ Branch(&in_dictionary, eq, entry_key, Operand(key)); | 4110 __ Branch(&in_dictionary, eq, entry_key, Operand(key)); |
| 4111 | 4111 |
| 4112 if (i != kTotalProbes - 1 && mode() == NEGATIVE_LOOKUP) { | 4112 if (i != kTotalProbes - 1 && mode() == NEGATIVE_LOOKUP) { |
| 4113 // Check if the entry name is not a unique name. | 4113 // Check if the entry name is not a unique name. |
| 4114 __ ld(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset)); | 4114 __ ld(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset)); |
| 4115 __ lbu(entry_key, | 4115 __ lbu(entry_key, |
| 4116 FieldMemOperand(entry_key, Map::kInstanceTypeOffset)); | 4116 FieldMemOperand(entry_key, Map::kInstanceTypeOffset)); |
| 4117 __ JumpIfNotUniqueName(entry_key, &maybe_in_dictionary); | 4117 __ JumpIfNotUniqueNameInstanceType(entry_key, &maybe_in_dictionary); |
| 4118 } | 4118 } |
| 4119 } | 4119 } |
| 4120 | 4120 |
| 4121 __ bind(&maybe_in_dictionary); | 4121 __ bind(&maybe_in_dictionary); |
| 4122 // If we are doing negative lookup then probing failure should be | 4122 // If we are doing negative lookup then probing failure should be |
| 4123 // treated as a lookup success. For positive lookup probing failure | 4123 // treated as a lookup success. For positive lookup probing failure |
| 4124 // should be treated as lookup failure. | 4124 // should be treated as lookup failure. |
| 4125 if (mode() == POSITIVE_LOOKUP) { | 4125 if (mode() == POSITIVE_LOOKUP) { |
| 4126 __ Ret(USE_DELAY_SLOT); | 4126 __ Ret(USE_DELAY_SLOT); |
| 4127 __ mov(result, zero_reg); | 4127 __ mov(result, zero_reg); |
| (...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4923 MemOperand(fp, 6 * kPointerSize), | 4923 MemOperand(fp, 6 * kPointerSize), |
| 4924 NULL); | 4924 NULL); |
| 4925 } | 4925 } |
| 4926 | 4926 |
| 4927 | 4927 |
| 4928 #undef __ | 4928 #undef __ |
| 4929 | 4929 |
| 4930 } } // namespace v8::internal | 4930 } } // namespace v8::internal |
| 4931 | 4931 |
| 4932 #endif // V8_TARGET_ARCH_MIPS64 | 4932 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |