Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/mips/macro-assembler-mips.h

Issue 23444033: MIPS: Improve TruncateNumberToI implementation after DoubleToIStub usage (r16461). (Closed) Base URL: git@github.com:paul99/v8m-rb.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/mips/macro-assembler-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 // Alternate (inline) version for better readability with USE_DELAY_SLOT. 751 // Alternate (inline) version for better readability with USE_DELAY_SLOT.
752 inline void BranchF(BranchDelaySlot bd, 752 inline void BranchF(BranchDelaySlot bd,
753 Label* target, 753 Label* target,
754 Label* nan, 754 Label* nan,
755 Condition cc, 755 Condition cc,
756 FPURegister cmp1, 756 FPURegister cmp1,
757 FPURegister cmp2) { 757 FPURegister cmp2) {
758 BranchF(target, nan, cc, cmp1, cmp2, bd); 758 BranchF(target, nan, cc, cmp1, cmp2, bd);
759 }; 759 };
760 760
761 // Convert the HeapNumber pointed to by source to a 32bits signed integer
762 // dest. If the HeapNumber does not fit into a 32bits signed integer branch
763 // to not_int32 label. If FPU is available double_scratch is used but not
764 // scratch2.
765 void ConvertToInt32(Register source,
766 Register dest,
767 Register scratch,
768 Register scratch2,
769 FPURegister double_scratch,
770 Label *not_int32);
771
772 // Truncates a double using a specific rounding mode, and writes the value 761 // Truncates a double using a specific rounding mode, and writes the value
773 // to the result register. 762 // to the result register.
774 // The except_flag will contain any exceptions caused by the instruction. 763 // The except_flag will contain any exceptions caused by the instruction.
775 // If check_inexact is kDontCheckForInexactConversion, then the inexact 764 // If check_inexact is kDontCheckForInexactConversion, then the inexact
776 // exception is masked. 765 // exception is masked.
777 void EmitFPUTruncate(FPURoundingMode rounding_mode, 766 void EmitFPUTruncate(FPURoundingMode rounding_mode,
778 Register result, 767 Register result,
779 DoubleRegister double_input, 768 DoubleRegister double_input,
780 Register scratch, 769 Register scratch,
781 DoubleRegister double_scratch, 770 DoubleRegister double_scratch,
782 Register except_flag, 771 Register except_flag,
783 CheckForInexactConversion check_inexact 772 CheckForInexactConversion check_inexact
784 = kDontCheckForInexactConversion); 773 = kDontCheckForInexactConversion);
785 774
786 // Helper for EmitECMATruncate.
787 // This will truncate a floating-point value outside of the singed 32bit
788 // integer range to a 32bit signed integer.
789 // Expects the double value loaded in input_high and input_low.
790 // Exits with the answer in 'result'.
791 // Note that this code does not work for values in the 32bit range!
792 void EmitOutOfInt32RangeTruncate(Register result,
793 Register input_high,
794 Register input_low,
795 Register scratch);
796
797 // Performs a truncating conversion of a floating point number as used by 775 // Performs a truncating conversion of a floating point number as used by
798 // the JS bitwise operations. See ECMA-262 9.5: ToInt32. Goes to 'done' if it 776 // the JS bitwise operations. See ECMA-262 9.5: ToInt32. Goes to 'done' if it
799 // succeeds, otherwise falls through if result is saturated. On return 777 // succeeds, otherwise falls through if result is saturated. On return
800 // 'result' either holds answer, or is clobbered on fall through. 778 // 'result' either holds answer, or is clobbered on fall through.
801 // 779 //
802 // Only public for the test code in test-code-stubs-arm.cc. 780 // Only public for the test code in test-code-stubs-arm.cc.
803 void TryInlineTruncateDoubleToI(Register result, 781 void TryInlineTruncateDoubleToI(Register result,
804 DoubleRegister input, 782 DoubleRegister input,
805 Label* done); 783 Label* done);
806 784
807 // Performs a truncating conversion of a floating point number as used by 785 // Performs a truncating conversion of a floating point number as used by
808 // the JS bitwise operations. See ECMA-262 9.5: ToInt32. 786 // the JS bitwise operations. See ECMA-262 9.5: ToInt32.
809 // Exits with 'result' holding the answer. 787 // Exits with 'result' holding the answer.
810 void TruncateDoubleToI(Register result, DoubleRegister double_input); 788 void TruncateDoubleToI(Register result, DoubleRegister double_input);
811 789
812 // Performs a truncating conversion of a heap number as used by 790 // Performs a truncating conversion of a heap number as used by
813 // the JS bitwise operations. See ECMA-262 9.5: ToInt32. 'result' and 'input' 791 // the JS bitwise operations. See ECMA-262 9.5: ToInt32. 'result' and 'input'
814 // must be different registers. Exits with 'result' holding the answer. 792 // must be different registers. Exits with 'result' holding the answer.
815 void TruncateHeapNumberToI(Register result, Register object); 793 void TruncateHeapNumberToI(Register result, Register object);
816 794
817 // Converts the smi or heap number in object to an int32 using the rules 795 // Converts the smi or heap number in object to an int32 using the rules
818 // for ToInt32 as described in ECMAScript 9.5.: the value is truncated 796 // for ToInt32 as described in ECMAScript 9.5.: the value is truncated
819 // and brought into the range -2^31 .. +2^31 - 1. 'result' and 'input' must be 797 // and brought into the range -2^31 .. +2^31 - 1. 'result' and 'input' must be
820 // different registers. 798 // different registers.
821 void TruncateNumberToI(Register object, 799 void TruncateNumberToI(Register object,
822 Register result, 800 Register result,
823 Register heap_number_map, 801 Register heap_number_map,
824 Register scratch1, 802 Register scratch,
825 Register scratch2,
826 Register scratch3,
827 Label* not_int32); 803 Label* not_int32);
828 804
829 // Loads the number from object into dst register. 805 // Loads the number from object into dst register.
830 // If |object| is neither smi nor heap number, |not_number| is jumped to 806 // If |object| is neither smi nor heap number, |not_number| is jumped to
831 // with |object| still intact. 807 // with |object| still intact.
832 void LoadNumber(Register object, 808 void LoadNumber(Register object,
833 FPURegister dst, 809 FPURegister dst,
834 Register heap_number_map, 810 Register heap_number_map,
835 Register scratch, 811 Register scratch,
836 Label* not_number); 812 Label* not_number);
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) 1615 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1640 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) 1616 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1641 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> 1617 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1642 #else 1618 #else
1643 #define ACCESS_MASM(masm) masm-> 1619 #define ACCESS_MASM(masm) masm->
1644 #endif 1620 #endif
1645 1621
1646 } } // namespace v8::internal 1622 } } // namespace v8::internal
1647 1623
1648 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 1624 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips/code-stubs-mips.cc ('k') | src/mips/macro-assembler-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698