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 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ | 5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ |
6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ | 6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/globals.h" | 9 #include "src/globals.h" |
10 #include "src/mips64/assembler-mips64.h" | 10 #include "src/mips64/assembler-mips64.h" |
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 void Floor_w_d(FPURegister fd, FPURegister fs); | 795 void Floor_w_d(FPURegister fd, FPURegister fs); |
796 void Ceil_w_d(FPURegister fd, FPURegister fs); | 796 void Ceil_w_d(FPURegister fd, FPURegister fs); |
797 | 797 |
798 void Madd_d(FPURegister fd, | 798 void Madd_d(FPURegister fd, |
799 FPURegister fr, | 799 FPURegister fr, |
800 FPURegister fs, | 800 FPURegister fs, |
801 FPURegister ft, | 801 FPURegister ft, |
802 FPURegister scratch); | 802 FPURegister scratch); |
803 | 803 |
804 // Wrapper functions for the different cmp/branch types. | 804 // Wrapper functions for the different cmp/branch types. |
805 void BranchFSize(SecondaryField sizeField, Label* target, Label* nan, | 805 inline void BranchF32(Label* target, Label* nan, Condition cc, |
806 Condition cc, FPURegister cmp1, FPURegister cmp2, | 806 FPURegister cmp1, FPURegister cmp2, |
807 BranchDelaySlot bd = PROTECT); | 807 BranchDelaySlot bd = PROTECT) { |
| 808 BranchFCommon(S, target, nan, cc, cmp1, cmp2, bd); |
| 809 } |
808 | 810 |
809 void BranchF(Label* target, | 811 inline void BranchF64(Label* target, Label* nan, Condition cc, |
810 Label* nan, | 812 FPURegister cmp1, FPURegister cmp2, |
811 Condition cc, | 813 BranchDelaySlot bd = PROTECT) { |
812 FPURegister cmp1, | 814 BranchFCommon(D, target, nan, cc, cmp1, cmp2, bd); |
813 FPURegister cmp2, | 815 } |
814 BranchDelaySlot bd = PROTECT); | |
815 | |
816 void BranchFS(Label* target, Label* nan, Condition cc, FPURegister cmp1, | |
817 FPURegister cmp2, BranchDelaySlot bd = PROTECT); | |
818 | 816 |
819 // Alternate (inline) version for better readability with USE_DELAY_SLOT. | 817 // Alternate (inline) version for better readability with USE_DELAY_SLOT. |
820 inline void BranchF(BranchDelaySlot bd, | 818 inline void BranchF64(BranchDelaySlot bd, Label* target, Label* nan, |
821 Label* target, | 819 Condition cc, FPURegister cmp1, FPURegister cmp2) { |
822 Label* nan, | 820 BranchF64(target, nan, cc, cmp1, cmp2, bd); |
823 Condition cc, | |
824 FPURegister cmp1, | |
825 FPURegister cmp2) { | |
826 BranchF(target, nan, cc, cmp1, cmp2, bd); | |
827 } | 821 } |
828 | 822 |
829 inline void BranchFS(BranchDelaySlot bd, Label* target, Label* nan, | 823 inline void BranchF32(BranchDelaySlot bd, Label* target, Label* nan, |
830 Condition cc, FPURegister cmp1, FPURegister cmp2) { | 824 Condition cc, FPURegister cmp1, FPURegister cmp2) { |
831 BranchFS(target, nan, cc, cmp1, cmp2, bd); | 825 BranchF32(target, nan, cc, cmp1, cmp2, bd); |
| 826 } |
| 827 |
| 828 // Alias functions for backward compatibility. |
| 829 inline void BranchF(Label* target, Label* nan, Condition cc, FPURegister cmp1, |
| 830 FPURegister cmp2, BranchDelaySlot bd = PROTECT) { |
| 831 BranchF64(target, nan, cc, cmp1, cmp2, bd); |
| 832 } |
| 833 |
| 834 inline void BranchF(BranchDelaySlot bd, Label* target, Label* nan, |
| 835 Condition cc, FPURegister cmp1, FPURegister cmp2) { |
| 836 BranchF64(bd, target, nan, cc, cmp1, cmp2); |
832 } | 837 } |
833 | 838 |
834 // Truncates a double using a specific rounding mode, and writes the value | 839 // Truncates a double using a specific rounding mode, and writes the value |
835 // to the result register. | 840 // to the result register. |
836 // The except_flag will contain any exceptions caused by the instruction. | 841 // The except_flag will contain any exceptions caused by the instruction. |
837 // If check_inexact is kDontCheckForInexactConversion, then the inexact | 842 // If check_inexact is kDontCheckForInexactConversion, then the inexact |
838 // exception is masked. | 843 // exception is masked. |
839 void EmitFPUTruncate(FPURoundingMode rounding_mode, | 844 void EmitFPUTruncate(FPURoundingMode rounding_mode, |
840 Register result, | 845 Register result, |
841 DoubleRegister double_input, | 846 DoubleRegister double_input, |
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 const Operand& rt, | 1699 const Operand& rt, |
1695 BranchDelaySlot bdslot = PROTECT); | 1700 BranchDelaySlot bdslot = PROTECT); |
1696 void BranchAndLinkShort(Label* L, BranchDelaySlot bdslot = PROTECT); | 1701 void BranchAndLinkShort(Label* L, BranchDelaySlot bdslot = PROTECT); |
1697 void BranchAndLinkShort(Label* L, Condition cond, Register rs, | 1702 void BranchAndLinkShort(Label* L, Condition cond, Register rs, |
1698 const Operand& rt, | 1703 const Operand& rt, |
1699 BranchDelaySlot bdslot = PROTECT); | 1704 BranchDelaySlot bdslot = PROTECT); |
1700 void J(Label* L, BranchDelaySlot bdslot); | 1705 void J(Label* L, BranchDelaySlot bdslot); |
1701 void Jr(Label* L, BranchDelaySlot bdslot); | 1706 void Jr(Label* L, BranchDelaySlot bdslot); |
1702 void Jalr(Label* L, BranchDelaySlot bdslot); | 1707 void Jalr(Label* L, BranchDelaySlot bdslot); |
1703 | 1708 |
| 1709 // Common implementation of BranchF functions for the different formats. |
| 1710 void BranchFCommon(SecondaryField sizeField, Label* target, Label* nan, |
| 1711 Condition cc, FPURegister cmp1, FPURegister cmp2, |
| 1712 BranchDelaySlot bd = PROTECT); |
| 1713 |
1704 // Helper functions for generating invokes. | 1714 // Helper functions for generating invokes. |
1705 void InvokePrologue(const ParameterCount& expected, | 1715 void InvokePrologue(const ParameterCount& expected, |
1706 const ParameterCount& actual, | 1716 const ParameterCount& actual, |
1707 Handle<Code> code_constant, | 1717 Handle<Code> code_constant, |
1708 Register code_reg, | 1718 Register code_reg, |
1709 Label* done, | 1719 Label* done, |
1710 bool* definitely_mismatches, | 1720 bool* definitely_mismatches, |
1711 InvokeFlag flag, | 1721 InvokeFlag flag, |
1712 const CallWrapper& call_wrapper); | 1722 const CallWrapper& call_wrapper); |
1713 | 1723 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1795 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 1805 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
1796 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 1806 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
1797 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 1807 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
1798 #else | 1808 #else |
1799 #define ACCESS_MASM(masm) masm-> | 1809 #define ACCESS_MASM(masm) masm-> |
1800 #endif | 1810 #endif |
1801 | 1811 |
1802 } } // namespace v8::internal | 1812 } } // namespace v8::internal |
1803 | 1813 |
1804 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ | 1814 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ |
OLD | NEW |