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

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: REBASE. 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 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after
6550 6615
6551 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> { 6616 class HLoadNamedGeneric FINAL : public HTemplateInstruction<2> {
6552 public: 6617 public:
6553 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, 6618 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*,
6554 Handle<Object>); 6619 Handle<Object>);
6555 6620
6556 HValue* context() const { return OperandAt(0); } 6621 HValue* context() const { return OperandAt(0); }
6557 HValue* object() const { return OperandAt(1); } 6622 HValue* object() const { return OperandAt(1); }
6558 Handle<Object> name() const { return name_; } 6623 Handle<Object> name() const { return name_; }
6559 6624
6560 FeedbackVectorICSlot slot() const { 6625 FeedbackVectorICSlot slot() const { return slot_; }
6561 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6562 return slot_;
6563 }
6564 Handle<TypeFeedbackVector> feedback_vector() const { 6626 Handle<TypeFeedbackVector> feedback_vector() const {
6565 return feedback_vector_; 6627 return feedback_vector_;
6566 } 6628 }
6629 bool HasVectorAndSlot() const { return FLAG_vector_ics; }
6567 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, 6630 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
6568 FeedbackVectorICSlot slot) { 6631 FeedbackVectorICSlot slot) {
6569 DCHECK(FLAG_vector_ics); 6632 DCHECK(FLAG_vector_ics);
6570 feedback_vector_ = vector; 6633 feedback_vector_ = vector;
6571 slot_ = slot; 6634 slot_ = slot;
6572 } 6635 }
6573 6636
6574 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6637 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
6575 return Representation::Tagged(); 6638 return Representation::Tagged();
6576 } 6639 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
6715 6778
6716 virtual Range* InferRange(Zone* zone) OVERRIDE; 6779 virtual Range* InferRange(Zone* zone) OVERRIDE;
6717 6780
6718 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) 6781 DECLARE_CONCRETE_INSTRUCTION(LoadKeyed)
6719 6782
6720 protected: 6783 protected:
6721 virtual bool DataEquals(HValue* other) OVERRIDE { 6784 virtual bool DataEquals(HValue* other) OVERRIDE {
6722 if (!other->IsLoadKeyed()) return false; 6785 if (!other->IsLoadKeyed()) return false;
6723 HLoadKeyed* other_load = HLoadKeyed::cast(other); 6786 HLoadKeyed* other_load = HLoadKeyed::cast(other);
6724 6787
6725 if (IsDehoisted() && base_offset() != other_load->base_offset()) 6788 if (base_offset() != other_load->base_offset()) return false;
6726 return false;
6727 return elements_kind() == other_load->elements_kind(); 6789 return elements_kind() == other_load->elements_kind();
6728 } 6790 }
6729 6791
6730 private: 6792 private:
6731 HLoadKeyed(HValue* obj, 6793 HLoadKeyed(HValue* obj,
6732 HValue* key, 6794 HValue* key,
6733 HValue* dependency, 6795 HValue* dependency,
6734 ElementsKind elements_kind, 6796 ElementsKind elements_kind,
6735 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, 6797 LoadKeyedHoleMode mode = NEVER_RETURN_HOLE,
6736 int offset = kDefaultKeyedHeaderOffsetSentinel) 6798 int offset = kDefaultKeyedHeaderOffsetSentinel)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
6831 }; 6893 };
6832 6894
6833 6895
6834 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { 6896 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> {
6835 public: 6897 public:
6836 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, 6898 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*,
6837 HValue*); 6899 HValue*);
6838 HValue* object() const { return OperandAt(0); } 6900 HValue* object() const { return OperandAt(0); }
6839 HValue* key() const { return OperandAt(1); } 6901 HValue* key() const { return OperandAt(1); }
6840 HValue* context() const { return OperandAt(2); } 6902 HValue* context() const { return OperandAt(2); }
6841 FeedbackVectorICSlot slot() const { 6903 FeedbackVectorICSlot slot() const { return slot_; }
6842 DCHECK(FLAG_vector_ics && !slot_.IsInvalid());
6843 return slot_;
6844 }
6845 Handle<TypeFeedbackVector> feedback_vector() const { 6904 Handle<TypeFeedbackVector> feedback_vector() const {
6846 return feedback_vector_; 6905 return feedback_vector_;
6847 } 6906 }
6907 bool HasVectorAndSlot() const { return FLAG_vector_ics; }
6848 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, 6908 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
6849 FeedbackVectorICSlot slot) { 6909 FeedbackVectorICSlot slot) {
6850 DCHECK(FLAG_vector_ics); 6910 DCHECK(FLAG_vector_ics);
6851 feedback_vector_ = vector; 6911 feedback_vector_ = vector;
6852 slot_ = slot; 6912 slot_ = slot;
6853 } 6913 }
6854 6914
6855 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT 6915 virtual std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT
6856 6916
6857 virtual Representation RequiredInputRepresentation(int index) OVERRIDE { 6917 virtual Representation RequiredInputRepresentation(int index) OVERRIDE {
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after
8000 }; 8060 };
8001 8061
8002 8062
8003 8063
8004 #undef DECLARE_INSTRUCTION 8064 #undef DECLARE_INSTRUCTION
8005 #undef DECLARE_CONCRETE_INSTRUCTION 8065 #undef DECLARE_CONCRETE_INSTRUCTION
8006 8066
8007 } } // namespace v8::internal 8067 } } // namespace v8::internal
8008 8068
8009 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 8069 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« src/flag-definitions.h ('K') | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698