| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/compiler/code-generator-impl.h" | 6 #include "src/compiler/code-generator-impl.h" |
| 7 #include "src/compiler/gap-resolver.h" | 7 #include "src/compiler/gap-resolver.h" |
| 8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
| 9 #include "src/mips/macro-assembler-mips.h" | 9 #include "src/mips/macro-assembler-mips.h" |
| 10 #include "src/scopes.h" | 10 #include "src/scopes.h" |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 switch (ArchOpcodeField::decode(opcode)) { | 401 switch (ArchOpcodeField::decode(opcode)) { |
| 402 case kArchCallCodeObject: { | 402 case kArchCallCodeObject: { |
| 403 EnsureSpaceForLazyDeopt(); | 403 EnsureSpaceForLazyDeopt(); |
| 404 if (instr->InputAt(0)->IsImmediate()) { | 404 if (instr->InputAt(0)->IsImmediate()) { |
| 405 __ Call(Handle<Code>::cast(i.InputHeapObject(0)), | 405 __ Call(Handle<Code>::cast(i.InputHeapObject(0)), |
| 406 RelocInfo::CODE_TARGET); | 406 RelocInfo::CODE_TARGET); |
| 407 } else { | 407 } else { |
| 408 __ addiu(at, i.InputRegister(0), Code::kHeaderSize - kHeapObjectTag); | 408 __ addiu(at, i.InputRegister(0), Code::kHeaderSize - kHeapObjectTag); |
| 409 __ Call(at); | 409 __ Call(at); |
| 410 } | 410 } |
| 411 AddSafepointAndDeopt(instr); | 411 RecordCallPosition(instr); |
| 412 break; | 412 break; |
| 413 } | 413 } |
| 414 case kArchCallJSFunction: { | 414 case kArchCallJSFunction: { |
| 415 EnsureSpaceForLazyDeopt(); | 415 EnsureSpaceForLazyDeopt(); |
| 416 Register func = i.InputRegister(0); | 416 Register func = i.InputRegister(0); |
| 417 if (FLAG_debug_code) { | 417 if (FLAG_debug_code) { |
| 418 // Check the function's context matches the context argument. | 418 // Check the function's context matches the context argument. |
| 419 __ lw(kScratchReg, FieldMemOperand(func, JSFunction::kContextOffset)); | 419 __ lw(kScratchReg, FieldMemOperand(func, JSFunction::kContextOffset)); |
| 420 __ Assert(eq, kWrongFunctionContext, cp, Operand(kScratchReg)); | 420 __ Assert(eq, kWrongFunctionContext, cp, Operand(kScratchReg)); |
| 421 } | 421 } |
| 422 | 422 |
| 423 __ lw(at, FieldMemOperand(func, JSFunction::kCodeEntryOffset)); | 423 __ lw(at, FieldMemOperand(func, JSFunction::kCodeEntryOffset)); |
| 424 __ Call(at); | 424 __ Call(at); |
| 425 AddSafepointAndDeopt(instr); | 425 RecordCallPosition(instr); |
| 426 break; | 426 break; |
| 427 } | 427 } |
| 428 case kArchJmp: | 428 case kArchJmp: |
| 429 AssembleArchJump(i.InputRpo(0)); | 429 AssembleArchJump(i.InputRpo(0)); |
| 430 break; | 430 break; |
| 431 case kArchLookupSwitch: | 431 case kArchLookupSwitch: |
| 432 AssembleArchLookupSwitch(instr); | 432 AssembleArchLookupSwitch(instr); |
| 433 break; | 433 break; |
| 434 case kArchTableSwitch: | 434 case kArchTableSwitch: |
| 435 AssembleArchTableSwitch(instr); | 435 AssembleArchTableSwitch(instr); |
| (...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1198 } | 1198 } |
| 1199 } | 1199 } |
| 1200 MarkLazyDeoptSite(); | 1200 MarkLazyDeoptSite(); |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 #undef __ | 1203 #undef __ |
| 1204 | 1204 |
| 1205 } // namespace compiler | 1205 } // namespace compiler |
| 1206 } // namespace internal | 1206 } // namespace internal |
| 1207 } // namespace v8 | 1207 } // namespace v8 |
| OLD | NEW |