| 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 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1548   LOperand* temp = TempRegister(); | 1548   LOperand* temp = TempRegister(); | 
| 1549   return AssignEnvironment(DefineAsRegister( | 1549   return AssignEnvironment(DefineAsRegister( | 
| 1550       new(zone()) LLoadFunctionPrototype(function, temp))); | 1550       new(zone()) LLoadFunctionPrototype(function, temp))); | 
| 1551 } | 1551 } | 
| 1552 | 1552 | 
| 1553 | 1553 | 
| 1554 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { | 1554 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { | 
| 1555   LOperand* context = UseFixed(instr->context(), cp); | 1555   LOperand* context = UseFixed(instr->context(), cp); | 
| 1556   LOperand* global_object = | 1556   LOperand* global_object = | 
| 1557       UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); | 1557       UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); | 
| 1558   LOperand* vector = NULL; | 1558   LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | 
| 1559   if (instr->HasVectorAndSlot()) { |  | 
| 1560     vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |  | 
| 1561   } |  | 
| 1562 | 1559 | 
| 1563   LLoadGlobalGeneric* result = | 1560   LLoadGlobalGeneric* result = | 
| 1564       new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 1561       new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 
| 1565   return MarkAsCall(DefineFixed(result, x0), instr); | 1562   return MarkAsCall(DefineFixed(result, x0), instr); | 
| 1566 } | 1563 } | 
| 1567 | 1564 | 
| 1568 | 1565 | 
| 1569 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { | 1566 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { | 
| 1570   DCHECK(instr->key()->representation().IsSmiOrInteger32()); | 1567   DCHECK(instr->key()->representation().IsSmiOrInteger32()); | 
| 1571   ElementsKind elements_kind = instr->elements_kind(); | 1568   ElementsKind elements_kind = instr->elements_kind(); | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1614     return result; | 1611     return result; | 
| 1615   } | 1612   } | 
| 1616 } | 1613 } | 
| 1617 | 1614 | 
| 1618 | 1615 | 
| 1619 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 1616 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 
| 1620   LOperand* context = UseFixed(instr->context(), cp); | 1617   LOperand* context = UseFixed(instr->context(), cp); | 
| 1621   LOperand* object = | 1618   LOperand* object = | 
| 1622       UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 1619       UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 
| 1623   LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); | 1620   LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); | 
| 1624   LOperand* vector = NULL; | 1621   LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | 
| 1625   if (instr->HasVectorAndSlot()) { |  | 
| 1626     vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |  | 
| 1627   } |  | 
| 1628 | 1622 | 
| 1629   LInstruction* result = | 1623   LInstruction* result = | 
| 1630       DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), | 1624       DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), | 
| 1631                   x0); | 1625                   x0); | 
| 1632   return MarkAsCall(result, instr); | 1626   return MarkAsCall(result, instr); | 
| 1633 } | 1627 } | 
| 1634 | 1628 | 
| 1635 | 1629 | 
| 1636 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { | 1630 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { | 
| 1637   LOperand* object = UseRegisterAtStart(instr->object()); | 1631   LOperand* object = UseRegisterAtStart(instr->object()); | 
| 1638   return DefineAsRegister(new(zone()) LLoadNamedField(object)); | 1632   return DefineAsRegister(new(zone()) LLoadNamedField(object)); | 
| 1639 } | 1633 } | 
| 1640 | 1634 | 
| 1641 | 1635 | 
| 1642 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { | 1636 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { | 
| 1643   LOperand* context = UseFixed(instr->context(), cp); | 1637   LOperand* context = UseFixed(instr->context(), cp); | 
| 1644   LOperand* object = | 1638   LOperand* object = | 
| 1645       UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 1639       UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 
| 1646   LOperand* vector = NULL; | 1640   LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); | 
| 1647   if (instr->HasVectorAndSlot()) { |  | 
| 1648     vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); |  | 
| 1649   } |  | 
| 1650 | 1641 | 
| 1651   LInstruction* result = | 1642   LInstruction* result = | 
| 1652       DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), x0); | 1643       DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), x0); | 
| 1653   return MarkAsCall(result, instr); | 1644   return MarkAsCall(result, instr); | 
| 1654 } | 1645 } | 
| 1655 | 1646 | 
| 1656 | 1647 | 
| 1657 LInstruction* LChunkBuilder::DoLoadRoot(HLoadRoot* instr) { | 1648 LInstruction* LChunkBuilder::DoLoadRoot(HLoadRoot* instr) { | 
| 1658   return DefineAsRegister(new(zone()) LLoadRoot); | 1649   return DefineAsRegister(new(zone()) LLoadRoot); | 
| 1659 } | 1650 } | 
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2239   LOperand* context = UseFixed(instr->context(), cp); | 2230   LOperand* context = UseFixed(instr->context(), cp); | 
| 2240   LOperand* object = | 2231   LOperand* object = | 
| 2241       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 2232       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 
| 2242   LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); | 2233   LOperand* key = UseFixed(instr->key(), StoreDescriptor::NameRegister()); | 
| 2243   LOperand* value = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 2234   LOperand* value = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 
| 2244 | 2235 | 
| 2245   DCHECK(instr->object()->representation().IsTagged()); | 2236   DCHECK(instr->object()->representation().IsTagged()); | 
| 2246   DCHECK(instr->key()->representation().IsTagged()); | 2237   DCHECK(instr->key()->representation().IsTagged()); | 
| 2247   DCHECK(instr->value()->representation().IsTagged()); | 2238   DCHECK(instr->value()->representation().IsTagged()); | 
| 2248 | 2239 | 
| 2249   LOperand* slot = NULL; | 2240   LOperand* slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); | 
| 2250   LOperand* vector = NULL; | 2241   LOperand* vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); | 
| 2251   if (instr->HasVectorAndSlot()) { |  | 
| 2252     slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); |  | 
| 2253     vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); |  | 
| 2254   } |  | 
| 2255 | 2242 | 
| 2256   LStoreKeyedGeneric* result = new (zone()) | 2243   LStoreKeyedGeneric* result = new (zone()) | 
| 2257       LStoreKeyedGeneric(context, object, key, value, slot, vector); | 2244       LStoreKeyedGeneric(context, object, key, value, slot, vector); | 
| 2258   return MarkAsCall(result, instr); | 2245   return MarkAsCall(result, instr); | 
| 2259 } | 2246 } | 
| 2260 | 2247 | 
| 2261 | 2248 | 
| 2262 LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) { | 2249 LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) { | 
| 2263   // TODO(jbramley): It might be beneficial to allow value to be a constant in | 2250   // TODO(jbramley): It might be beneficial to allow value to be a constant in | 
| 2264   // some cases. x64 makes use of this with FLAG_track_fields, for example. | 2251   // some cases. x64 makes use of this with FLAG_track_fields, for example. | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 2287   return new(zone()) LStoreNamedField(object, value, temp0, temp1); | 2274   return new(zone()) LStoreNamedField(object, value, temp0, temp1); | 
| 2288 } | 2275 } | 
| 2289 | 2276 | 
| 2290 | 2277 | 
| 2291 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { | 2278 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { | 
| 2292   LOperand* context = UseFixed(instr->context(), cp); | 2279   LOperand* context = UseFixed(instr->context(), cp); | 
| 2293   LOperand* object = | 2280   LOperand* object = | 
| 2294       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 2281       UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); | 
| 2295   LOperand* value = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 2282   LOperand* value = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); | 
| 2296 | 2283 | 
| 2297   LOperand* slot = NULL; | 2284   LOperand* slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); | 
| 2298   LOperand* vector = NULL; | 2285   LOperand* vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); | 
| 2299   if (instr->HasVectorAndSlot()) { |  | 
| 2300     slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); |  | 
| 2301     vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); |  | 
| 2302   } |  | 
| 2303 | 2286 | 
| 2304   LStoreNamedGeneric* result = | 2287   LStoreNamedGeneric* result = | 
| 2305       new (zone()) LStoreNamedGeneric(context, object, value, slot, vector); | 2288       new (zone()) LStoreNamedGeneric(context, object, value, slot, vector); | 
| 2306   return MarkAsCall(result, instr); | 2289   return MarkAsCall(result, instr); | 
| 2307 } | 2290 } | 
| 2308 | 2291 | 
| 2309 | 2292 | 
| 2310 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { | 2293 LInstruction* LChunkBuilder::DoStringAdd(HStringAdd* instr) { | 
| 2311   LOperand* context = UseFixed(instr->context(), cp); | 2294   LOperand* context = UseFixed(instr->context(), cp); | 
| 2312   LOperand* left = UseFixed(instr->left(), x1); | 2295   LOperand* left = UseFixed(instr->left(), x1); | 
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2610 | 2593 | 
| 2611 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { | 2594 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { | 
| 2612   LOperand* receiver = UseRegister(instr->receiver()); | 2595   LOperand* receiver = UseRegister(instr->receiver()); | 
| 2613   LOperand* function = UseRegister(instr->function()); | 2596   LOperand* function = UseRegister(instr->function()); | 
| 2614   LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); | 2597   LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); | 
| 2615   return AssignEnvironment(DefineAsRegister(result)); | 2598   return AssignEnvironment(DefineAsRegister(result)); | 
| 2616 } | 2599 } | 
| 2617 | 2600 | 
| 2618 }  // namespace internal | 2601 }  // namespace internal | 
| 2619 }  // namespace v8 | 2602 }  // namespace v8 | 
| OLD | NEW | 
|---|