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 |