| OLD | NEW | 
|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_PPC | 7 #if V8_TARGET_ARCH_PPC | 
| 8 | 8 | 
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" | 
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" | 
| (...skipping 4194 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4205       // shifted in the following and instruction. | 4205       // shifted in the following and instruction. | 
| 4206       DCHECK(NameDictionary::GetProbeOffset(i) < | 4206       DCHECK(NameDictionary::GetProbeOffset(i) < | 
| 4207              1 << (32 - Name::kHashFieldOffset)); | 4207              1 << (32 - Name::kHashFieldOffset)); | 
| 4208       __ addi(scratch2, scratch2, | 4208       __ addi(scratch2, scratch2, | 
| 4209               Operand(NameDictionary::GetProbeOffset(i) << Name::kHashShift)); | 4209               Operand(NameDictionary::GetProbeOffset(i) << Name::kHashShift)); | 
| 4210     } | 4210     } | 
| 4211     __ srwi(scratch2, scratch2, Operand(Name::kHashShift)); | 4211     __ srwi(scratch2, scratch2, Operand(Name::kHashShift)); | 
| 4212     __ and_(scratch2, scratch1, scratch2); | 4212     __ and_(scratch2, scratch1, scratch2); | 
| 4213 | 4213 | 
| 4214     // Scale the index by multiplying by the element size. | 4214     // Scale the index by multiplying by the element size. | 
| 4215     DCHECK(NameDictionary::kEntrySize == 3); | 4215     STATIC_ASSERT(NameDictionary::kEntrySize == 3); | 
| 4216     // scratch2 = scratch2 * 3. | 4216     // scratch2 = scratch2 * 3. | 
| 4217     __ ShiftLeftImm(ip, scratch2, Operand(1)); | 4217     __ ShiftLeftImm(ip, scratch2, Operand(1)); | 
| 4218     __ add(scratch2, scratch2, ip); | 4218     __ add(scratch2, scratch2, ip); | 
| 4219 | 4219 | 
| 4220     // Check if the key is identical to the name. | 4220     // Check if the key is identical to the name. | 
| 4221     __ ShiftLeftImm(ip, scratch2, Operand(kPointerSizeLog2)); | 4221     __ ShiftLeftImm(ip, scratch2, Operand(kPointerSizeLog2)); | 
| 4222     __ add(scratch2, elements, ip); | 4222     __ add(scratch2, elements, ip); | 
| 4223     __ LoadP(ip, FieldMemOperand(scratch2, kElementsStartOffset)); | 4223     __ LoadP(ip, FieldMemOperand(scratch2, kElementsStartOffset)); | 
| 4224     __ cmp(name, ip); | 4224     __ cmp(name, ip); | 
| 4225     __ beq(done); | 4225     __ beq(done); | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4294              1 << (32 - Name::kHashFieldOffset)); | 4294              1 << (32 - Name::kHashFieldOffset)); | 
| 4295       __ addi(index, hash, | 4295       __ addi(index, hash, | 
| 4296               Operand(NameDictionary::GetProbeOffset(i) << Name::kHashShift)); | 4296               Operand(NameDictionary::GetProbeOffset(i) << Name::kHashShift)); | 
| 4297     } else { | 4297     } else { | 
| 4298       __ mr(index, hash); | 4298       __ mr(index, hash); | 
| 4299     } | 4299     } | 
| 4300     __ srwi(r0, index, Operand(Name::kHashShift)); | 4300     __ srwi(r0, index, Operand(Name::kHashShift)); | 
| 4301     __ and_(index, mask, r0); | 4301     __ and_(index, mask, r0); | 
| 4302 | 4302 | 
| 4303     // Scale the index by multiplying by the entry size. | 4303     // Scale the index by multiplying by the entry size. | 
| 4304     DCHECK(NameDictionary::kEntrySize == 3); | 4304     STATIC_ASSERT(NameDictionary::kEntrySize == 3); | 
| 4305     __ ShiftLeftImm(scratch, index, Operand(1)); | 4305     __ ShiftLeftImm(scratch, index, Operand(1)); | 
| 4306     __ add(index, index, scratch);  // index *= 3. | 4306     __ add(index, index, scratch);  // index *= 3. | 
| 4307 | 4307 | 
| 4308     __ ShiftLeftImm(scratch, index, Operand(kPointerSizeLog2)); | 4308     __ ShiftLeftImm(scratch, index, Operand(kPointerSizeLog2)); | 
| 4309     __ add(index, dictionary, scratch); | 4309     __ add(index, dictionary, scratch); | 
| 4310     __ LoadP(entry_key, FieldMemOperand(index, kElementsStartOffset)); | 4310     __ LoadP(entry_key, FieldMemOperand(index, kElementsStartOffset)); | 
| 4311 | 4311 | 
| 4312     // Having undefined at this place means the name is not contained. | 4312     // Having undefined at this place means the name is not contained. | 
| 4313     __ cmp(entry_key, undefined); | 4313     __ cmp(entry_key, undefined); | 
| 4314     __ beq(¬_in_dictionary); | 4314     __ beq(¬_in_dictionary); | 
| (...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5033 | 5033 | 
| 5034 static void CreateArrayDispatchOneArgument(MacroAssembler* masm, | 5034 static void CreateArrayDispatchOneArgument(MacroAssembler* masm, | 
| 5035                                            AllocationSiteOverrideMode mode) { | 5035                                            AllocationSiteOverrideMode mode) { | 
| 5036   // r5 - allocation site (if mode != DISABLE_ALLOCATION_SITES) | 5036   // r5 - allocation site (if mode != DISABLE_ALLOCATION_SITES) | 
| 5037   // r6 - kind (if mode != DISABLE_ALLOCATION_SITES) | 5037   // r6 - kind (if mode != DISABLE_ALLOCATION_SITES) | 
| 5038   // r3 - number of arguments | 5038   // r3 - number of arguments | 
| 5039   // r4 - constructor? | 5039   // r4 - constructor? | 
| 5040   // sp[0] - last argument | 5040   // sp[0] - last argument | 
| 5041   Label normal_sequence; | 5041   Label normal_sequence; | 
| 5042   if (mode == DONT_OVERRIDE) { | 5042   if (mode == DONT_OVERRIDE) { | 
| 5043     DCHECK(FAST_SMI_ELEMENTS == 0); | 5043     STATIC_ASSERT(FAST_SMI_ELEMENTS == 0); | 
| 5044     DCHECK(FAST_HOLEY_SMI_ELEMENTS == 1); | 5044     STATIC_ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1); | 
| 5045     DCHECK(FAST_ELEMENTS == 2); | 5045     STATIC_ASSERT(FAST_ELEMENTS == 2); | 
| 5046     DCHECK(FAST_HOLEY_ELEMENTS == 3); | 5046     STATIC_ASSERT(FAST_HOLEY_ELEMENTS == 3); | 
| 5047     DCHECK(FAST_DOUBLE_ELEMENTS == 4); | 5047     STATIC_ASSERT(FAST_DOUBLE_ELEMENTS == 4); | 
| 5048     DCHECK(FAST_HOLEY_DOUBLE_ELEMENTS == 5); | 5048     STATIC_ASSERT(FAST_HOLEY_DOUBLE_ELEMENTS == 5); | 
| 5049 | 5049 | 
| 5050     // is the low bit set? If so, we are holey and that is good. | 5050     // is the low bit set? If so, we are holey and that is good. | 
| 5051     __ andi(r0, r6, Operand(1)); | 5051     __ andi(r0, r6, Operand(1)); | 
| 5052     __ bne(&normal_sequence, cr0); | 5052     __ bne(&normal_sequence, cr0); | 
| 5053   } | 5053   } | 
| 5054 | 5054 | 
| 5055   // look at the first argument | 5055   // look at the first argument | 
| 5056   __ LoadP(r8, MemOperand(sp, 0)); | 5056   __ LoadP(r8, MemOperand(sp, 0)); | 
| 5057   __ cmpi(r8, Operand::Zero()); | 5057   __ cmpi(r8, Operand::Zero()); | 
| 5058   __ beq(&normal_sequence); | 5058   __ beq(&normal_sequence); | 
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5673                            kStackUnwindSpace, NULL, | 5673                            kStackUnwindSpace, NULL, | 
| 5674                            MemOperand(fp, 6 * kPointerSize), NULL); | 5674                            MemOperand(fp, 6 * kPointerSize), NULL); | 
| 5675 } | 5675 } | 
| 5676 | 5676 | 
| 5677 | 5677 | 
| 5678 #undef __ | 5678 #undef __ | 
| 5679 }  // namespace internal | 5679 }  // namespace internal | 
| 5680 }  // namespace v8 | 5680 }  // namespace v8 | 
| 5681 | 5681 | 
| 5682 #endif  // V8_TARGET_ARCH_PPC | 5682 #endif  // V8_TARGET_ARCH_PPC | 
| OLD | NEW | 
|---|