| 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 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1691 break; | 1691 break; |
| 1692 case kX87Poke: { | 1692 case kX87Poke: { |
| 1693 int const slot = MiscField::decode(instr->opcode()); | 1693 int const slot = MiscField::decode(instr->opcode()); |
| 1694 if (HasImmediateInput(instr, 0)) { | 1694 if (HasImmediateInput(instr, 0)) { |
| 1695 __ mov(Operand(esp, slot * kPointerSize), i.InputImmediate(0)); | 1695 __ mov(Operand(esp, slot * kPointerSize), i.InputImmediate(0)); |
| 1696 } else { | 1696 } else { |
| 1697 __ mov(Operand(esp, slot * kPointerSize), i.InputRegister(0)); | 1697 __ mov(Operand(esp, slot * kPointerSize), i.InputRegister(0)); |
| 1698 } | 1698 } |
| 1699 break; | 1699 break; |
| 1700 } | 1700 } |
| 1701 case kX87Xchgb: { |
| 1702 size_t index = 0; |
| 1703 Operand operand = i.MemoryOperand(&index); |
| 1704 __ xchg_b(i.InputRegister(index), operand); |
| 1705 break; |
| 1706 } |
| 1707 case kX87Xchgw: { |
| 1708 size_t index = 0; |
| 1709 Operand operand = i.MemoryOperand(&index); |
| 1710 __ xchg_w(i.InputRegister(index), operand); |
| 1711 break; |
| 1712 } |
| 1713 case kX87Xchgl: { |
| 1714 size_t index = 0; |
| 1715 Operand operand = i.MemoryOperand(&index); |
| 1716 __ xchg(i.InputRegister(index), operand); |
| 1717 break; |
| 1718 } |
| 1701 case kX87PushFloat32: | 1719 case kX87PushFloat32: |
| 1702 __ lea(esp, Operand(esp, -kFloatSize)); | 1720 __ lea(esp, Operand(esp, -kFloatSize)); |
| 1703 if (instr->InputAt(0)->IsDoubleStackSlot()) { | 1721 if (instr->InputAt(0)->IsDoubleStackSlot()) { |
| 1704 __ fld_s(i.InputOperand(0)); | 1722 __ fld_s(i.InputOperand(0)); |
| 1705 __ fstp_s(MemOperand(esp, 0)); | 1723 __ fstp_s(MemOperand(esp, 0)); |
| 1706 } else if (instr->InputAt(0)->IsDoubleRegister()) { | 1724 } else if (instr->InputAt(0)->IsDoubleRegister()) { |
| 1707 __ fst_s(MemOperand(esp, 0)); | 1725 __ fst_s(MemOperand(esp, 0)); |
| 1708 } else { | 1726 } else { |
| 1709 UNREACHABLE(); | 1727 UNREACHABLE(); |
| 1710 } | 1728 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1764 } | 1782 } |
| 1765 case kCheckedLoadWord64: | 1783 case kCheckedLoadWord64: |
| 1766 case kCheckedStoreWord64: | 1784 case kCheckedStoreWord64: |
| 1767 UNREACHABLE(); // currently unsupported checked int64 load/store. | 1785 UNREACHABLE(); // currently unsupported checked int64 load/store. |
| 1768 break; | 1786 break; |
| 1769 case kAtomicLoadInt8: | 1787 case kAtomicLoadInt8: |
| 1770 case kAtomicLoadUint8: | 1788 case kAtomicLoadUint8: |
| 1771 case kAtomicLoadInt16: | 1789 case kAtomicLoadInt16: |
| 1772 case kAtomicLoadUint16: | 1790 case kAtomicLoadUint16: |
| 1773 case kAtomicLoadWord32: | 1791 case kAtomicLoadWord32: |
| 1792 case kAtomicStoreWord8: |
| 1793 case kAtomicStoreWord16: |
| 1794 case kAtomicStoreWord32: |
| 1774 UNREACHABLE(); // Won't be generated by instruction selector. | 1795 UNREACHABLE(); // Won't be generated by instruction selector. |
| 1775 break; | 1796 break; |
| 1776 } | 1797 } |
| 1777 return kSuccess; | 1798 return kSuccess; |
| 1778 } // NOLINT(readability/fn_size) | 1799 } // NOLINT(readability/fn_size) |
| 1779 | 1800 |
| 1780 | 1801 |
| 1781 // Assembles a branch after an instruction. | 1802 // Assembles a branch after an instruction. |
| 1782 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { | 1803 void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { |
| 1783 X87OperandConverter i(this, instr); | 1804 X87OperandConverter i(this, instr); |
| (...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2468 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 2489 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
| 2469 __ Nop(padding_size); | 2490 __ Nop(padding_size); |
| 2470 } | 2491 } |
| 2471 } | 2492 } |
| 2472 | 2493 |
| 2473 #undef __ | 2494 #undef __ |
| 2474 | 2495 |
| 2475 } // namespace compiler | 2496 } // namespace compiler |
| 2476 } // namespace internal | 2497 } // namespace internal |
| 2477 } // namespace v8 | 2498 } // namespace v8 |
| OLD | NEW |