| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 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/mips64/lithium-mips64.h" |     5 #include "src/crankshaft/mips64/lithium-mips64.h" | 
|     6  |     6  | 
|     7 #include <sstream> |     7 #include <sstream> | 
|     8  |     8  | 
|     9 #if V8_TARGET_ARCH_MIPS64 |     9 #if V8_TARGET_ARCH_MIPS64 | 
|    10  |    10  | 
| (...skipping 2138 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2149  |  2149  | 
|  2150   if (!instr->is_fixed_typed_array()) { |  2150   if (!instr->is_fixed_typed_array()) { | 
|  2151     LOperand* obj = NULL; |  2151     LOperand* obj = NULL; | 
|  2152     if (instr->representation().IsDouble()) { |  2152     if (instr->representation().IsDouble()) { | 
|  2153       obj = UseRegister(instr->elements()); |  2153       obj = UseRegister(instr->elements()); | 
|  2154     } else { |  2154     } else { | 
|  2155       DCHECK(instr->representation().IsSmiOrTagged() || |  2155       DCHECK(instr->representation().IsSmiOrTagged() || | 
|  2156              instr->representation().IsInteger32()); |  2156              instr->representation().IsInteger32()); | 
|  2157       obj = UseRegisterAtStart(instr->elements()); |  2157       obj = UseRegisterAtStart(instr->elements()); | 
|  2158     } |  2158     } | 
|  2159     result = DefineAsRegister(new(zone()) LLoadKeyed(obj, key)); |  2159     result = DefineAsRegister(new (zone()) LLoadKeyed(obj, key, nullptr)); | 
|  2160   } else { |  2160   } else { | 
|  2161     DCHECK( |  2161     DCHECK( | 
|  2162         (instr->representation().IsInteger32() && |  2162         (instr->representation().IsInteger32() && | 
|  2163          !IsDoubleOrFloatElementsKind(elements_kind)) || |  2163          !IsDoubleOrFloatElementsKind(elements_kind)) || | 
|  2164         (instr->representation().IsDouble() && |  2164         (instr->representation().IsDouble() && | 
|  2165          IsDoubleOrFloatElementsKind(elements_kind))); |  2165          IsDoubleOrFloatElementsKind(elements_kind))); | 
|  2166     LOperand* backing_store = UseRegister(instr->elements()); |  2166     LOperand* backing_store = UseRegister(instr->elements()); | 
|  2167     result = DefineAsRegister(new(zone()) LLoadKeyed(backing_store, key)); |  2167     LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); | 
 |  2168     result = DefineAsRegister( | 
 |  2169         new (zone()) LLoadKeyed(backing_store, key, backing_store_owner)); | 
|  2168   } |  2170   } | 
|  2169  |  2171  | 
|  2170   bool needs_environment; |  2172   bool needs_environment; | 
|  2171   if (instr->is_fixed_typed_array()) { |  2173   if (instr->is_fixed_typed_array()) { | 
|  2172     // see LCodeGen::DoLoadKeyedExternalArray |  2174     // see LCodeGen::DoLoadKeyedExternalArray | 
|  2173     needs_environment = elements_kind == UINT32_ELEMENTS && |  2175     needs_environment = elements_kind == UINT32_ELEMENTS && | 
|  2174                         !instr->CheckFlag(HInstruction::kUint32); |  2176                         !instr->CheckFlag(HInstruction::kUint32); | 
|  2175   } else { |  2177   } else { | 
|  2176     // see LCodeGen::DoLoadKeyedFixedDoubleArray and |  2178     // see LCodeGen::DoLoadKeyedFixedDoubleArray and | 
|  2177     // LCodeGen::DoLoadKeyedFixedArray |  2179     // LCodeGen::DoLoadKeyedFixedArray | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2223         object = UseTempRegister(instr->elements()); |  2225         object = UseTempRegister(instr->elements()); | 
|  2224         val = UseTempRegister(instr->value()); |  2226         val = UseTempRegister(instr->value()); | 
|  2225         key = UseTempRegister(instr->key()); |  2227         key = UseTempRegister(instr->key()); | 
|  2226       } else { |  2228       } else { | 
|  2227         object = UseRegisterAtStart(instr->elements()); |  2229         object = UseRegisterAtStart(instr->elements()); | 
|  2228         val = UseRegisterAtStart(instr->value()); |  2230         val = UseRegisterAtStart(instr->value()); | 
|  2229         key = UseRegisterOrConstantAtStart(instr->key()); |  2231         key = UseRegisterOrConstantAtStart(instr->key()); | 
|  2230       } |  2232       } | 
|  2231     } |  2233     } | 
|  2232  |  2234  | 
|  2233     return new(zone()) LStoreKeyed(object, key, val); |  2235     return new (zone()) LStoreKeyed(object, key, val, nullptr); | 
|  2234   } |  2236   } | 
|  2235  |  2237  | 
|  2236   DCHECK( |  2238   DCHECK( | 
|  2237       (instr->value()->representation().IsInteger32() && |  2239       (instr->value()->representation().IsInteger32() && | 
|  2238        !IsDoubleOrFloatElementsKind(instr->elements_kind())) || |  2240        !IsDoubleOrFloatElementsKind(instr->elements_kind())) || | 
|  2239       (instr->value()->representation().IsDouble() && |  2241       (instr->value()->representation().IsDouble() && | 
|  2240        IsDoubleOrFloatElementsKind(instr->elements_kind()))); |  2242        IsDoubleOrFloatElementsKind(instr->elements_kind()))); | 
|  2241   DCHECK(instr->elements()->representation().IsExternal()); |  2243   DCHECK(instr->elements()->representation().IsExternal()); | 
|  2242   LOperand* val = UseRegister(instr->value()); |  2244   LOperand* val = UseRegister(instr->value()); | 
|  2243   LOperand* key = UseRegisterOrConstantAtStart(instr->key()); |  2245   LOperand* key = UseRegisterOrConstantAtStart(instr->key()); | 
|  2244   LOperand* backing_store = UseRegister(instr->elements()); |  2246   LOperand* backing_store = UseRegister(instr->elements()); | 
|  2245   return new(zone()) LStoreKeyed(backing_store, key, val); |  2247   LOperand* backing_store_owner = UseAny(instr->backing_store_owner()); | 
 |  2248   return new (zone()) LStoreKeyed(backing_store, key, val, backing_store_owner); | 
|  2246 } |  2249 } | 
|  2247  |  2250  | 
|  2248  |  2251  | 
|  2249 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { |  2252 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { | 
|  2250   LOperand* context = UseFixed(instr->context(), cp); |  2253   LOperand* context = UseFixed(instr->context(), cp); | 
|  2251   LOperand* obj = |  2254   LOperand* obj = | 
|  2252       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); |  2255       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 
|  2253   LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); |  2256   LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); | 
|  2254   LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); |  2257   LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 
|  2255  |  2258  | 
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  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  |  2620  | 
|  2618  |  2621  | 
|  2619 }  // namespace internal |  2622 }  // namespace internal | 
|  2620 }  // namespace v8 |  2623 }  // namespace v8 | 
|  2621  |  2624  | 
|  2622 #endif  // V8_TARGET_ARCH_MIPS64 |  2625 #endif  // V8_TARGET_ARCH_MIPS64 | 
| OLD | NEW |