| 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/arm64/frames-arm64.h" | 5 #include "src/arm64/frames-arm64.h" |
| 6 #include "src/arm64/lithium-codegen-arm64.h" | 6 #include "src/arm64/lithium-codegen-arm64.h" |
| 7 #include "src/arm64/lithium-gap-resolver-arm64.h" | 7 #include "src/arm64/lithium-gap-resolver-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 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 void LCodeGen::SaveCallerDoubles() { | 586 void LCodeGen::SaveCallerDoubles() { |
| 587 DCHECK(info()->saves_caller_doubles()); | 587 DCHECK(info()->saves_caller_doubles()); |
| 588 DCHECK(NeedsEagerFrame()); | 588 DCHECK(NeedsEagerFrame()); |
| 589 Comment(";;; Save clobbered callee double registers"); | 589 Comment(";;; Save clobbered callee double registers"); |
| 590 BitVector* doubles = chunk()->allocated_double_registers(); | 590 BitVector* doubles = chunk()->allocated_double_registers(); |
| 591 BitVector::Iterator iterator(doubles); | 591 BitVector::Iterator iterator(doubles); |
| 592 int count = 0; | 592 int count = 0; |
| 593 while (!iterator.Done()) { | 593 while (!iterator.Done()) { |
| 594 // TODO(all): Is this supposed to save just the callee-saved doubles? It | 594 // TODO(all): Is this supposed to save just the callee-saved doubles? It |
| 595 // looks like it's saving all of them. | 595 // looks like it's saving all of them. |
| 596 FPRegister value = FPRegister::from_code(iterator.Current()); | 596 FPRegister value = FPRegister::FromAllocationIndex(iterator.Current()); |
| 597 __ Poke(value, count * kDoubleSize); | 597 __ Poke(value, count * kDoubleSize); |
| 598 iterator.Advance(); | 598 iterator.Advance(); |
| 599 count++; | 599 count++; |
| 600 } | 600 } |
| 601 } | 601 } |
| 602 | 602 |
| 603 | 603 |
| 604 void LCodeGen::RestoreCallerDoubles() { | 604 void LCodeGen::RestoreCallerDoubles() { |
| 605 DCHECK(info()->saves_caller_doubles()); | 605 DCHECK(info()->saves_caller_doubles()); |
| 606 DCHECK(NeedsEagerFrame()); | 606 DCHECK(NeedsEagerFrame()); |
| 607 Comment(";;; Restore clobbered callee double registers"); | 607 Comment(";;; Restore clobbered callee double registers"); |
| 608 BitVector* doubles = chunk()->allocated_double_registers(); | 608 BitVector* doubles = chunk()->allocated_double_registers(); |
| 609 BitVector::Iterator iterator(doubles); | 609 BitVector::Iterator iterator(doubles); |
| 610 int count = 0; | 610 int count = 0; |
| 611 while (!iterator.Done()) { | 611 while (!iterator.Done()) { |
| 612 // TODO(all): Is this supposed to restore just the callee-saved doubles? It | 612 // TODO(all): Is this supposed to restore just the callee-saved doubles? It |
| 613 // looks like it's restoring all of them. | 613 // looks like it's restoring all of them. |
| 614 FPRegister value = FPRegister::from_code(iterator.Current()); | 614 FPRegister value = FPRegister::FromAllocationIndex(iterator.Current()); |
| 615 __ Peek(value, count * kDoubleSize); | 615 __ Peek(value, count * kDoubleSize); |
| 616 iterator.Advance(); | 616 iterator.Advance(); |
| 617 count++; | 617 count++; |
| 618 } | 618 } |
| 619 } | 619 } |
| 620 | 620 |
| 621 | 621 |
| 622 bool LCodeGen::GeneratePrologue() { | 622 bool LCodeGen::GeneratePrologue() { |
| 623 DCHECK(is_generating()); | 623 DCHECK(is_generating()); |
| 624 | 624 |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 } | 1150 } |
| 1151 } | 1151 } |
| 1152 } | 1152 } |
| 1153 last_lazy_deopt_pc_ = masm()->pc_offset(); | 1153 last_lazy_deopt_pc_ = masm()->pc_offset(); |
| 1154 } | 1154 } |
| 1155 | 1155 |
| 1156 | 1156 |
| 1157 Register LCodeGen::ToRegister(LOperand* op) const { | 1157 Register LCodeGen::ToRegister(LOperand* op) const { |
| 1158 // TODO(all): support zero register results, as ToRegister32. | 1158 // TODO(all): support zero register results, as ToRegister32. |
| 1159 DCHECK((op != NULL) && op->IsRegister()); | 1159 DCHECK((op != NULL) && op->IsRegister()); |
| 1160 return Register::from_code(op->index()); | 1160 return Register::FromAllocationIndex(op->index()); |
| 1161 } | 1161 } |
| 1162 | 1162 |
| 1163 | 1163 |
| 1164 Register LCodeGen::ToRegister32(LOperand* op) const { | 1164 Register LCodeGen::ToRegister32(LOperand* op) const { |
| 1165 DCHECK(op != NULL); | 1165 DCHECK(op != NULL); |
| 1166 if (op->IsConstantOperand()) { | 1166 if (op->IsConstantOperand()) { |
| 1167 // If this is a constant operand, the result must be the zero register. | 1167 // If this is a constant operand, the result must be the zero register. |
| 1168 DCHECK(ToInteger32(LConstantOperand::cast(op)) == 0); | 1168 DCHECK(ToInteger32(LConstantOperand::cast(op)) == 0); |
| 1169 return wzr; | 1169 return wzr; |
| 1170 } else { | 1170 } else { |
| 1171 return ToRegister(op).W(); | 1171 return ToRegister(op).W(); |
| 1172 } | 1172 } |
| 1173 } | 1173 } |
| 1174 | 1174 |
| 1175 | 1175 |
| 1176 Smi* LCodeGen::ToSmi(LConstantOperand* op) const { | 1176 Smi* LCodeGen::ToSmi(LConstantOperand* op) const { |
| 1177 HConstant* constant = chunk_->LookupConstant(op); | 1177 HConstant* constant = chunk_->LookupConstant(op); |
| 1178 return Smi::FromInt(constant->Integer32Value()); | 1178 return Smi::FromInt(constant->Integer32Value()); |
| 1179 } | 1179 } |
| 1180 | 1180 |
| 1181 | 1181 |
| 1182 DoubleRegister LCodeGen::ToDoubleRegister(LOperand* op) const { | 1182 DoubleRegister LCodeGen::ToDoubleRegister(LOperand* op) const { |
| 1183 DCHECK((op != NULL) && op->IsDoubleRegister()); | 1183 DCHECK((op != NULL) && op->IsDoubleRegister()); |
| 1184 return DoubleRegister::from_code(op->index()); | 1184 return DoubleRegister::FromAllocationIndex(op->index()); |
| 1185 } | 1185 } |
| 1186 | 1186 |
| 1187 | 1187 |
| 1188 Operand LCodeGen::ToOperand(LOperand* op) { | 1188 Operand LCodeGen::ToOperand(LOperand* op) { |
| 1189 DCHECK(op != NULL); | 1189 DCHECK(op != NULL); |
| 1190 if (op->IsConstantOperand()) { | 1190 if (op->IsConstantOperand()) { |
| 1191 LConstantOperand* const_op = LConstantOperand::cast(op); | 1191 LConstantOperand* const_op = LConstantOperand::cast(op); |
| 1192 HConstant* constant = chunk()->LookupConstant(const_op); | 1192 HConstant* constant = chunk()->LookupConstant(const_op); |
| 1193 Representation r = chunk_->LookupLiteralRepresentation(const_op); | 1193 Representation r = chunk_->LookupLiteralRepresentation(const_op); |
| 1194 if (r.IsSmi()) { | 1194 if (r.IsSmi()) { |
| (...skipping 4810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6005 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6005 Handle<ScopeInfo> scope_info = instr->scope_info(); |
| 6006 __ Push(scope_info); | 6006 __ Push(scope_info); |
| 6007 __ Push(ToRegister(instr->function())); | 6007 __ Push(ToRegister(instr->function())); |
| 6008 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6008 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 6009 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6009 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 6010 } | 6010 } |
| 6011 | 6011 |
| 6012 | 6012 |
| 6013 } // namespace internal | 6013 } // namespace internal |
| 6014 } // namespace v8 | 6014 } // namespace v8 |
| OLD | NEW |