| 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 #ifndef V8_CODE_STUBS_H_ | 5 #ifndef V8_CODE_STUBS_H_ |
| 6 #define V8_CODE_STUBS_H_ | 6 #define V8_CODE_STUBS_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1237 DCHECK(FLAG_vector_stores); | 1237 DCHECK(FLAG_vector_stores); |
| 1238 return VectorStoreTransitionDescriptor::SlotRegister(); | 1238 return VectorStoreTransitionDescriptor::SlotRegister(); |
| 1239 } | 1239 } |
| 1240 | 1240 |
| 1241 static Register VectorRegister() { | 1241 static Register VectorRegister() { |
| 1242 DCHECK(FLAG_vector_stores); | 1242 DCHECK(FLAG_vector_stores); |
| 1243 return VectorStoreTransitionDescriptor::VectorRegister(); | 1243 return VectorStoreTransitionDescriptor::VectorRegister(); |
| 1244 } | 1244 } |
| 1245 | 1245 |
| 1246 static Register MapRegister() { | 1246 static Register MapRegister() { |
| 1247 return FLAG_vector_stores ? VectorStoreTransitionDescriptor::MapRegister() | 1247 if (FLAG_vector_stores) { |
| 1248 : StoreTransitionDescriptor::MapRegister(); | 1248 return VectorStoreTransitionDescriptor::MapRegister(); |
| 1249 } |
| 1250 return StoreTransitionDescriptor::MapRegister(); |
| 1249 } | 1251 } |
| 1250 | 1252 |
| 1251 static int ReceiverIndex() { | 1253 static int ReceiverIndex() { |
| 1252 return StoreTransitionDescriptor::kReceiverIndex; | 1254 return StoreTransitionDescriptor::kReceiverIndex; |
| 1253 } | 1255 } |
| 1254 | 1256 |
| 1255 static int NameIndex() { return StoreTransitionDescriptor::kReceiverIndex; } | 1257 static int NameIndex() { return StoreTransitionDescriptor::kReceiverIndex; } |
| 1256 | 1258 |
| 1257 static int ValueIndex() { return StoreTransitionDescriptor::kValueIndex; } | 1259 static int ValueIndex() { return StoreTransitionDescriptor::kValueIndex; } |
| 1258 | 1260 |
| 1259 static int SlotIndex() { | 1261 static int MapIndex() { |
| 1260 DCHECK(FLAG_vector_stores); | 1262 DCHECK(static_cast<int>(VectorStoreTransitionDescriptor::kMapIndex) == |
| 1261 return VectorStoreTransitionDescriptor::kSlotIndex; | 1263 static_cast<int>(StoreTransitionDescriptor::kMapIndex)); |
| 1264 return StoreTransitionDescriptor::kMapIndex; |
| 1262 } | 1265 } |
| 1263 | 1266 |
| 1264 static int VectorIndex() { | 1267 static int VectorIndex() { |
| 1265 DCHECK(FLAG_vector_stores); | 1268 DCHECK(FLAG_vector_stores); |
| 1269 if (HasVirtualSlotArg()) { |
| 1270 return VectorStoreTransitionDescriptor::kVirtualSlotVectorIndex; |
| 1271 } |
| 1266 return VectorStoreTransitionDescriptor::kVectorIndex; | 1272 return VectorStoreTransitionDescriptor::kVectorIndex; |
| 1267 } | 1273 } |
| 1268 | 1274 |
| 1269 static int MapIndex() { | 1275 // Some platforms don't have a slot arg. |
| 1270 if (FLAG_vector_stores) { | 1276 static bool HasVirtualSlotArg() { |
| 1271 return VectorStoreTransitionDescriptor::kMapIndex; | 1277 if (!FLAG_vector_stores) return false; |
| 1272 } | 1278 return SlotRegister().is(no_reg); |
| 1273 return StoreTransitionDescriptor::kMapIndex; | |
| 1274 } | 1279 } |
| 1275 | |
| 1276 // Some platforms push Slot, Vector, Map on the stack instead of in | |
| 1277 // registers. | |
| 1278 static bool UsesStackArgs() { return MapRegister().is(no_reg); } | |
| 1279 }; | 1280 }; |
| 1280 | 1281 |
| 1281 | 1282 |
| 1282 class StoreTransitionStub : public HandlerStub { | 1283 class StoreTransitionStub : public HandlerStub { |
| 1283 public: | 1284 public: |
| 1284 enum StoreMode { | 1285 enum StoreMode { |
| 1285 StoreMapOnly, | 1286 StoreMapOnly, |
| 1286 StoreMapAndValue, | 1287 StoreMapAndValue, |
| 1287 ExtendStorageAndStoreMapAndValue | 1288 ExtendStorageAndStoreMapAndValue |
| 1288 }; | 1289 }; |
| (...skipping 1807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3096 #undef DEFINE_HYDROGEN_CODE_STUB | 3097 #undef DEFINE_HYDROGEN_CODE_STUB |
| 3097 #undef DEFINE_CODE_STUB | 3098 #undef DEFINE_CODE_STUB |
| 3098 #undef DEFINE_CODE_STUB_BASE | 3099 #undef DEFINE_CODE_STUB_BASE |
| 3099 | 3100 |
| 3100 extern Representation RepresentationFromType(Type* type); | 3101 extern Representation RepresentationFromType(Type* type); |
| 3101 | 3102 |
| 3102 } // namespace internal | 3103 } // namespace internal |
| 3103 } // namespace v8 | 3104 } // namespace v8 |
| 3104 | 3105 |
| 3105 #endif // V8_CODE_STUBS_H_ | 3106 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |