OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
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 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 | 719 |
720 void MathPowStub::Generate(MacroAssembler* masm) { | 720 void MathPowStub::Generate(MacroAssembler* masm) { |
721 // Stack on entry: | 721 // Stack on entry: |
722 // jssp[0]: Exponent (as a tagged value). | 722 // jssp[0]: Exponent (as a tagged value). |
723 // jssp[1]: Base (as a tagged value). | 723 // jssp[1]: Base (as a tagged value). |
724 // | 724 // |
725 // The (tagged) result will be returned in x0, as a heap number. | 725 // The (tagged) result will be returned in x0, as a heap number. |
726 | 726 |
727 Register result_tagged = x0; | 727 Register result_tagged = x0; |
728 Register base_tagged = x10; | 728 Register base_tagged = x10; |
729 Register exponent_tagged = x11; | 729 Register exponent_tagged = MathPowTaggedDescriptor::exponent(); |
730 Register exponent_integer = x12; | 730 DCHECK(exponent_tagged.is(x11)); |
| 731 Register exponent_integer = MathPowIntegerDescriptor::exponent(); |
| 732 DCHECK(exponent_integer.is(x12)); |
731 Register scratch1 = x14; | 733 Register scratch1 = x14; |
732 Register scratch0 = x15; | 734 Register scratch0 = x15; |
733 Register saved_lr = x19; | 735 Register saved_lr = x19; |
734 FPRegister result_double = d0; | 736 FPRegister result_double = d0; |
735 FPRegister base_double = d0; | 737 FPRegister base_double = d0; |
736 FPRegister exponent_double = d1; | 738 FPRegister exponent_double = d1; |
737 FPRegister base_double_copy = d2; | 739 FPRegister base_double_copy = d2; |
738 FPRegister scratch1_double = d6; | 740 FPRegister scratch1_double = d6; |
739 FPRegister scratch0_double = d7; | 741 FPRegister scratch0_double = d7; |
740 | 742 |
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1599 // Reload true/false because they were clobbered in the builtin call. | 1601 // Reload true/false because they were clobbered in the builtin call. |
1600 __ LoadTrueFalseRoots(res_true, res_false); | 1602 __ LoadTrueFalseRoots(res_true, res_false); |
1601 __ Cmp(result, 0); | 1603 __ Cmp(result, 0); |
1602 __ Csel(result, res_true, res_false, eq); | 1604 __ Csel(result, res_true, res_false, eq); |
1603 } | 1605 } |
1604 __ Ret(); | 1606 __ Ret(); |
1605 } | 1607 } |
1606 | 1608 |
1607 | 1609 |
1608 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { | 1610 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { |
1609 Register arg_count = x0; | 1611 Register arg_count = ArgumentsAccessReadDescriptor::parameter_count(); |
1610 Register key = x1; | 1612 Register key = ArgumentsAccessReadDescriptor::index(); |
| 1613 DCHECK(arg_count.is(x0)); |
| 1614 DCHECK(key.is(x1)); |
1611 | 1615 |
1612 // The displacement is the offset of the last parameter (if any) relative | 1616 // The displacement is the offset of the last parameter (if any) relative |
1613 // to the frame pointer. | 1617 // to the frame pointer. |
1614 static const int kDisplacement = | 1618 static const int kDisplacement = |
1615 StandardFrameConstants::kCallerSPOffset - kPointerSize; | 1619 StandardFrameConstants::kCallerSPOffset - kPointerSize; |
1616 | 1620 |
1617 // Check that the key is a smi. | 1621 // Check that the key is a smi. |
1618 Label slow; | 1622 Label slow; |
1619 __ JumpIfNotSmi(key, &slow); | 1623 __ JumpIfNotSmi(key, &slow); |
1620 | 1624 |
(...skipping 3380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5001 | 5005 |
5002 | 5006 |
5003 void CallApiGetterStub::Generate(MacroAssembler* masm) { | 5007 void CallApiGetterStub::Generate(MacroAssembler* masm) { |
5004 // ----------- S t a t e ------------- | 5008 // ----------- S t a t e ------------- |
5005 // -- sp[0] : name | 5009 // -- sp[0] : name |
5006 // -- sp[8 - kArgsLength*8] : PropertyCallbackArguments object | 5010 // -- sp[8 - kArgsLength*8] : PropertyCallbackArguments object |
5007 // -- ... | 5011 // -- ... |
5008 // -- x2 : api_function_address | 5012 // -- x2 : api_function_address |
5009 // ----------------------------------- | 5013 // ----------------------------------- |
5010 | 5014 |
5011 Register api_function_address = x2; | 5015 Register api_function_address = ApiGetterDescriptor::function_address(); |
| 5016 DCHECK(api_function_address.is(x2)); |
5012 | 5017 |
5013 __ Mov(x0, masm->StackPointer()); // x0 = Handle<Name> | 5018 __ Mov(x0, masm->StackPointer()); // x0 = Handle<Name> |
5014 __ Add(x1, x0, 1 * kPointerSize); // x1 = PCA | 5019 __ Add(x1, x0, 1 * kPointerSize); // x1 = PCA |
5015 | 5020 |
5016 const int kApiStackSpace = 1; | 5021 const int kApiStackSpace = 1; |
5017 | 5022 |
5018 // Allocate space for CallApiFunctionAndReturn can store some scratch | 5023 // Allocate space for CallApiFunctionAndReturn can store some scratch |
5019 // registeres on the stack. | 5024 // registeres on the stack. |
5020 const int kCallApiFunctionSpillSpace = 4; | 5025 const int kCallApiFunctionSpillSpace = 4; |
5021 | 5026 |
(...skipping 18 matching lines...) Expand all Loading... |
5040 MemOperand(fp, 6 * kPointerSize), | 5045 MemOperand(fp, 6 * kPointerSize), |
5041 NULL); | 5046 NULL); |
5042 } | 5047 } |
5043 | 5048 |
5044 | 5049 |
5045 #undef __ | 5050 #undef __ |
5046 | 5051 |
5047 } } // namespace v8::internal | 5052 } } // namespace v8::internal |
5048 | 5053 |
5049 #endif // V8_TARGET_ARCH_ARM64 | 5054 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |