| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 2771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2782 __ Branch(&return_heap_number, ne, scratch2, Operand(zero_reg)); | 2782 __ Branch(&return_heap_number, ne, scratch2, Operand(zero_reg)); |
| 2783 __ bind(¬_zero); | 2783 __ bind(¬_zero); |
| 2784 | 2784 |
| 2785 // Tag the result and return. | 2785 // Tag the result and return. |
| 2786 __ SmiTag(v0, scratch1); | 2786 __ SmiTag(v0, scratch1); |
| 2787 __ Ret(); | 2787 __ Ret(); |
| 2788 } else { | 2788 } else { |
| 2789 // DIV just falls through to allocating a heap number. | 2789 // DIV just falls through to allocating a heap number. |
| 2790 } | 2790 } |
| 2791 | 2791 |
| 2792 __ bind(&return_heap_number); |
| 2793 // Return a heap number, or fall through to type transition or runtime |
| 2794 // call if we can't. |
| 2792 if (result_type_ >= ((op_ == Token::DIV) ? BinaryOpIC::HEAP_NUMBER | 2795 if (result_type_ >= ((op_ == Token::DIV) ? BinaryOpIC::HEAP_NUMBER |
| 2793 : BinaryOpIC::INT32)) { | 2796 : BinaryOpIC::INT32)) { |
| 2794 __ bind(&return_heap_number); | |
| 2795 // We are using FPU registers so s0 is available. | 2797 // We are using FPU registers so s0 is available. |
| 2796 heap_number_result = s0; | 2798 heap_number_result = s0; |
| 2797 GenerateHeapResultAllocation(masm, | 2799 GenerateHeapResultAllocation(masm, |
| 2798 heap_number_result, | 2800 heap_number_result, |
| 2799 heap_number_map, | 2801 heap_number_map, |
| 2800 scratch1, | 2802 scratch1, |
| 2801 scratch2, | 2803 scratch2, |
| 2802 &call_runtime); | 2804 &call_runtime); |
| 2803 __ mov(v0, heap_number_result); | 2805 __ mov(v0, heap_number_result); |
| 2804 __ sdc1(f10, FieldMemOperand(v0, HeapNumber::kValueOffset)); | 2806 __ sdc1(f10, FieldMemOperand(v0, HeapNumber::kValueOffset)); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2963 __ TailCallStub(&stub); | 2965 __ TailCallStub(&stub); |
| 2964 } | 2966 } |
| 2965 | 2967 |
| 2966 break; | 2968 break; |
| 2967 } | 2969 } |
| 2968 | 2970 |
| 2969 default: | 2971 default: |
| 2970 UNREACHABLE(); | 2972 UNREACHABLE(); |
| 2971 } | 2973 } |
| 2972 | 2974 |
| 2973 if (transition.is_linked()) { | 2975 // We never expect DIV to yield an integer result, so we always generate |
| 2976 // type transition code for DIV operations expecting an integer result: the |
| 2977 // code will fall through to this type transition. |
| 2978 if (transition.is_linked() || |
| 2979 ((op_ == Token::DIV) && (result_type_ <= BinaryOpIC::INT32))) { |
| 2974 __ bind(&transition); | 2980 __ bind(&transition); |
| 2975 GenerateTypeTransition(masm); | 2981 GenerateTypeTransition(masm); |
| 2976 } | 2982 } |
| 2977 | 2983 |
| 2978 __ bind(&call_runtime); | 2984 __ bind(&call_runtime); |
| 2979 GenerateCallRuntime(masm); | 2985 GenerateCallRuntime(masm); |
| 2980 } | 2986 } |
| 2981 | 2987 |
| 2982 | 2988 |
| 2983 void BinaryOpStub::GenerateOddballStub(MacroAssembler* masm) { | 2989 void BinaryOpStub::GenerateOddballStub(MacroAssembler* masm) { |
| (...skipping 3670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6654 __ mov(result, zero_reg); | 6660 __ mov(result, zero_reg); |
| 6655 __ Ret(); | 6661 __ Ret(); |
| 6656 } | 6662 } |
| 6657 | 6663 |
| 6658 | 6664 |
| 6659 #undef __ | 6665 #undef __ |
| 6660 | 6666 |
| 6661 } } // namespace v8::internal | 6667 } } // namespace v8::internal |
| 6662 | 6668 |
| 6663 #endif // V8_TARGET_ARCH_MIPS | 6669 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |