| 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 449 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 460         Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0)); | 460         Handle<Code> code = Handle<Code>::cast(i.InputHeapObject(0)); | 
| 461         __ jmp(code, RelocInfo::CODE_TARGET); | 461         __ jmp(code, RelocInfo::CODE_TARGET); | 
| 462       } else { | 462       } else { | 
| 463         Register reg = i.InputRegister(0); | 463         Register reg = i.InputRegister(0); | 
| 464         __ add(reg, Immediate(Code::kHeaderSize - kHeapObjectTag)); | 464         __ add(reg, Immediate(Code::kHeaderSize - kHeapObjectTag)); | 
| 465         __ jmp(reg); | 465         __ jmp(reg); | 
| 466       } | 466       } | 
| 467       frame_access_state()->ClearSPDelta(); | 467       frame_access_state()->ClearSPDelta(); | 
| 468       break; | 468       break; | 
| 469     } | 469     } | 
|  | 470     case kArchTailCallAddress: { | 
|  | 471       int stack_param_delta = i.InputInt32(instr->InputCount() - 1); | 
|  | 472       AssembleDeconstructActivationRecord(stack_param_delta); | 
|  | 473       CHECK(!HasImmediateInput(instr, 0)); | 
|  | 474       Register reg = i.InputRegister(0); | 
|  | 475       __ jmp(reg); | 
|  | 476       frame_access_state()->ClearSPDelta(); | 
|  | 477       break; | 
|  | 478     } | 
| 470     case kArchCallJSFunction: { | 479     case kArchCallJSFunction: { | 
| 471       EnsureSpaceForLazyDeopt(); | 480       EnsureSpaceForLazyDeopt(); | 
| 472       Register func = i.InputRegister(0); | 481       Register func = i.InputRegister(0); | 
| 473       if (FLAG_debug_code) { | 482       if (FLAG_debug_code) { | 
| 474         // Check the function's context matches the context argument. | 483         // Check the function's context matches the context argument. | 
| 475         __ cmp(esi, FieldOperand(func, JSFunction::kContextOffset)); | 484         __ cmp(esi, FieldOperand(func, JSFunction::kContextOffset)); | 
| 476         __ Assert(equal, kWrongFunctionContext); | 485         __ Assert(equal, kWrongFunctionContext); | 
| 477       } | 486       } | 
| 478       __ call(FieldOperand(func, JSFunction::kCodeEntryOffset)); | 487       __ call(FieldOperand(func, JSFunction::kCodeEntryOffset)); | 
| 479       RecordCallPosition(instr); | 488       RecordCallPosition(instr); | 
| (...skipping 1422 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1902     int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 1911     int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 
| 1903     __ Nop(padding_size); | 1912     __ Nop(padding_size); | 
| 1904   } | 1913   } | 
| 1905 } | 1914 } | 
| 1906 | 1915 | 
| 1907 #undef __ | 1916 #undef __ | 
| 1908 | 1917 | 
| 1909 }  // namespace compiler | 1918 }  // namespace compiler | 
| 1910 }  // namespace internal | 1919 }  // namespace internal | 
| 1911 }  // namespace v8 | 1920 }  // namespace v8 | 
| OLD | NEW | 
|---|