Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: src/code-stubs.h

Issue 12220074: Compile FastCloneShallowObjectStub using Crankshaft. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Implemented port to ARM. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 extra_expression_stack_count_(0), 257 extra_expression_stack_count_(0),
258 register_params_(NULL) { } 258 register_params_(NULL) { }
259 int register_param_count_; 259 int register_param_count_;
260 const Register* stack_parameter_count_; 260 const Register* stack_parameter_count_;
261 int extra_expression_stack_count_; 261 int extra_expression_stack_count_;
262 Register* register_params_; 262 Register* register_params_;
263 Address deoptimization_handler_; 263 Address deoptimization_handler_;
264 }; 264 };
265 265
266 266
267 class HGraph;
268 struct Register;
269 class HydrogenCodeStub : public CodeStub { 267 class HydrogenCodeStub : public CodeStub {
270 public: 268 public:
271 // Retrieve the code for the stub. Generate the code if needed. 269 // Retrieve the code for the stub. Generate the code if needed.
272 virtual Handle<Code> GenerateCode() = 0; 270 virtual Handle<Code> GenerateCode() = 0;
273 271
274 virtual int GetCodeKind() { return Code::COMPILED_STUB; } 272 virtual int GetCodeKind() { return Code::COMPILED_STUB; }
275 273
276 CodeStubInterfaceDescriptor* GetInterfaceDescriptor(Isolate* isolate) { 274 CodeStubInterfaceDescriptor* GetInterfaceDescriptor(Isolate* isolate) {
277 return isolate->code_stub_interface_descriptor(MajorKey()); 275 return isolate->code_stub_interface_descriptor(MajorKey());
278 } 276 }
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 STATIC_ASSERT(kMaximumClonedLength < 16); 466 STATIC_ASSERT(kMaximumClonedLength < 16);
469 Major MajorKey() { return FastCloneShallowArray; } 467 Major MajorKey() { return FastCloneShallowArray; }
470 int MinorKey() { 468 int MinorKey() {
471 return AllocationSiteModeBits::encode(allocation_site_mode_) 469 return AllocationSiteModeBits::encode(allocation_site_mode_)
472 | ModeBits::encode(mode_) 470 | ModeBits::encode(mode_)
473 | LengthBits::encode(length_); 471 | LengthBits::encode(length_);
474 } 472 }
475 }; 473 };
476 474
477 475
478 class FastCloneShallowObjectStub : public PlatformCodeStub { 476 class FastCloneShallowObjectStub : public HydrogenCodeStub {
479 public: 477 public:
480 // Maximum number of properties in copied object. 478 // Maximum number of properties in copied object.
481 static const int kMaximumClonedProperties = 6; 479 static const int kMaximumClonedProperties = 6;
482 480
483 explicit FastCloneShallowObjectStub(int length) : length_(length) { 481 explicit FastCloneShallowObjectStub(int length) : length_(length) {
484 ASSERT_GE(length_, 0); 482 ASSERT_GE(length_, 0);
485 ASSERT_LE(length_, kMaximumClonedProperties); 483 ASSERT_LE(length_, kMaximumClonedProperties);
486 } 484 }
487 485
488 void Generate(MacroAssembler* masm); 486 int length() const { return length_; }
487
488 virtual Handle<Code> GenerateCode();
489
490 virtual void InitializeInterfaceDescriptor(
491 Isolate* isolate,
492 CodeStubInterfaceDescriptor* descriptor);
489 493
490 private: 494 private:
491 int length_; 495 int length_;
492 496
493 Major MajorKey() { return FastCloneShallowObject; } 497 Major MajorKey() { return FastCloneShallowObject; }
494 int MinorKey() { return length_; } 498 int MinorKey() { return length_; }
499
500 DISALLOW_COPY_AND_ASSIGN(FastCloneShallowObjectStub);
495 }; 501 };
496 502
497 503
498 class InstanceofStub: public PlatformCodeStub { 504 class InstanceofStub: public PlatformCodeStub {
499 public: 505 public:
500 enum Flags { 506 enum Flags {
501 kNoFlags = 0, 507 kNoFlags = 0,
502 kArgsInRegisters = 1 << 0, 508 kArgsInRegisters = 1 << 0,
503 kCallSiteInlineCheck = 1 << 1, 509 kCallSiteInlineCheck = 1 << 1,
504 kReturnTrueFalseObject = 1 << 2 510 kReturnTrueFalseObject = 1 << 2
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 }; 1196 };
1191 1197
1192 1198
1193 class KeyedLoadFastElementStub : public HydrogenCodeStub { 1199 class KeyedLoadFastElementStub : public HydrogenCodeStub {
1194 public: 1200 public:
1195 KeyedLoadFastElementStub(bool is_js_array, ElementsKind elements_kind) { 1201 KeyedLoadFastElementStub(bool is_js_array, ElementsKind elements_kind) {
1196 bit_field_ = ElementsKindBits::encode(elements_kind) | 1202 bit_field_ = ElementsKindBits::encode(elements_kind) |
1197 IsJSArrayBits::encode(is_js_array); 1203 IsJSArrayBits::encode(is_js_array);
1198 } 1204 }
1199 1205
1200 Major MajorKey() { return KeyedLoadElement; }
1201 int MinorKey() { return bit_field_; }
1202
1203 bool is_js_array() const { 1206 bool is_js_array() const {
1204 return IsJSArrayBits::decode(bit_field_); 1207 return IsJSArrayBits::decode(bit_field_);
1205 } 1208 }
1206 1209
1207 ElementsKind elements_kind() const { 1210 ElementsKind elements_kind() const {
1208 return ElementsKindBits::decode(bit_field_); 1211 return ElementsKindBits::decode(bit_field_);
1209 } 1212 }
1210 1213
1211 virtual Handle<Code> GenerateCode(); 1214 virtual Handle<Code> GenerateCode();
1212 1215
1213 virtual void InitializeInterfaceDescriptor( 1216 virtual void InitializeInterfaceDescriptor(
1214 Isolate* isolate, 1217 Isolate* isolate,
1215 CodeStubInterfaceDescriptor* descriptor); 1218 CodeStubInterfaceDescriptor* descriptor);
1216 1219
1217 private: 1220 private:
1218 class IsJSArrayBits: public BitField<bool, 8, 1> {}; 1221 class IsJSArrayBits: public BitField<bool, 8, 1> {};
1219 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; 1222 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
1220 uint32_t bit_field_; 1223 uint32_t bit_field_;
1221 1224
1225 Major MajorKey() { return KeyedLoadElement; }
1226 int MinorKey() { return bit_field_; }
1227
1222 DISALLOW_COPY_AND_ASSIGN(KeyedLoadFastElementStub); 1228 DISALLOW_COPY_AND_ASSIGN(KeyedLoadFastElementStub);
1223 }; 1229 };
1224 1230
1225 1231
1226 class TransitionElementsKindStub : public HydrogenCodeStub { 1232 class TransitionElementsKindStub : public HydrogenCodeStub {
1227 public: 1233 public:
1228 TransitionElementsKindStub(ElementsKind from_kind, 1234 TransitionElementsKindStub(ElementsKind from_kind,
1229 ElementsKind to_kind) { 1235 ElementsKind to_kind) {
1230 bit_field_ = FromKindBits::encode(from_kind) | 1236 bit_field_ = FromKindBits::encode(from_kind) |
1231 ToKindBits::encode(to_kind); 1237 ToKindBits::encode(to_kind);
1232 } 1238 }
1233 1239
1234 Major MajorKey() { return TransitionElementsKind; }
1235 int MinorKey() { return bit_field_; }
1236
1237 ElementsKind from_kind() const { 1240 ElementsKind from_kind() const {
1238 return FromKindBits::decode(bit_field_); 1241 return FromKindBits::decode(bit_field_);
1239 } 1242 }
1240 1243
1241 ElementsKind to_kind() const { 1244 ElementsKind to_kind() const {
1242 return ToKindBits::decode(bit_field_); 1245 return ToKindBits::decode(bit_field_);
1243 } 1246 }
1244 1247
1245 virtual Handle<Code> GenerateCode(); 1248 virtual Handle<Code> GenerateCode();
1246 1249
1247 virtual void InitializeInterfaceDescriptor( 1250 virtual void InitializeInterfaceDescriptor(
1248 Isolate* isolate, 1251 Isolate* isolate,
1249 CodeStubInterfaceDescriptor* descriptor); 1252 CodeStubInterfaceDescriptor* descriptor);
1250 1253
1251 private: 1254 private:
1252 class FromKindBits: public BitField<ElementsKind, 8, 8> {}; 1255 class FromKindBits: public BitField<ElementsKind, 8, 8> {};
1253 class ToKindBits: public BitField<ElementsKind, 0, 8> {}; 1256 class ToKindBits: public BitField<ElementsKind, 0, 8> {};
1254 uint32_t bit_field_; 1257 uint32_t bit_field_;
1255 1258
1259 Major MajorKey() { return TransitionElementsKind; }
1260 int MinorKey() { return bit_field_; }
1261
1256 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub); 1262 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub);
1257 }; 1263 };
1258 1264
1259 1265
1260 class KeyedStoreElementStub : public PlatformCodeStub { 1266 class KeyedStoreElementStub : public PlatformCodeStub {
1261 public: 1267 public:
1262 KeyedStoreElementStub(bool is_js_array, 1268 KeyedStoreElementStub(bool is_js_array,
1263 ElementsKind elements_kind, 1269 ElementsKind elements_kind,
1264 KeyedAccessGrowMode grow_mode) 1270 KeyedAccessGrowMode grow_mode)
1265 : is_js_array_(is_js_array), 1271 : is_js_array_(is_js_array),
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 1479
1474 // The current function entry hook. 1480 // The current function entry hook.
1475 static FunctionEntryHook entry_hook_; 1481 static FunctionEntryHook entry_hook_;
1476 1482
1477 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); 1483 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
1478 }; 1484 };
1479 1485
1480 } } // namespace v8::internal 1486 } } // namespace v8::internal
1481 1487
1482 #endif // V8_CODE_STUBS_H_ 1488 #endif // V8_CODE_STUBS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698