| 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/crankshaft/arm64/lithium-codegen-arm64.h" |     5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" | 
|     6  |     6  | 
|     7 #include "src/arm64/frames-arm64.h" |     7 #include "src/arm64/frames-arm64.h" | 
|     8 #include "src/base/bits.h" |     8 #include "src/base/bits.h" | 
|     9 #include "src/code-factory.h" |     9 #include "src/code-factory.h" | 
|    10 #include "src/code-stubs.h" |    10 #include "src/code-stubs.h" | 
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   270                        environment->HasTaggedValueAt(env_offset + i), |   270                        environment->HasTaggedValueAt(env_offset + i), | 
|   271                        environment->HasUint32ValueAt(env_offset + i), |   271                        environment->HasUint32ValueAt(env_offset + i), | 
|   272                        object_index_pointer, |   272                        object_index_pointer, | 
|   273                        dematerialized_index_pointer); |   273                        dematerialized_index_pointer); | 
|   274     } |   274     } | 
|   275     return; |   275     return; | 
|   276   } |   276   } | 
|   277  |   277  | 
|   278   if (op->IsStackSlot()) { |   278   if (op->IsStackSlot()) { | 
|   279     int index = op->index(); |   279     int index = op->index(); | 
|   280     if (index >= 0) { |  | 
|   281       index += StandardFrameConstants::kFixedFrameSize / kPointerSize; |  | 
|   282     } |  | 
|   283     if (is_tagged) { |   280     if (is_tagged) { | 
|   284       translation->StoreStackSlot(index); |   281       translation->StoreStackSlot(index); | 
|   285     } else if (is_uint32) { |   282     } else if (is_uint32) { | 
|   286       translation->StoreUint32StackSlot(index); |   283       translation->StoreUint32StackSlot(index); | 
|   287     } else { |   284     } else { | 
|   288       translation->StoreInt32StackSlot(index); |   285       translation->StoreInt32StackSlot(index); | 
|   289     } |   286     } | 
|   290   } else if (op->IsDoubleStackSlot()) { |   287   } else if (op->IsDoubleStackSlot()) { | 
|   291     int index = op->index(); |   288     int index = op->index(); | 
|   292     if (index >= 0) { |  | 
|   293       index += StandardFrameConstants::kFixedFrameSize / kPointerSize; |  | 
|   294     } |  | 
|   295     translation->StoreDoubleStackSlot(index); |   289     translation->StoreDoubleStackSlot(index); | 
|   296   } else if (op->IsRegister()) { |   290   } else if (op->IsRegister()) { | 
|   297     Register reg = ToRegister(op); |   291     Register reg = ToRegister(op); | 
|   298     if (is_tagged) { |   292     if (is_tagged) { | 
|   299       translation->StoreRegister(reg); |   293       translation->StoreRegister(reg); | 
|   300     } else if (is_uint32) { |   294     } else if (is_uint32) { | 
|   301       translation->StoreUint32Register(reg); |   295       translation->StoreUint32Register(reg); | 
|   302     } else { |   296     } else { | 
|   303       translation->StoreInt32Register(reg); |   297       translation->StoreInt32Register(reg); | 
|   304     } |   298     } | 
| (...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   857   if (!is_aborted()) status_ = DONE; |   851   if (!is_aborted()) status_ = DONE; | 
|   858   return !is_aborted(); |   852   return !is_aborted(); | 
|   859 } |   853 } | 
|   860  |   854  | 
|   861  |   855  | 
|   862 bool LCodeGen::GenerateSafepointTable() { |   856 bool LCodeGen::GenerateSafepointTable() { | 
|   863   DCHECK(is_done()); |   857   DCHECK(is_done()); | 
|   864   // We do not know how much data will be emitted for the safepoint table, so |   858   // We do not know how much data will be emitted for the safepoint table, so | 
|   865   // force emission of the veneer pool. |   859   // force emission of the veneer pool. | 
|   866   masm()->CheckVeneerPool(true, true); |   860   masm()->CheckVeneerPool(true, true); | 
|   867   safepoints_.Emit(masm(), GetStackSlotCount()); |   861   safepoints_.Emit(masm(), GetTotalFrameSlotCount()); | 
|   868   return !is_aborted(); |   862   return !is_aborted(); | 
|   869 } |   863 } | 
|   870  |   864  | 
|   871  |   865  | 
|   872 void LCodeGen::FinishCode(Handle<Code> code) { |   866 void LCodeGen::FinishCode(Handle<Code> code) { | 
|   873   DCHECK(is_done()); |   867   DCHECK(is_done()); | 
|   874   code->set_stack_slots(GetStackSlotCount()); |   868   code->set_stack_slots(GetStackSlotCount()); | 
|   875   code->set_safepoint_table_offset(safepoints_.GetCodeOffset()); |   869   code->set_safepoint_table_offset(safepoints_.GetCodeOffset()); | 
|   876   PopulateDeoptimizationData(code); |   870   PopulateDeoptimizationData(code); | 
|   877 } |   871 } | 
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1148   return -(index + 1) * kPointerSize; |  1142   return -(index + 1) * kPointerSize; | 
|  1149 } |  1143 } | 
|  1150  |  1144  | 
|  1151  |  1145  | 
|  1152 MemOperand LCodeGen::ToMemOperand(LOperand* op, StackMode stack_mode) const { |  1146 MemOperand LCodeGen::ToMemOperand(LOperand* op, StackMode stack_mode) const { | 
|  1153   DCHECK(op != NULL); |  1147   DCHECK(op != NULL); | 
|  1154   DCHECK(!op->IsRegister()); |  1148   DCHECK(!op->IsRegister()); | 
|  1155   DCHECK(!op->IsDoubleRegister()); |  1149   DCHECK(!op->IsDoubleRegister()); | 
|  1156   DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); |  1150   DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot()); | 
|  1157   if (NeedsEagerFrame()) { |  1151   if (NeedsEagerFrame()) { | 
|  1158     int fp_offset = StackSlotOffset(op->index()); |  1152     int fp_offset = FrameSlotToFPOffset(op->index()); | 
|  1159     // Loads and stores have a bigger reach in positive offset than negative. |  1153     // Loads and stores have a bigger reach in positive offset than negative. | 
|  1160     // We try to access using jssp (positive offset) first, then fall back to |  1154     // We try to access using jssp (positive offset) first, then fall back to | 
|  1161     // fp (negative offset) if that fails. |  1155     // fp (negative offset) if that fails. | 
|  1162     // |  1156     // | 
|  1163     // We can reference a stack slot from jssp only if we know how much we've |  1157     // We can reference a stack slot from jssp only if we know how much we've | 
|  1164     // put on the stack. We don't know this in the following cases: |  1158     // put on the stack. We don't know this in the following cases: | 
|  1165     // - stack_mode != kCanUseStackPointer: this is the case when deferred |  1159     // - stack_mode != kCanUseStackPointer: this is the case when deferred | 
|  1166     //   code has saved the registers. |  1160     //   code has saved the registers. | 
|  1167     // - saves_caller_doubles(): some double registers have been pushed, jssp |  1161     // - saves_caller_doubles(): some double registers have been pushed, jssp | 
|  1168     //   references the end of the double registers and not the end of the stack |  1162     //   references the end of the double registers and not the end of the stack | 
| (...skipping 4573 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5742   Handle<ScopeInfo> scope_info = instr->scope_info(); |  5736   Handle<ScopeInfo> scope_info = instr->scope_info(); | 
|  5743   __ Push(scope_info); |  5737   __ Push(scope_info); | 
|  5744   __ Push(ToRegister(instr->function())); |  5738   __ Push(ToRegister(instr->function())); | 
|  5745   CallRuntime(Runtime::kPushBlockContext, instr); |  5739   CallRuntime(Runtime::kPushBlockContext, instr); | 
|  5746   RecordSafepoint(Safepoint::kNoLazyDeopt); |  5740   RecordSafepoint(Safepoint::kNoLazyDeopt); | 
|  5747 } |  5741 } | 
|  5748  |  5742  | 
|  5749  |  5743  | 
|  5750 }  // namespace internal |  5744 }  // namespace internal | 
|  5751 }  // namespace v8 |  5745 }  // namespace v8 | 
| OLD | NEW |