OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 2806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2817 result, | 2817 result, |
2818 0, | 2818 0, |
2819 true, // is_truncating | 2819 true, // is_truncating |
2820 true); // skip_fastpath | 2820 true); // skip_fastpath |
2821 CallStub(&stub); // DoubleToIStub preserves any registers it needs to clobber | 2821 CallStub(&stub); // DoubleToIStub preserves any registers it needs to clobber |
2822 | 2822 |
2823 Drop(1, kDoubleSize); // Drop the double input on the stack. | 2823 Drop(1, kDoubleSize); // Drop the double input on the stack. |
2824 Pop(lr); | 2824 Pop(lr); |
2825 | 2825 |
2826 Bind(&done); | 2826 Bind(&done); |
2827 | |
2828 // TODO(rmcilroy): Remove this Sxtw once the following bug is fixed: | |
2829 // https://code.google.com/p/v8/issues/detail?id=3149 | |
2830 Sxtw(result, result.W()); | |
2831 } | 2827 } |
2832 | 2828 |
2833 | 2829 |
2834 void MacroAssembler::TruncateHeapNumberToI(Register result, | 2830 void MacroAssembler::TruncateHeapNumberToI(Register result, |
2835 Register object) { | 2831 Register object) { |
2836 Label done; | 2832 Label done; |
2837 ASSERT(!result.is(object)); | 2833 ASSERT(!result.is(object)); |
2838 ASSERT(jssp.Is(StackPointer())); | 2834 ASSERT(jssp.Is(StackPointer())); |
2839 | 2835 |
2840 Ldr(fp_scratch, FieldMemOperand(object, HeapNumber::kValueOffset)); | 2836 Ldr(fp_scratch, FieldMemOperand(object, HeapNumber::kValueOffset)); |
2841 | 2837 |
2842 // Try to convert the double to an int64. If successful, the bottom 32 bits | 2838 // Try to convert the double to an int64. If successful, the bottom 32 bits |
2843 // contain our truncated int32 result. | 2839 // contain our truncated int32 result. |
2844 TryConvertDoubleToInt64(result, fp_scratch, &done); | 2840 TryConvertDoubleToInt64(result, fp_scratch, &done); |
2845 | 2841 |
2846 // If we fell through then inline version didn't succeed - call stub instead. | 2842 // If we fell through then inline version didn't succeed - call stub instead. |
2847 Push(lr); | 2843 Push(lr); |
2848 DoubleToIStub stub(object, | 2844 DoubleToIStub stub(object, |
2849 result, | 2845 result, |
2850 HeapNumber::kValueOffset - kHeapObjectTag, | 2846 HeapNumber::kValueOffset - kHeapObjectTag, |
2851 true, // is_truncating | 2847 true, // is_truncating |
2852 true); // skip_fastpath | 2848 true); // skip_fastpath |
2853 CallStub(&stub); // DoubleToIStub preserves any registers it needs to clobber | 2849 CallStub(&stub); // DoubleToIStub preserves any registers it needs to clobber |
2854 Pop(lr); | 2850 Pop(lr); |
2855 | 2851 |
2856 Bind(&done); | 2852 Bind(&done); |
2857 | |
2858 // TODO(rmcilroy): Remove this Sxtw once the following bug is fixed: | |
2859 // https://code.google.com/p/v8/issues/detail?id=3149 | |
2860 Sxtw(result, result.W()); | |
2861 } | 2853 } |
2862 | 2854 |
2863 | 2855 |
2864 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { | 2856 void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { |
2865 if (frame_mode == BUILD_STUB_FRAME) { | 2857 if (frame_mode == BUILD_STUB_FRAME) { |
2866 ASSERT(StackPointer().Is(jssp)); | 2858 ASSERT(StackPointer().Is(jssp)); |
2867 UseScratchRegisterScope temps(this); | 2859 UseScratchRegisterScope temps(this); |
2868 Register temp = temps.AcquireX(); | 2860 Register temp = temps.AcquireX(); |
2869 __ Mov(temp, Operand(Smi::FromInt(StackFrame::STUB))); | 2861 __ Mov(temp, Operand(Smi::FromInt(StackFrame::STUB))); |
2870 // Compiled stubs don't age, and so they don't need the predictable code | 2862 // Compiled stubs don't age, and so they don't need the predictable code |
(...skipping 2258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5129 } | 5121 } |
5130 } | 5122 } |
5131 | 5123 |
5132 | 5124 |
5133 #undef __ | 5125 #undef __ |
5134 | 5126 |
5135 | 5127 |
5136 } } // namespace v8::internal | 5128 } } // namespace v8::internal |
5137 | 5129 |
5138 #endif // V8_TARGET_ARCH_A64 | 5130 #endif // V8_TARGET_ARCH_A64 |
OLD | NEW |