| 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-arm64.h" | 5 #include "src/crankshaft/arm64/lithium-arm64.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" | 9 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" |
| 10 #include "src/crankshaft/hydrogen-osr.h" | 10 #include "src/crankshaft/hydrogen-osr.h" |
| (...skipping 1696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1707 } | 1707 } |
| 1708 return result; | 1708 return result; |
| 1709 } | 1709 } |
| 1710 } else { | 1710 } else { |
| 1711 DCHECK((instr->representation().IsInteger32() && | 1711 DCHECK((instr->representation().IsInteger32() && |
| 1712 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || | 1712 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || |
| 1713 (instr->representation().IsDouble() && | 1713 (instr->representation().IsDouble() && |
| 1714 IsDoubleOrFloatElementsKind(instr->elements_kind()))); | 1714 IsDoubleOrFloatElementsKind(instr->elements_kind()))); |
| 1715 | 1715 |
| 1716 LOperand* temp = instr->key()->IsConstant() ? NULL : TempRegister(); | 1716 LOperand* temp = instr->key()->IsConstant() ? NULL : TempRegister(); |
| 1717 LInstruction* result = DefineAsRegister( | 1717 LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); |
| 1718 new(zone()) LLoadKeyedExternal(elements, key, temp)); | 1718 LInstruction* result = DefineAsRegister(new (zone()) LLoadKeyedExternal( |
| 1719 elements, key, backing_store_owner, temp)); |
| 1719 if (elements_kind == UINT32_ELEMENTS && | 1720 if (elements_kind == UINT32_ELEMENTS && |
| 1720 !instr->CheckFlag(HInstruction::kUint32)) { | 1721 !instr->CheckFlag(HInstruction::kUint32)) { |
| 1721 result = AssignEnvironment(result); | 1722 result = AssignEnvironment(result); |
| 1722 } | 1723 } |
| 1723 return result; | 1724 return result; |
| 1724 } | 1725 } |
| 1725 } | 1726 } |
| 1726 | 1727 |
| 1727 | 1728 |
| 1728 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 1729 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { |
| (...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2334 val = UseRegister(instr->value()); | 2335 val = UseRegister(instr->value()); |
| 2335 temp = instr->key()->IsConstant() ? NULL : TempRegister(); | 2336 temp = instr->key()->IsConstant() ? NULL : TempRegister(); |
| 2336 } | 2337 } |
| 2337 | 2338 |
| 2338 if (instr->is_fixed_typed_array()) { | 2339 if (instr->is_fixed_typed_array()) { |
| 2339 DCHECK((instr->value()->representation().IsInteger32() && | 2340 DCHECK((instr->value()->representation().IsInteger32() && |
| 2340 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || | 2341 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || |
| 2341 (instr->value()->representation().IsDouble() && | 2342 (instr->value()->representation().IsDouble() && |
| 2342 IsDoubleOrFloatElementsKind(instr->elements_kind()))); | 2343 IsDoubleOrFloatElementsKind(instr->elements_kind()))); |
| 2343 DCHECK(instr->elements()->representation().IsExternal()); | 2344 DCHECK(instr->elements()->representation().IsExternal()); |
| 2344 return new(zone()) LStoreKeyedExternal(elements, key, val, temp); | 2345 LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); |
| 2346 return new (zone()) |
| 2347 LStoreKeyedExternal(elements, key, val, backing_store_owner, temp); |
| 2345 | 2348 |
| 2346 } else if (instr->value()->representation().IsDouble()) { | 2349 } else if (instr->value()->representation().IsDouble()) { |
| 2347 DCHECK(instr->elements()->representation().IsTagged()); | 2350 DCHECK(instr->elements()->representation().IsTagged()); |
| 2348 return new(zone()) LStoreKeyedFixedDouble(elements, key, val, temp); | 2351 return new(zone()) LStoreKeyedFixedDouble(elements, key, val, temp); |
| 2349 | 2352 |
| 2350 } else { | 2353 } else { |
| 2351 DCHECK(instr->elements()->representation().IsTagged()); | 2354 DCHECK(instr->elements()->representation().IsTagged()); |
| 2352 DCHECK(instr->value()->representation().IsSmiOrTagged() || | 2355 DCHECK(instr->value()->representation().IsSmiOrTagged() || |
| 2353 instr->value()->representation().IsInteger32()); | 2356 instr->value()->representation().IsInteger32()); |
| 2354 return new(zone()) LStoreKeyedFixed(elements, key, val, temp); | 2357 return new(zone()) LStoreKeyedFixed(elements, key, val, temp); |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2754 LOperand* context = UseFixed(instr->context(), cp); | 2757 LOperand* context = UseFixed(instr->context(), cp); |
| 2755 LOperand* function = UseRegisterAtStart(instr->function()); | 2758 LOperand* function = UseRegisterAtStart(instr->function()); |
| 2756 LAllocateBlockContext* result = | 2759 LAllocateBlockContext* result = |
| 2757 new(zone()) LAllocateBlockContext(context, function); | 2760 new(zone()) LAllocateBlockContext(context, function); |
| 2758 return MarkAsCall(DefineFixed(result, cp), instr); | 2761 return MarkAsCall(DefineFixed(result, cp), instr); |
| 2759 } | 2762 } |
| 2760 | 2763 |
| 2761 | 2764 |
| 2762 } // namespace internal | 2765 } // namespace internal |
| 2763 } // namespace v8 | 2766 } // namespace v8 |
| OLD | NEW |