| 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 644 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   655     case kX87Lzcnt: |   655     case kX87Lzcnt: | 
|   656       __ Lzcnt(i.OutputRegister(), i.InputOperand(0)); |   656       __ Lzcnt(i.OutputRegister(), i.InputOperand(0)); | 
|   657       break; |   657       break; | 
|   658     case kX87Popcnt: |   658     case kX87Popcnt: | 
|   659       __ Popcnt(i.OutputRegister(), i.InputOperand(0)); |   659       __ Popcnt(i.OutputRegister(), i.InputOperand(0)); | 
|   660       break; |   660       break; | 
|   661     case kX87LoadFloat64Constant: { |   661     case kX87LoadFloat64Constant: { | 
|   662       InstructionOperand* source = instr->InputAt(0); |   662       InstructionOperand* source = instr->InputAt(0); | 
|   663       InstructionOperand* destination = instr->Output(); |   663       InstructionOperand* destination = instr->Output(); | 
|   664       DCHECK(source->IsConstant()); |   664       DCHECK(source->IsConstant()); | 
|   665       X87OperandConverter g(this, NULL); |   665       X87OperandConverter g(this, nullptr); | 
|   666       Constant src_constant = g.ToConstant(source); |   666       Constant src_constant = g.ToConstant(source); | 
|   667  |   667  | 
|   668       DCHECK_EQ(Constant::kFloat64, src_constant.type()); |   668       DCHECK_EQ(Constant::kFloat64, src_constant.type()); | 
|   669       uint64_t src = bit_cast<uint64_t>(src_constant.ToFloat64()); |   669       uint64_t src = bit_cast<uint64_t>(src_constant.ToFloat64()); | 
|   670       uint32_t lower = static_cast<uint32_t>(src); |   670       uint32_t lower = static_cast<uint32_t>(src); | 
|   671       uint32_t upper = static_cast<uint32_t>(src >> 32); |   671       uint32_t upper = static_cast<uint32_t>(src >> 32); | 
|   672       if (destination->IsDoubleRegister()) { |   672       if (destination->IsDoubleRegister()) { | 
|   673         __ sub(esp, Immediate(kDoubleSize)); |   673         __ sub(esp, Immediate(kDoubleSize)); | 
|   674         __ mov(MemOperand(esp, 0), Immediate(lower)); |   674         __ mov(MemOperand(esp, 0), Immediate(lower)); | 
|   675         __ mov(MemOperand(esp, kInt32Size), Immediate(upper)); |   675         __ mov(MemOperand(esp, kInt32Size), Immediate(upper)); | 
| (...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1758   if (pop_count == 0) { |  1758   if (pop_count == 0) { | 
|  1759     __ ret(0); |  1759     __ ret(0); | 
|  1760   } else { |  1760   } else { | 
|  1761     __ Ret(pop_count * kPointerSize, ebx); |  1761     __ Ret(pop_count * kPointerSize, ebx); | 
|  1762   } |  1762   } | 
|  1763 } |  1763 } | 
|  1764  |  1764  | 
|  1765  |  1765  | 
|  1766 void CodeGenerator::AssembleMove(InstructionOperand* source, |  1766 void CodeGenerator::AssembleMove(InstructionOperand* source, | 
|  1767                                  InstructionOperand* destination) { |  1767                                  InstructionOperand* destination) { | 
|  1768   X87OperandConverter g(this, NULL); |  1768   X87OperandConverter g(this, nullptr); | 
|  1769   // Dispatch on the source and destination operand kinds.  Not all |  1769   // Dispatch on the source and destination operand kinds.  Not all | 
|  1770   // combinations are possible. |  1770   // combinations are possible. | 
|  1771   if (source->IsRegister()) { |  1771   if (source->IsRegister()) { | 
|  1772     DCHECK(destination->IsRegister() || destination->IsStackSlot()); |  1772     DCHECK(destination->IsRegister() || destination->IsStackSlot()); | 
|  1773     Register src = g.ToRegister(source); |  1773     Register src = g.ToRegister(source); | 
|  1774     Operand dst = g.ToOperand(destination); |  1774     Operand dst = g.ToOperand(destination); | 
|  1775     __ mov(dst, src); |  1775     __ mov(dst, src); | 
|  1776   } else if (source->IsStackSlot()) { |  1776   } else if (source->IsStackSlot()) { | 
|  1777     DCHECK(destination->IsRegister() || destination->IsStackSlot()); |  1777     DCHECK(destination->IsRegister() || destination->IsStackSlot()); | 
|  1778     Operand src = g.ToOperand(source); |  1778     Operand src = g.ToOperand(source); | 
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1902       } |  1902       } | 
|  1903     } |  1903     } | 
|  1904   } else { |  1904   } else { | 
|  1905     UNREACHABLE(); |  1905     UNREACHABLE(); | 
|  1906   } |  1906   } | 
|  1907 } |  1907 } | 
|  1908  |  1908  | 
|  1909  |  1909  | 
|  1910 void CodeGenerator::AssembleSwap(InstructionOperand* source, |  1910 void CodeGenerator::AssembleSwap(InstructionOperand* source, | 
|  1911                                  InstructionOperand* destination) { |  1911                                  InstructionOperand* destination) { | 
|  1912   X87OperandConverter g(this, NULL); |  1912   X87OperandConverter g(this, nullptr); | 
|  1913   // Dispatch on the source and destination operand kinds.  Not all |  1913   // Dispatch on the source and destination operand kinds.  Not all | 
|  1914   // combinations are possible. |  1914   // combinations are possible. | 
|  1915   if (source->IsRegister() && destination->IsRegister()) { |  1915   if (source->IsRegister() && destination->IsRegister()) { | 
|  1916     // Register-register. |  1916     // Register-register. | 
|  1917     Register src = g.ToRegister(source); |  1917     Register src = g.ToRegister(source); | 
|  1918     Register dst = g.ToRegister(destination); |  1918     Register dst = g.ToRegister(destination); | 
|  1919     __ xchg(dst, src); |  1919     __ xchg(dst, src); | 
|  1920   } else if (source->IsRegister() && destination->IsStackSlot()) { |  1920   } else if (source->IsRegister() && destination->IsStackSlot()) { | 
|  1921     // Register-memory. |  1921     // Register-memory. | 
|  1922     __ xchg(g.ToRegister(source), g.ToOperand(destination)); |  1922     __ xchg(g.ToRegister(source), g.ToOperand(destination)); | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1998     int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |  1998     int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 
|  1999     __ Nop(padding_size); |  1999     __ Nop(padding_size); | 
|  2000   } |  2000   } | 
|  2001 } |  2001 } | 
|  2002  |  2002  | 
|  2003 #undef __ |  2003 #undef __ | 
|  2004  |  2004  | 
|  2005 }  // namespace compiler |  2005 }  // namespace compiler | 
|  2006 }  // namespace internal |  2006 }  // namespace internal | 
|  2007 }  // namespace v8 |  2007 }  // namespace v8 | 
| OLD | NEW |