OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
8 #include "src/compiler/code-generator-impl.h" | 8 #include "src/compiler/code-generator-impl.h" |
9 #include "src/compiler/gap-resolver.h" | 9 #include "src/compiler/gap-resolver.h" |
10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 frame_access_state()->GetFrameOffset(i.InputInt32(0)); | 610 frame_access_state()->GetFrameOffset(i.InputInt32(0)); |
611 Register base; | 611 Register base; |
612 if (offset.from_stack_pointer()) { | 612 if (offset.from_stack_pointer()) { |
613 base = esp; | 613 base = esp; |
614 } else { | 614 } else { |
615 base = ebp; | 615 base = ebp; |
616 } | 616 } |
617 __ lea(i.OutputRegister(), Operand(base, offset.offset())); | 617 __ lea(i.OutputRegister(), Operand(base, offset.offset())); |
618 break; | 618 break; |
619 } | 619 } |
| 620 case kIeee754Float64Log: { |
| 621 // Pass one double as argument on the stack. |
| 622 __ PrepareCallCFunction(2, eax); |
| 623 __ movsd(Operand(esp, 0 * kDoubleSize), i.InputDoubleRegister(0)); |
| 624 __ CallCFunction(ExternalReference::ieee754_log_function(isolate()), 2); |
| 625 // Return value is in st(0) on ia32. |
| 626 // Store it into the result register. |
| 627 __ sub(esp, Immediate(kDoubleSize)); |
| 628 __ fstp_d(Operand(esp, 0)); |
| 629 __ movsd(i.OutputDoubleRegister(), Operand(esp, 0)); |
| 630 __ add(esp, Immediate(kDoubleSize)); |
| 631 break; |
| 632 } |
620 case kIA32Add: | 633 case kIA32Add: |
621 if (HasImmediateInput(instr, 1)) { | 634 if (HasImmediateInput(instr, 1)) { |
622 __ add(i.InputOperand(0), i.InputImmediate(1)); | 635 __ add(i.InputOperand(0), i.InputImmediate(1)); |
623 } else { | 636 } else { |
624 __ add(i.InputRegister(0), i.InputOperand(1)); | 637 __ add(i.InputRegister(0), i.InputOperand(1)); |
625 } | 638 } |
626 break; | 639 break; |
627 case kIA32And: | 640 case kIA32And: |
628 if (HasImmediateInput(instr, 1)) { | 641 if (HasImmediateInput(instr, 1)) { |
629 __ and_(i.InputOperand(0), i.InputImmediate(1)); | 642 __ and_(i.InputOperand(0), i.InputImmediate(1)); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 break; | 826 break; |
814 case kIA32Lzcnt: | 827 case kIA32Lzcnt: |
815 __ Lzcnt(i.OutputRegister(), i.InputOperand(0)); | 828 __ Lzcnt(i.OutputRegister(), i.InputOperand(0)); |
816 break; | 829 break; |
817 case kIA32Tzcnt: | 830 case kIA32Tzcnt: |
818 __ Tzcnt(i.OutputRegister(), i.InputOperand(0)); | 831 __ Tzcnt(i.OutputRegister(), i.InputOperand(0)); |
819 break; | 832 break; |
820 case kIA32Popcnt: | 833 case kIA32Popcnt: |
821 __ Popcnt(i.OutputRegister(), i.InputOperand(0)); | 834 __ Popcnt(i.OutputRegister(), i.InputOperand(0)); |
822 break; | 835 break; |
823 case kX87Float64Log: | |
824 __ sub(esp, Immediate(kDoubleSize)); | |
825 __ movsd(Operand(esp, 0), i.InputDoubleRegister(0)); | |
826 __ fldln2(); | |
827 __ fld_d(Operand(esp, 0)); | |
828 __ fyl2x(); | |
829 __ fstp_d(Operand(esp, 0)); | |
830 __ movsd(i.OutputDoubleRegister(), Operand(esp, 0)); | |
831 __ add(esp, Immediate(kDoubleSize)); | |
832 break; | |
833 case kSSEFloat32Cmp: | 836 case kSSEFloat32Cmp: |
834 __ ucomiss(i.InputDoubleRegister(0), i.InputOperand(1)); | 837 __ ucomiss(i.InputDoubleRegister(0), i.InputOperand(1)); |
835 break; | 838 break; |
836 case kSSEFloat32Add: | 839 case kSSEFloat32Add: |
837 __ addss(i.InputDoubleRegister(0), i.InputOperand(1)); | 840 __ addss(i.InputDoubleRegister(0), i.InputOperand(1)); |
838 break; | 841 break; |
839 case kSSEFloat32Sub: | 842 case kSSEFloat32Sub: |
840 __ subss(i.InputDoubleRegister(0), i.InputOperand(1)); | 843 __ subss(i.InputDoubleRegister(0), i.InputOperand(1)); |
841 break; | 844 break; |
842 case kSSEFloat32Mul: | 845 case kSSEFloat32Mul: |
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1972 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 1975 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
1973 __ Nop(padding_size); | 1976 __ Nop(padding_size); |
1974 } | 1977 } |
1975 } | 1978 } |
1976 | 1979 |
1977 #undef __ | 1980 #undef __ |
1978 | 1981 |
1979 } // namespace compiler | 1982 } // namespace compiler |
1980 } // namespace internal | 1983 } // namespace internal |
1981 } // namespace v8 | 1984 } // namespace v8 |
OLD | NEW |