| 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 #if V8_TARGET_ARCH_X87 | 5 #if V8_TARGET_ARCH_X87 |
| 6 | 6 |
| 7 #include "src/crankshaft/x87/lithium-codegen-x87.h" | 7 #include "src/crankshaft/x87/lithium-codegen-x87.h" |
| 8 | 8 |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 1951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1962 __ fld(1); | 1962 __ fld(1); |
| 1963 __ sub(esp, Immediate(2 * kPointerSize)); | 1963 __ sub(esp, Immediate(2 * kPointerSize)); |
| 1964 __ fstp_s(MemOperand(esp, 0)); | 1964 __ fstp_s(MemOperand(esp, 0)); |
| 1965 __ fstp_s(MemOperand(esp, kPointerSize)); | 1965 __ fstp_s(MemOperand(esp, kPointerSize)); |
| 1966 __ pop(scratch_reg); | 1966 __ pop(scratch_reg); |
| 1967 __ or_(MemOperand(esp, 0), scratch_reg); | 1967 __ or_(MemOperand(esp, 0), scratch_reg); |
| 1968 X87Mov(left_reg, MemOperand(esp, 0), kX87FloatOperand); | 1968 X87Mov(left_reg, MemOperand(esp, 0), kX87FloatOperand); |
| 1969 __ pop(scratch_reg); // restore esp | 1969 __ pop(scratch_reg); // restore esp |
| 1970 } else { | 1970 } else { |
| 1971 // Since we operate on +0 and/or -0, addsd and andsd have the same effect. | 1971 // Since we operate on +0 and/or -0, addsd and andsd have the same effect. |
| 1972 X87Fxch(left_reg); | 1972 // Should put the result in stX0 |
| 1973 __ fadd(1); | 1973 __ fadd_i(1); |
| 1974 } | 1974 } |
| 1975 __ jmp(&return_left, Label::kNear); | 1975 __ jmp(&return_left, Label::kNear); |
| 1976 | 1976 |
| 1977 __ bind(&check_nan_left); | 1977 __ bind(&check_nan_left); |
| 1978 __ fld(0); | 1978 __ fld(0); |
| 1979 __ fld(0); | 1979 __ fld(0); |
| 1980 __ FCmp(); // NaN check. | 1980 __ FCmp(); // NaN check. |
| 1981 __ j(parity_even, &return_left, Label::kNear); // left == NaN. | 1981 __ j(parity_even, &return_left, Label::kNear); // left == NaN. |
| 1982 | 1982 |
| 1983 __ bind(&return_right); | 1983 __ bind(&return_right); |
| 1984 X87Fxch(left_reg); | |
| 1985 X87Mov(left_reg, right_reg); | 1984 X87Mov(left_reg, right_reg); |
| 1986 | 1985 |
| 1987 __ bind(&return_left); | 1986 __ bind(&return_left); |
| 1988 } | 1987 } |
| 1989 } | 1988 } |
| 1990 | 1989 |
| 1991 | 1990 |
| 1992 void LCodeGen::DoArithmeticD(LArithmeticD* instr) { | 1991 void LCodeGen::DoArithmeticD(LArithmeticD* instr) { |
| 1993 X87Register left = ToX87Register(instr->left()); | 1992 X87Register left = ToX87Register(instr->left()); |
| 1994 X87Register right = ToX87Register(instr->right()); | 1993 X87Register right = ToX87Register(instr->right()); |
| (...skipping 3778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5773 __ bind(deferred->exit()); | 5772 __ bind(deferred->exit()); |
| 5774 __ bind(&done); | 5773 __ bind(&done); |
| 5775 } | 5774 } |
| 5776 | 5775 |
| 5777 #undef __ | 5776 #undef __ |
| 5778 | 5777 |
| 5779 } // namespace internal | 5778 } // namespace internal |
| 5780 } // namespace v8 | 5779 } // namespace v8 |
| 5781 | 5780 |
| 5782 #endif // V8_TARGET_ARCH_X87 | 5781 #endif // V8_TARGET_ARCH_X87 |
| OLD | NEW |