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

Side by Side Diff: src/hydrogen-instructions.h

Issue 767743002: Hydrogen code stubs for vector-based ICs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comment response. Created 6 years 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
OLDNEW
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_HYDROGEN_INSTRUCTIONS_H_ 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ 6 #define V8_HYDROGEN_INSTRUCTIONS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/v8.h" 10 #include "src/v8.h"
(...skipping 2320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2331 pass_argument_count_(pass_argument_count), 2331 pass_argument_count_(pass_argument_count),
2332 has_stack_check_(has_stack_check) { 2332 has_stack_check_(has_stack_check) {
2333 SetOperandAt(0, function); 2333 SetOperandAt(0, function);
2334 } 2334 }
2335 2335
2336 bool pass_argument_count_; 2336 bool pass_argument_count_;
2337 bool has_stack_check_; 2337 bool has_stack_check_;
2338 }; 2338 };
2339 2339
2340 2340
2341 enum CallMode { NORMAL_CALL, TAIL_CALL };
2342
2343
2341 class HCallWithDescriptor FINAL : public HInstruction { 2344 class HCallWithDescriptor FINAL : public HInstruction {
2342 public: 2345 public:
2343 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target, 2346 static HCallWithDescriptor* New(Zone* zone, HValue* context, HValue* target,
2344 int argument_count, 2347 int argument_count,
2345 CallInterfaceDescriptor descriptor, 2348 CallInterfaceDescriptor descriptor,
2346 const Vector<HValue*>& operands) { 2349 const Vector<HValue*>& operands,
2350 CallMode call_mode = NORMAL_CALL) {
2347 DCHECK(operands.length() == descriptor.GetEnvironmentLength()); 2351 DCHECK(operands.length() == descriptor.GetEnvironmentLength());
2348 HCallWithDescriptor* res = new (zone) 2352 HCallWithDescriptor* res = new (zone) HCallWithDescriptor(
2349 HCallWithDescriptor(target, argument_count, descriptor, operands, zone); 2353 target, argument_count, descriptor, operands, call_mode, zone);
2350 return res; 2354 return res;
2351 } 2355 }
2352 2356
2353 virtual int OperandCount() const FINAL OVERRIDE { 2357 virtual int OperandCount() const FINAL OVERRIDE {
2354 return values_.length(); 2358 return values_.length();
2355 } 2359 }
2356 virtual HValue* OperandAt(int index) const FINAL OVERRIDE { 2360 virtual HValue* OperandAt(int index) const FINAL OVERRIDE {
2357 return values_[index]; 2361 return values_[index];
2358 } 2362 }
2359 2363
2360 virtual Representation RequiredInputRepresentation( 2364 virtual Representation RequiredInputRepresentation(
2361 int index) FINAL OVERRIDE { 2365 int index) FINAL OVERRIDE {
2362 if (index == 0) { 2366 if (index == 0) {
2363 return Representation::Tagged(); 2367 return Representation::Tagged();
2364 } else { 2368 } else {
2365 int par_index = index - 1; 2369 int par_index = index - 1;
2366 DCHECK(par_index < descriptor_.GetEnvironmentLength()); 2370 DCHECK(par_index < descriptor_.GetEnvironmentLength());
2367 return descriptor_.GetParameterRepresentation(par_index); 2371 return descriptor_.GetParameterRepresentation(par_index);
2368 } 2372 }
2369 } 2373 }
2370 2374
2371 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor) 2375 DECLARE_CONCRETE_INSTRUCTION(CallWithDescriptor)
2372 2376
2373 virtual HType CalculateInferredType() FINAL OVERRIDE { 2377 virtual HType CalculateInferredType() FINAL OVERRIDE {
2374 return HType::Tagged(); 2378 return HType::Tagged();
2375 } 2379 }
2376 2380
2381 bool IsTailCall() const { return call_mode_ == TAIL_CALL; }
2382
2377 virtual int argument_count() const { 2383 virtual int argument_count() const {
2378 return argument_count_; 2384 return argument_count_;
2379 } 2385 }
2380 2386
2381 virtual int argument_delta() const OVERRIDE { 2387 virtual int argument_delta() const OVERRIDE {
2382 return -argument_count_; 2388 return -argument_count_;
2383 } 2389 }
2384 2390
2385 CallInterfaceDescriptor descriptor() const { return descriptor_; } 2391 CallInterfaceDescriptor descriptor() const { return descriptor_; }
2386 2392
2387 HValue* target() { 2393 HValue* target() {
2388 return OperandAt(0); 2394 return OperandAt(0);
2389 } 2395 }
2390 2396
2391 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 2397 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
2392 2398
2393 private: 2399 private:
2394 // The argument count includes the receiver. 2400 // The argument count includes the receiver.
2395 HCallWithDescriptor(HValue* target, int argument_count, 2401 HCallWithDescriptor(HValue* target, int argument_count,
2396 CallInterfaceDescriptor descriptor, 2402 CallInterfaceDescriptor descriptor,
2397 const Vector<HValue*>& operands, Zone* zone) 2403 const Vector<HValue*>& operands, CallMode call_mode,
2404 Zone* zone)
2398 : descriptor_(descriptor), 2405 : descriptor_(descriptor),
2399 values_(descriptor.GetEnvironmentLength() + 1, zone) { 2406 values_(descriptor.GetEnvironmentLength() + 1, zone),
2400 argument_count_ = argument_count; 2407 argument_count_(argument_count),
2408 call_mode_(call_mode) {
2409 // We can only tail call without any stack arguments.
2410 DCHECK(call_mode != TAIL_CALL || argument_count == 0);
2401 AddOperand(target, zone); 2411 AddOperand(target, zone);
2402 for (int i = 0; i < operands.length(); i++) { 2412 for (int i = 0; i < operands.length(); i++) {
2403 AddOperand(operands[i], zone); 2413 AddOperand(operands[i], zone);
2404 } 2414 }
2405 this->set_representation(Representation::Tagged()); 2415 this->set_representation(Representation::Tagged());
2406 this->SetAllSideEffects(); 2416 this->SetAllSideEffects();
2407 } 2417 }
2408 2418
2409 void AddOperand(HValue* v, Zone* zone) { 2419 void AddOperand(HValue* v, Zone* zone) {
2410 values_.Add(NULL, zone); 2420 values_.Add(NULL, zone);
2411 SetOperandAt(values_.length() - 1, v); 2421 SetOperandAt(values_.length() - 1, v);
2412 } 2422 }
2413 2423
2414 void InternalSetOperandAt(int index, 2424 void InternalSetOperandAt(int index,
2415 HValue* value) FINAL OVERRIDE { 2425 HValue* value) FINAL OVERRIDE {
2416 values_[index] = value; 2426 values_[index] = value;
2417 } 2427 }
2418 2428
2419 CallInterfaceDescriptor descriptor_; 2429 CallInterfaceDescriptor descriptor_;
2420 ZoneList<HValue*> values_; 2430 ZoneList<HValue*> values_;
2421 int argument_count_; 2431 int argument_count_;
2432 CallMode call_mode_;
2422 }; 2433 };
2423 2434
2424 2435
2425 class HInvokeFunction FINAL : public HBinaryCall { 2436 class HInvokeFunction FINAL : public HBinaryCall {
2426 public: 2437 public:
2427 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int); 2438 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInvokeFunction, HValue*, int);
2428 2439
2429 HInvokeFunction(HValue* context, 2440 HInvokeFunction(HValue* context,
2430 HValue* function, 2441 HValue* function,
2431 Handle<JSFunction> known_function, 2442 Handle<JSFunction> known_function,
(...skipping 2967 matching lines...) Expand 10 before | Expand all | Expand 10 after
5399 private: 5410 private:
5400 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count) 5411 HCallStub(HValue* context, CodeStub::Major major_key, int argument_count)
5401 : HUnaryCall(context, argument_count), 5412 : HUnaryCall(context, argument_count),
5402 major_key_(major_key) { 5413 major_key_(major_key) {
5403 } 5414 }
5404 5415
5405 CodeStub::Major major_key_; 5416 CodeStub::Major major_key_;
5406 }; 5417 };
5407 5418
5408 5419
5409 class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> { 5420 class HTailCallThroughMegamorphicCache FINAL : public HInstruction {
5410 public: 5421 public:
5411 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache, 5422 enum Flags {
5412 HValue*, HValue*, Code::Flags); 5423 NONE = 0,
5424 CALLED_FROM_KEYED_LOAD = 1 << 0,
5425 PERFORM_MISS_ONLY = 1 << 1
5426 };
5427
5428 static Flags ComputeFlags(bool called_from_keyed_load,
5429 bool perform_miss_only) {
5430 Flags flags = NONE;
5431 if (called_from_keyed_load) {
5432 flags = static_cast<Flags>(flags | CALLED_FROM_KEYED_LOAD);
5433 }
5434 if (perform_miss_only) {
5435 flags = static_cast<Flags>(flags | PERFORM_MISS_ONLY);
5436 }
5437 return flags;
5438 }
5439
5440 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(
5441 HTailCallThroughMegamorphicCache, HValue*, HValue*, HValue*, HValue*,
5442 HTailCallThroughMegamorphicCache::Flags);
5443
5444 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HTailCallThroughMegamorphicCache,
5445 HValue*, HValue*);
5413 5446
5414 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5447 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
5415 return Representation::Tagged(); 5448 return Representation::Tagged();
5416 } 5449 }
5417 5450
5451 virtual int OperandCount() const FINAL OVERRIDE {
5452 return FLAG_vector_ics ? 5 : 3;
5453 }
5454 virtual HValue* OperandAt(int i) const FINAL OVERRIDE { return inputs_[i]; }
5455
5418 HValue* context() const { return OperandAt(0); } 5456 HValue* context() const { return OperandAt(0); }
5419 HValue* receiver() const { return OperandAt(1); } 5457 HValue* receiver() const { return OperandAt(1); }
5420 HValue* name() const { return OperandAt(2); } 5458 HValue* name() const { return OperandAt(2); }
5421 Code::Flags flags() const { return flags_; } 5459 HValue* slot() const {
5460 DCHECK(FLAG_vector_ics);
5461 return OperandAt(3);
5462 }
5463 HValue* vector() const {
5464 DCHECK(FLAG_vector_ics);
5465 return OperandAt(4);
5466 }
5467 Code::Flags flags() const;
5468
5469 bool is_keyed_load() const { return flags_ & CALLED_FROM_KEYED_LOAD; }
5470 bool is_just_miss() const { return flags_ & PERFORM_MISS_ONLY; }
5422 5471
5423 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 5472 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5424 5473
5425 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) 5474 DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache)
5426 5475
5476 protected:
5477 virtual void InternalSetOperandAt(int i, HValue* value) FINAL OVERRIDE {
5478 inputs_[i] = value;
5479 }
5480
5427 private: 5481 private:
5428 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, 5482 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver,
5429 HValue* name, Code::Flags flags) 5483 HValue* name, HValue* slot, HValue* vector,
5484 Flags flags)
5430 : flags_(flags) { 5485 : flags_(flags) {
5486 DCHECK(FLAG_vector_ics);
5487 SetOperandAt(0, context);
5488 SetOperandAt(1, receiver);
5489 SetOperandAt(2, name);
5490 SetOperandAt(3, slot);
5491 SetOperandAt(4, vector);
5492 }
5493
5494 HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver,
5495 HValue* name)
5496 : flags_(NONE) {
5431 SetOperandAt(0, context); 5497 SetOperandAt(0, context);
5432 SetOperandAt(1, receiver); 5498 SetOperandAt(1, receiver);
5433 SetOperandAt(2, name); 5499 SetOperandAt(2, name);
5434 } 5500 }
5435 5501
5436 Code::Flags flags_; 5502 EmbeddedContainer<HValue*, 5> inputs_;
5503 Flags flags_;
5437 }; 5504 };
5438 5505
5439 5506
5440 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { 5507 class HUnknownOSRValue FINAL : public HTemplateInstruction<0> {
5441 public: 5508 public:
5442 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); 5509 DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int);
5443 5510
5444 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 5511 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5445 5512
5446 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5513 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
5519 5586
5520 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> { 5587 class HLoadGlobalGeneric FINAL : public HTemplateInstruction<2> {
5521 public: 5588 public:
5522 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, 5589 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*,
5523 Handle<String>, bool); 5590 Handle<String>, bool);
5524 5591
5525 HValue* context() { return OperandAt(0); } 5592 HValue* context() { return OperandAt(0); }
5526 HValue* global_object() { return OperandAt(1); } 5593 HValue* global_object() { return OperandAt(1); }
5527 Handle<String> name() const { return name_; } 5594 Handle<String> name() const { return name_; }
5528 bool for_typeof() const { return for_typeof_; } 5595 bool for_typeof() const { return for_typeof_; }
5529 FeedbackVectorICSlot slot() const { 5596 FeedbackVectorICSlot slot() const { return slot_; }
5530 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
5531 return slot_;
5532 }
5533 Handle<TypeFeedbackVector> feedback_vector() const { 5597 Handle<TypeFeedbackVector> feedback_vector() const {
5534 return feedback_vector_; 5598 return feedback_vector_;
5535 } 5599 }
5600 bool HasVectorAndSlot() const { return FLAG_vector_ics; }
5536 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, 5601 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
5537 FeedbackVectorICSlot slot) { 5602 FeedbackVectorICSlot slot) {
5538 DCHECK(FLAG_vector_ics); 5603 DCHECK(FLAG_vector_ics);
5539 feedback_vector_ = vector; 5604 feedback_vector_ = vector;
5540 slot_ = slot; 5605 slot_ = slot;
5541 } 5606 }
5542 5607
5543 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 5608 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
5544 5609
5545 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 5610 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
6529 6594
6530 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { 6595 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> {
6531 public: 6596 public:
6532 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, 6597 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*,
6533 Handle<Object>); 6598 Handle<Object>);
6534 6599
6535 HValue* context() const { return OperandAt(0); } 6600 HValue* context() const { return OperandAt(0); }
6536 HValue* object() const { return OperandAt(1); } 6601 HValue* object() const { return OperandAt(1); }
6537 Handle<Object> name() const { return name_; } 6602 Handle<Object> name() const { return name_; }
6538 6603
6539 FeedbackVectorICSlot slot() const { 6604 FeedbackVectorICSlot slot() const { return slot_; }
6540 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6541 return slot_;
6542 }
6543 Handle<TypeFeedbackVector> feedback_vector() const { 6605 Handle<TypeFeedbackVector> feedback_vector() const {
6544 return feedback_vector_; 6606 return feedback_vector_;
6545 } 6607 }
6608 bool HasVectorAndSlot() const { return FLAG_vector_ics; }
6546 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, 6609 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
6547 FeedbackVectorICSlot slot) { 6610 FeedbackVectorICSlot slot) {
6548 DCHECK(FLAG_vector_ics); 6611 DCHECK(FLAG_vector_ics);
6549 feedback_vector_ = vector; 6612 feedback_vector_ = vector;
6550 slot_ = slot; 6613 slot_ = slot;
6551 } 6614 }
6552 6615
6553 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6616 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6554 return Representation::Tagged(); 6617 return Representation::Tagged();
6555 } 6618 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
6694 6757
6695 virtual Range* InferRange(Zone* zone) OVERRIDE; 6758 virtual Range* InferRange(Zone* zone) OVERRIDE;
6696 6759
6697 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) 6760 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed)
6698 6761
6699 protected: 6762 protected:
6700 virtual bool DataEquals(HValue* other) OVERRIDE { 6763 virtual bool DataEquals(HValue* other) OVERRIDE {
6701 if (!other->IsLoadKeyed()) return false; 6764 if (!other->IsLoadKeyed()) return false;
6702 HLoadKeyed* other_load = HLoadKeyed::cast(other); 6765 HLoadKeyed* other_load = HLoadKeyed::cast(other);
6703 6766
6704 if (IsDehoisted() && base_offset() != other_load->base_offset()) 6767 if (base_offset() != other_load->base_offset()) return false;
6705 return false;
6706 return elements_kind() == other_load->elements_kind(); 6768 return elements_kind() == other_load->elements_kind();
6707 } 6769 }
6708 6770
6709 private: 6771 private:
6710 HLoadKeyed(HValue* obj, 6772 HLoadKeyed(HValue* obj,
6711 HValue* key, 6773 HValue* key,
6712 HValue* dependency, 6774 HValue* dependency,
6713 ElementsKind elements_kind, 6775 ElementsKind elements_kind,
6714 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, 6776 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE,
6715 int offset = kDefaultKeyedHeaderOffsetSentinel) 6777 int offset = kDefaultKeyedHeaderOffsetSentinel)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
6810 }; 6872 };
6811 6873
6812 6874
6813 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { 6875 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> {
6814 public: 6876 public:
6815 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, 6877 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*,
6816 HValue*); 6878 HValue*);
6817 HValue* object() const { return OperandAt(0); } 6879 HValue* object() const { return OperandAt(0); }
6818 HValue* key() const { return OperandAt(1); } 6880 HValue* key() const { return OperandAt(1); }
6819 HValue* context() const { return OperandAt(2); } 6881 HValue* context() const { return OperandAt(2); }
6820 FeedbackVectorICSlot slot() const { 6882 FeedbackVectorICSlot slot() const { return slot_; }
6821 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6822 return slot_;
6823 }
6824 Handle<TypeFeedbackVector> feedback_vector() const { 6883 Handle<TypeFeedbackVector> feedback_vector() const {
6825 return feedback_vector_; 6884 return feedback_vector_;
6826 } 6885 }
6886 bool HasVectorAndSlot() const { return FLAG_vector_ics; }
6827 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, 6887 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
6828 FeedbackVectorICSlot slot) { 6888 FeedbackVectorICSlot slot) {
6829 DCHECK(FLAG_vector_ics); 6889 DCHECK(FLAG_vector_ics);
6830 feedback_vector_ = vector; 6890 feedback_vector_ = vector;
6831 slot_ = slot; 6891 slot_ = slot;
6832 } 6892 }
6833 6893
6834 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 6894 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6835 6895
6836 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6896 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after
7979 }; 8039 };
7980 8040
7981 8041
7982 8042
7983 #undef DECLARE_INSTRUCTION 8043 #undef DECLARE_INSTRUCTION
7984 #undef DECLARE_CONCRETE_INSTRUCTION 8044 #undef DECLARE_CONCRETE_INSTRUCTION
7985 8045
7986 } } // namespace v8::internal 8046 } } // namespace v8::internal
7987 8047
7988 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 8048 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« src/code-stubs-hydrogen.cc ('K') | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698