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 #if V8_TARGET_ARCH_PPC | 5 #if V8_TARGET_ARCH_PPC |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 3500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3511 __ lbzx(r0, MemOperand(right, index)); | 3511 __ lbzx(r0, MemOperand(right, index)); |
3512 __ cmp(scratch1, r0); | 3512 __ cmp(scratch1, r0); |
3513 __ bne(chars_not_equal); | 3513 __ bne(chars_not_equal); |
3514 __ addi(index, index, Operand(1)); | 3514 __ addi(index, index, Operand(1)); |
3515 __ cmpi(index, Operand::Zero()); | 3515 __ cmpi(index, Operand::Zero()); |
3516 __ bne(&loop); | 3516 __ bne(&loop); |
3517 } | 3517 } |
3518 | 3518 |
3519 | 3519 |
3520 void StringCompareStub::Generate(MacroAssembler* masm) { | 3520 void StringCompareStub::Generate(MacroAssembler* masm) { |
3521 Label runtime; | 3521 // ----------- S t a t e ------------- |
3522 | 3522 // -- r4 : left |
3523 Counters* counters = isolate()->counters(); | 3523 // -- r3 : right |
3524 | 3524 // -- lr : return address |
3525 // Stack frame on entry. | 3525 // ----------------------------------- |
3526 // sp[0]: right string | 3526 __ AssertString(r4); |
3527 // sp[4]: left string | 3527 __ AssertString(r3); |
3528 __ LoadP(r3, MemOperand(sp)); // Load right in r3, left in r4. | |
3529 __ LoadP(r4, MemOperand(sp, kPointerSize)); | |
3530 | 3528 |
3531 Label not_same; | 3529 Label not_same; |
3532 __ cmp(r3, r4); | 3530 __ cmp(r3, r4); |
3533 __ bne(¬_same); | 3531 __ bne(¬_same); |
3534 STATIC_ASSERT(EQUAL == 0); | |
3535 STATIC_ASSERT(kSmiTag == 0); | |
3536 __ LoadSmiLiteral(r3, Smi::FromInt(EQUAL)); | 3532 __ LoadSmiLiteral(r3, Smi::FromInt(EQUAL)); |
3537 __ IncrementCounter(counters->string_compare_native(), 1, r4, r5); | 3533 __ IncrementCounter(isolate()->counters()->string_compare_native(), 1, r4, |
3538 __ addi(sp, sp, Operand(2 * kPointerSize)); | 3534 r5); |
3539 __ Ret(); | 3535 __ Ret(); |
3540 | 3536 |
3541 __ bind(¬_same); | 3537 __ bind(¬_same); |
3542 | 3538 |
3543 // Check that both objects are sequential one-byte strings. | 3539 // Check that both objects are sequential one-byte strings. |
| 3540 Label runtime; |
3544 __ JumpIfNotBothSequentialOneByteStrings(r4, r3, r5, r6, &runtime); | 3541 __ JumpIfNotBothSequentialOneByteStrings(r4, r3, r5, r6, &runtime); |
3545 | 3542 |
3546 // Compare flat one-byte strings natively. Remove arguments from stack first. | 3543 // Compare flat one-byte strings natively. |
3547 __ IncrementCounter(counters->string_compare_native(), 1, r5, r6); | 3544 __ IncrementCounter(isolate()->counters()->string_compare_native(), 1, r5, |
3548 __ addi(sp, sp, Operand(2 * kPointerSize)); | 3545 r6); |
3549 StringHelper::GenerateCompareFlatOneByteStrings(masm, r4, r3, r5, r6, r7); | 3546 StringHelper::GenerateCompareFlatOneByteStrings(masm, r4, r3, r5, r6, r7); |
3550 | 3547 |
3551 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 3548 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
3552 // tagged as a small integer. | 3549 // tagged as a small integer. |
3553 __ bind(&runtime); | 3550 __ bind(&runtime); |
| 3551 __ Push(r4, r3); |
3554 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 3552 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
3555 } | 3553 } |
3556 | 3554 |
3557 | 3555 |
3558 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { | 3556 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { |
3559 // ----------- S t a t e ------------- | 3557 // ----------- S t a t e ------------- |
3560 // -- r4 : left | 3558 // -- r4 : left |
3561 // -- r3 : right | 3559 // -- r3 : right |
3562 // -- lr : return address | 3560 // -- lr : return address |
3563 // ----------------------------------- | 3561 // ----------------------------------- |
(...skipping 2277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5841 kStackUnwindSpace, NULL, | 5839 kStackUnwindSpace, NULL, |
5842 MemOperand(fp, 6 * kPointerSize), NULL); | 5840 MemOperand(fp, 6 * kPointerSize), NULL); |
5843 } | 5841 } |
5844 | 5842 |
5845 | 5843 |
5846 #undef __ | 5844 #undef __ |
5847 } // namespace internal | 5845 } // namespace internal |
5848 } // namespace v8 | 5846 } // namespace v8 |
5849 | 5847 |
5850 #endif // V8_TARGET_ARCH_PPC | 5848 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |