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/crankshaft/ppc/lithium-ppc.h" | 5 #include "src/crankshaft/ppc/lithium-ppc.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/crankshaft/hydrogen-osr.h" | 9 #include "src/crankshaft/hydrogen-osr.h" |
10 #include "src/crankshaft/lithium-inl.h" | 10 #include "src/crankshaft/lithium-inl.h" |
(...skipping 2147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2158 LOperand* key = UseRegisterOrConstantAtStart(instr->key()); | 2158 LOperand* key = UseRegisterOrConstantAtStart(instr->key()); |
2159 LInstruction* result = NULL; | 2159 LInstruction* result = NULL; |
2160 | 2160 |
2161 if (!instr->is_fixed_typed_array()) { | 2161 if (!instr->is_fixed_typed_array()) { |
2162 LOperand* obj = NULL; | 2162 LOperand* obj = NULL; |
2163 if (instr->representation().IsDouble()) { | 2163 if (instr->representation().IsDouble()) { |
2164 obj = UseRegister(instr->elements()); | 2164 obj = UseRegister(instr->elements()); |
2165 } else { | 2165 } else { |
2166 obj = UseRegisterAtStart(instr->elements()); | 2166 obj = UseRegisterAtStart(instr->elements()); |
2167 } | 2167 } |
2168 result = DefineAsRegister(new (zone()) LLoadKeyed(obj, key)); | 2168 result = DefineAsRegister(new (zone()) LLoadKeyed(obj, key, nullptr)); |
2169 } else { | 2169 } else { |
2170 DCHECK((instr->representation().IsInteger32() && | 2170 DCHECK((instr->representation().IsInteger32() && |
2171 !IsDoubleOrFloatElementsKind(elements_kind)) || | 2171 !IsDoubleOrFloatElementsKind(elements_kind)) || |
2172 (instr->representation().IsDouble() && | 2172 (instr->representation().IsDouble() && |
2173 IsDoubleOrFloatElementsKind(elements_kind))); | 2173 IsDoubleOrFloatElementsKind(elements_kind))); |
2174 LOperand* backing_store = UseRegister(instr->elements()); | 2174 LOperand* backing_store = UseRegister(instr->elements()); |
2175 result = DefineAsRegister(new (zone()) LLoadKeyed(backing_store, key)); | 2175 LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); |
| 2176 result = DefineAsRegister( |
| 2177 new (zone()) LLoadKeyed(backing_store, key, backing_store_owner)); |
2176 } | 2178 } |
2177 | 2179 |
2178 bool needs_environment; | 2180 bool needs_environment; |
2179 if (instr->is_fixed_typed_array()) { | 2181 if (instr->is_fixed_typed_array()) { |
2180 // see LCodeGen::DoLoadKeyedExternalArray | 2182 // see LCodeGen::DoLoadKeyedExternalArray |
2181 needs_environment = elements_kind == UINT32_ELEMENTS && | 2183 needs_environment = elements_kind == UINT32_ELEMENTS && |
2182 !instr->CheckFlag(HInstruction::kUint32); | 2184 !instr->CheckFlag(HInstruction::kUint32); |
2183 } else { | 2185 } else { |
2184 // see LCodeGen::DoLoadKeyedFixedDoubleArray and | 2186 // see LCodeGen::DoLoadKeyedFixedDoubleArray and |
2185 // LCodeGen::DoLoadKeyedFixedArray | 2187 // LCodeGen::DoLoadKeyedFixedArray |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2228 object = UseTempRegister(instr->elements()); | 2230 object = UseTempRegister(instr->elements()); |
2229 val = UseTempRegister(instr->value()); | 2231 val = UseTempRegister(instr->value()); |
2230 key = UseTempRegister(instr->key()); | 2232 key = UseTempRegister(instr->key()); |
2231 } else { | 2233 } else { |
2232 object = UseRegisterAtStart(instr->elements()); | 2234 object = UseRegisterAtStart(instr->elements()); |
2233 val = UseRegisterAtStart(instr->value()); | 2235 val = UseRegisterAtStart(instr->value()); |
2234 key = UseRegisterOrConstantAtStart(instr->key()); | 2236 key = UseRegisterOrConstantAtStart(instr->key()); |
2235 } | 2237 } |
2236 } | 2238 } |
2237 | 2239 |
2238 return new (zone()) LStoreKeyed(object, key, val); | 2240 return new (zone()) LStoreKeyed(object, key, val, nullptr); |
2239 } | 2241 } |
2240 | 2242 |
2241 DCHECK((instr->value()->representation().IsInteger32() && | 2243 DCHECK((instr->value()->representation().IsInteger32() && |
2242 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || | 2244 !IsDoubleOrFloatElementsKind(instr->elements_kind())) || |
2243 (instr->value()->representation().IsDouble() && | 2245 (instr->value()->representation().IsDouble() && |
2244 IsDoubleOrFloatElementsKind(instr->elements_kind()))); | 2246 IsDoubleOrFloatElementsKind(instr->elements_kind()))); |
2245 DCHECK(instr->elements()->representation().IsExternal()); | 2247 DCHECK(instr->elements()->representation().IsExternal()); |
2246 LOperand* val = UseRegister(instr->value()); | 2248 LOperand* val = UseRegister(instr->value()); |
2247 LOperand* key = UseRegisterOrConstantAtStart(instr->key()); | 2249 LOperand* key = UseRegisterOrConstantAtStart(instr->key()); |
2248 LOperand* backing_store = UseRegister(instr->elements()); | 2250 LOperand* backing_store = UseRegister(instr->elements()); |
2249 return new (zone()) LStoreKeyed(backing_store, key, val); | 2251 LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); |
| 2252 return new (zone()) LStoreKeyed(backing_store, key, val, backing_store_owner); |
2250 } | 2253 } |
2251 | 2254 |
2252 | 2255 |
2253 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { | 2256 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { |
2254 LOperand* context = UseFixed(instr->context(), cp); | 2257 LOperand* context = UseFixed(instr->context(), cp); |
2255 LOperand* obj = | 2258 LOperand* obj = |
2256 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 2259 UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); |
2257 LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); | 2260 LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); |
2258 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 2261 LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); |
2259 | 2262 |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2609 LInstruction* LChunkBuilder::DoAllocateBlockContext( | 2612 LInstruction* LChunkBuilder::DoAllocateBlockContext( |
2610 HAllocateBlockContext* instr) { | 2613 HAllocateBlockContext* instr) { |
2611 LOperand* context = UseFixed(instr->context(), cp); | 2614 LOperand* context = UseFixed(instr->context(), cp); |
2612 LOperand* function = UseRegisterAtStart(instr->function()); | 2615 LOperand* function = UseRegisterAtStart(instr->function()); |
2613 LAllocateBlockContext* result = | 2616 LAllocateBlockContext* result = |
2614 new (zone()) LAllocateBlockContext(context, function); | 2617 new (zone()) LAllocateBlockContext(context, function); |
2615 return MarkAsCall(DefineFixed(result, cp), instr); | 2618 return MarkAsCall(DefineFixed(result, cp), instr); |
2616 } | 2619 } |
2617 } // namespace internal | 2620 } // namespace internal |
2618 } // namespace v8 | 2621 } // namespace v8 |
OLD | NEW |