| 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 |