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 3373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3384 String::TWO_BYTE_ENCODING); | 3384 String::TWO_BYTE_ENCODING); |
3385 | 3385 |
3386 __ bind(&return_r3); | 3386 __ bind(&return_r3); |
3387 Counters* counters = isolate()->counters(); | 3387 Counters* counters = isolate()->counters(); |
3388 __ IncrementCounter(counters->sub_string_native(), 1, r6, r7); | 3388 __ IncrementCounter(counters->sub_string_native(), 1, r6, r7); |
3389 __ Drop(3); | 3389 __ Drop(3); |
3390 __ Ret(); | 3390 __ Ret(); |
3391 | 3391 |
3392 // Just jump to runtime to create the sub string. | 3392 // Just jump to runtime to create the sub string. |
3393 __ bind(&runtime); | 3393 __ bind(&runtime); |
3394 __ TailCallRuntime(Runtime::kSubString, 3, 1); | 3394 __ TailCallRuntime(Runtime::kSubStringRT, 3, 1); |
3395 | 3395 |
3396 __ bind(&single_char); | 3396 __ bind(&single_char); |
3397 // r3: original string | 3397 // r3: original string |
3398 // r4: instance type | 3398 // r4: instance type |
3399 // r5: length | 3399 // r5: length |
3400 // r6: from index (untagged) | 3400 // r6: from index (untagged) |
3401 __ SmiTag(r6, r6); | 3401 __ SmiTag(r6, r6); |
3402 StringCharAtGenerator generator(r3, r6, r5, r3, &runtime, &runtime, &runtime, | 3402 StringCharAtGenerator generator(r3, r6, r5, r3, &runtime, &runtime, &runtime, |
3403 STRING_INDEX_IS_NUMBER, RECEIVER_IS_STRING); | 3403 STRING_INDEX_IS_NUMBER, RECEIVER_IS_STRING); |
3404 generator.GenerateFast(masm); | 3404 generator.GenerateFast(masm); |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3597 __ JumpIfNotBothSequentialOneByteStrings(r4, r3, r5, r6, &runtime); | 3597 __ JumpIfNotBothSequentialOneByteStrings(r4, r3, r5, r6, &runtime); |
3598 | 3598 |
3599 // Compare flat one-byte strings natively. Remove arguments from stack first. | 3599 // Compare flat one-byte strings natively. Remove arguments from stack first. |
3600 __ IncrementCounter(counters->string_compare_native(), 1, r5, r6); | 3600 __ IncrementCounter(counters->string_compare_native(), 1, r5, r6); |
3601 __ addi(sp, sp, Operand(2 * kPointerSize)); | 3601 __ addi(sp, sp, Operand(2 * kPointerSize)); |
3602 StringHelper::GenerateCompareFlatOneByteStrings(masm, r4, r3, r5, r6, r7); | 3602 StringHelper::GenerateCompareFlatOneByteStrings(masm, r4, r3, r5, r6, r7); |
3603 | 3603 |
3604 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 3604 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
3605 // tagged as a small integer. | 3605 // tagged as a small integer. |
3606 __ bind(&runtime); | 3606 __ bind(&runtime); |
3607 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 3607 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); |
3608 } | 3608 } |
3609 | 3609 |
3610 | 3610 |
3611 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { | 3611 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { |
3612 // ----------- S t a t e ------------- | 3612 // ----------- S t a t e ------------- |
3613 // -- r4 : left | 3613 // -- r4 : left |
3614 // -- r3 : right | 3614 // -- r3 : right |
3615 // -- lr : return address | 3615 // -- lr : return address |
3616 // ----------------------------------- | 3616 // ----------------------------------- |
3617 | 3617 |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3903 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1, | 3903 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1, |
3904 tmp2, tmp3); | 3904 tmp2, tmp3); |
3905 } | 3905 } |
3906 | 3906 |
3907 // Handle more complex cases in runtime. | 3907 // Handle more complex cases in runtime. |
3908 __ bind(&runtime); | 3908 __ bind(&runtime); |
3909 __ Push(left, right); | 3909 __ Push(left, right); |
3910 if (equality) { | 3910 if (equality) { |
3911 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); | 3911 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); |
3912 } else { | 3912 } else { |
3913 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 3913 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); |
3914 } | 3914 } |
3915 | 3915 |
3916 __ bind(&miss); | 3916 __ bind(&miss); |
3917 GenerateMiss(masm); | 3917 GenerateMiss(masm); |
3918 } | 3918 } |
3919 | 3919 |
3920 | 3920 |
3921 void CompareICStub::GenerateObjects(MacroAssembler* masm) { | 3921 void CompareICStub::GenerateObjects(MacroAssembler* masm) { |
3922 DCHECK(state() == CompareICState::OBJECT); | 3922 DCHECK(state() == CompareICState::OBJECT); |
3923 Label miss; | 3923 Label miss; |
(...skipping 1368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5292 kStackUnwindSpace, NULL, | 5292 kStackUnwindSpace, NULL, |
5293 MemOperand(fp, 6 * kPointerSize), NULL); | 5293 MemOperand(fp, 6 * kPointerSize), NULL); |
5294 } | 5294 } |
5295 | 5295 |
5296 | 5296 |
5297 #undef __ | 5297 #undef __ |
5298 } | 5298 } |
5299 } // namespace v8::internal | 5299 } // namespace v8::internal |
5300 | 5300 |
5301 #endif // V8_TARGET_ARCH_PPC | 5301 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |