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

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

Issue 141363005: A64: Synchronize with r15204. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 11 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
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 // compare the non-Operand parts of the instruction. 1143 // compare the non-Operand parts of the instruction.
1144 virtual bool DataEquals(HValue* other) { 1144 virtual bool DataEquals(HValue* other) {
1145 UNREACHABLE(); 1145 UNREACHABLE();
1146 return false; 1146 return false;
1147 } 1147 }
1148 1148
1149 virtual Representation RepresentationFromInputs() { 1149 virtual Representation RepresentationFromInputs() {
1150 return representation(); 1150 return representation();
1151 } 1151 }
1152 Representation RepresentationFromUses(); 1152 Representation RepresentationFromUses();
1153 Representation RepresentationFromUseRequirements();
1153 virtual void UpdateRepresentation(Representation new_rep, 1154 virtual void UpdateRepresentation(Representation new_rep,
1154 HInferRepresentation* h_infer, 1155 HInferRepresentation* h_infer,
1155 const char* reason); 1156 const char* reason);
1156 void AddDependantsToWorklist(HInferRepresentation* h_infer); 1157 void AddDependantsToWorklist(HInferRepresentation* h_infer);
1157 1158
1158 virtual void RepresentationChanged(Representation to) { } 1159 virtual void RepresentationChanged(Representation to) { }
1159 1160
1160 virtual Range* InferRange(Zone* zone); 1161 virtual Range* InferRange(Zone* zone);
1161 virtual void DeleteFromGraph() = 0; 1162 virtual void DeleteFromGraph() = 0;
1162 virtual void InternalSetOperandAt(int index, HValue* value) = 0; 1163 virtual void InternalSetOperandAt(int index, HValue* value) = 0;
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after
2009 2010
2010 enum InliningKind { 2011 enum InliningKind {
2011 NORMAL_RETURN, // Normal function/method call and return. 2012 NORMAL_RETURN, // Normal function/method call and return.
2012 DROP_EXTRA_ON_RETURN, // Drop an extra value from the environment on return. 2013 DROP_EXTRA_ON_RETURN, // Drop an extra value from the environment on return.
2013 CONSTRUCT_CALL_RETURN, // Either use allocated receiver or return value. 2014 CONSTRUCT_CALL_RETURN, // Either use allocated receiver or return value.
2014 GETTER_CALL_RETURN, // Returning from a getter, need to restore context. 2015 GETTER_CALL_RETURN, // Returning from a getter, need to restore context.
2015 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value. 2016 SETTER_CALL_RETURN // Use the RHS of the assignment as the return value.
2016 }; 2017 };
2017 2018
2018 2019
2020 class HArgumentsObject;
2021
2022
2019 class HEnterInlined: public HTemplateInstruction<0> { 2023 class HEnterInlined: public HTemplateInstruction<0> {
2020 public: 2024 public:
2021 HEnterInlined(Handle<JSFunction> closure, 2025 HEnterInlined(Handle<JSFunction> closure,
2022 int arguments_count, 2026 int arguments_count,
2023 FunctionLiteral* function, 2027 FunctionLiteral* function,
2024 InliningKind inlining_kind, 2028 InliningKind inlining_kind,
2025 Variable* arguments_var, 2029 Variable* arguments_var,
2026 ZoneList<HValue*>* arguments_values, 2030 HArgumentsObject* arguments_object,
2027 bool undefined_receiver, 2031 bool undefined_receiver,
2028 Zone* zone) 2032 Zone* zone)
2029 : closure_(closure), 2033 : closure_(closure),
2030 arguments_count_(arguments_count), 2034 arguments_count_(arguments_count),
2031 arguments_pushed_(false), 2035 arguments_pushed_(false),
2032 function_(function), 2036 function_(function),
2033 inlining_kind_(inlining_kind), 2037 inlining_kind_(inlining_kind),
2034 arguments_var_(arguments_var), 2038 arguments_var_(arguments_var),
2035 arguments_values_(arguments_values), 2039 arguments_object_(arguments_object),
2036 undefined_receiver_(undefined_receiver), 2040 undefined_receiver_(undefined_receiver),
2037 return_targets_(2, zone) { 2041 return_targets_(2, zone) {
2038 } 2042 }
2039 2043
2040 void RegisterReturnTarget(HBasicBlock* return_target, Zone* zone); 2044 void RegisterReturnTarget(HBasicBlock* return_target, Zone* zone);
2041 ZoneList<HBasicBlock*>* return_targets() { return &return_targets_; } 2045 ZoneList<HBasicBlock*>* return_targets() { return &return_targets_; }
2042 2046
2043 virtual void PrintDataTo(StringStream* stream); 2047 virtual void PrintDataTo(StringStream* stream);
2044 2048
2045 Handle<JSFunction> closure() const { return closure_; } 2049 Handle<JSFunction> closure() const { return closure_; }
2046 int arguments_count() const { return arguments_count_; } 2050 int arguments_count() const { return arguments_count_; }
2047 bool arguments_pushed() const { return arguments_pushed_; } 2051 bool arguments_pushed() const { return arguments_pushed_; }
2048 void set_arguments_pushed() { arguments_pushed_ = true; } 2052 void set_arguments_pushed() { arguments_pushed_ = true; }
2049 FunctionLiteral* function() const { return function_; } 2053 FunctionLiteral* function() const { return function_; }
2050 InliningKind inlining_kind() const { return inlining_kind_; } 2054 InliningKind inlining_kind() const { return inlining_kind_; }
2051 bool undefined_receiver() const { return undefined_receiver_; } 2055 bool undefined_receiver() const { return undefined_receiver_; }
2052 2056
2053 virtual Representation RequiredInputRepresentation(int index) { 2057 virtual Representation RequiredInputRepresentation(int index) {
2054 return Representation::None(); 2058 return Representation::None();
2055 } 2059 }
2056 2060
2057 Variable* arguments_var() { return arguments_var_; } 2061 Variable* arguments_var() { return arguments_var_; }
2058 ZoneList<HValue*>* arguments_values() { return arguments_values_; } 2062 HArgumentsObject* arguments_object() { return arguments_object_; }
2059 2063
2060 DECLARE_CONCRETE_INSTRUCTION(EnterInlined) 2064 DECLARE_CONCRETE_INSTRUCTION(EnterInlined)
2061 2065
2062 private: 2066 private:
2063 Handle<JSFunction> closure_; 2067 Handle<JSFunction> closure_;
2064 int arguments_count_; 2068 int arguments_count_;
2065 bool arguments_pushed_; 2069 bool arguments_pushed_;
2066 FunctionLiteral* function_; 2070 FunctionLiteral* function_;
2067 InliningKind inlining_kind_; 2071 InliningKind inlining_kind_;
2068 Variable* arguments_var_; 2072 Variable* arguments_var_;
2069 ZoneList<HValue*>* arguments_values_; 2073 HArgumentsObject* arguments_object_;
2070 bool undefined_receiver_; 2074 bool undefined_receiver_;
2071 ZoneList<HBasicBlock*> return_targets_; 2075 ZoneList<HBasicBlock*> return_targets_;
2072 }; 2076 };
2073 2077
2074 2078
2075 class HLeaveInlined: public HTemplateInstruction<0> { 2079 class HLeaveInlined: public HTemplateInstruction<0> {
2076 public: 2080 public:
2077 HLeaveInlined() { } 2081 HLeaveInlined() { }
2078 2082
2079 virtual Representation RequiredInputRepresentation(int index) { 2083 virtual Representation RequiredInputRepresentation(int index) {
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
2466 HValue* context() { return first(); } 2470 HValue* context() { return first(); }
2467 HValue* constructor() { return second(); } 2471 HValue* constructor() { return second(); }
2468 2472
2469 DECLARE_CONCRETE_INSTRUCTION(CallNew) 2473 DECLARE_CONCRETE_INSTRUCTION(CallNew)
2470 }; 2474 };
2471 2475
2472 2476
2473 class HCallNewArray: public HCallNew { 2477 class HCallNewArray: public HCallNew {
2474 public: 2478 public:
2475 HCallNewArray(HValue* context, HValue* constructor, int argument_count, 2479 HCallNewArray(HValue* context, HValue* constructor, int argument_count,
2476 Handle<JSGlobalPropertyCell> type_cell) 2480 Handle<Cell> type_cell)
2477 : HCallNew(context, constructor, argument_count), 2481 : HCallNew(context, constructor, argument_count),
2478 type_cell_(type_cell) { 2482 type_cell_(type_cell) {
2479 elements_kind_ = static_cast<ElementsKind>( 2483 elements_kind_ = static_cast<ElementsKind>(
2480 Smi::cast(type_cell->value())->value()); 2484 Smi::cast(type_cell->value())->value());
2481 } 2485 }
2482 2486
2483 Handle<JSGlobalPropertyCell> property_cell() const { 2487 Handle<Cell> property_cell() const {
2484 return type_cell_; 2488 return type_cell_;
2485 } 2489 }
2486 2490
2487 ElementsKind elements_kind() const { return elements_kind_; } 2491 ElementsKind elements_kind() const { return elements_kind_; }
2488 2492
2489 DECLARE_CONCRETE_INSTRUCTION(CallNewArray) 2493 DECLARE_CONCRETE_INSTRUCTION(CallNewArray)
2490 2494
2491 private: 2495 private:
2492 ElementsKind elements_kind_; 2496 ElementsKind elements_kind_;
2493 Handle<JSGlobalPropertyCell> type_cell_; 2497 Handle<Cell> type_cell_;
2494 }; 2498 };
2495 2499
2496 2500
2497 class HCallRuntime: public HCall<1> { 2501 class HCallRuntime: public HCall<1> {
2498 public: 2502 public:
2499 HCallRuntime(HValue* context, 2503 HCallRuntime(HValue* context,
2500 Handle<String> name, 2504 Handle<String> name,
2501 const Runtime::Function* c_function, 2505 const Runtime::Function* c_function,
2502 int argument_count) 2506 int argument_count)
2503 : HCall<1>(argument_count), c_function_(c_function), name_(name) { 2507 : HCall<1>(argument_count), c_function_(c_function), name_(name) {
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 } 3062 }
3059 ASSERT(merged_index >= 0); 3063 ASSERT(merged_index >= 0);
3060 SetFlag(kFlexibleRepresentation); 3064 SetFlag(kFlexibleRepresentation);
3061 SetFlag(kAllowUndefinedAsNaN); 3065 SetFlag(kAllowUndefinedAsNaN);
3062 } 3066 }
3063 3067
3064 virtual Representation RepresentationFromInputs(); 3068 virtual Representation RepresentationFromInputs();
3065 3069
3066 virtual Range* InferRange(Zone* zone); 3070 virtual Range* InferRange(Zone* zone);
3067 virtual void InferRepresentation(HInferRepresentation* h_infer); 3071 virtual void InferRepresentation(HInferRepresentation* h_infer);
3068 Representation RepresentationFromUseRequirements();
3069 virtual Representation RequiredInputRepresentation(int index) { 3072 virtual Representation RequiredInputRepresentation(int index) {
3070 return representation(); 3073 return representation();
3071 } 3074 }
3072 virtual Representation KnownOptimalRepresentation() { 3075 virtual Representation KnownOptimalRepresentation() {
3073 return representation(); 3076 return representation();
3074 } 3077 }
3075 virtual HType CalculateInferredType(); 3078 virtual HType CalculateInferredType();
3076 virtual int OperandCount() { return inputs_.length(); } 3079 virtual int OperandCount() { return inputs_.length(); }
3077 virtual HValue* OperandAt(int index) const { return inputs_[index]; } 3080 virtual HValue* OperandAt(int index) const { return inputs_[index]; }
3078 HValue* GetRedundantReplacement(); 3081 HValue* GetRedundantReplacement();
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
3195 // the operand can change if a new idef of the phi is added between the phi 3198 // the operand can change if a new idef of the phi is added between the phi
3196 // and this instruction (inserting an idef updates every use). 3199 // and this instruction (inserting an idef updates every use).
3197 HPhi* phi_; 3200 HPhi* phi_;
3198 NumericRelation relation_; 3201 NumericRelation relation_;
3199 int operand_index_; 3202 int operand_index_;
3200 }; 3203 };
3201 3204
3202 3205
3203 class HArgumentsObject: public HTemplateInstruction<0> { 3206 class HArgumentsObject: public HTemplateInstruction<0> {
3204 public: 3207 public:
3205 HArgumentsObject() { 3208 HArgumentsObject(int count, Zone* zone) : values_(count, zone) {
3206 set_representation(Representation::Tagged()); 3209 set_representation(Representation::Tagged());
3207 SetFlag(kIsArguments); 3210 SetFlag(kIsArguments);
3208 } 3211 }
3209 3212
3213 const ZoneList<HValue*>* arguments_values() const { return &values_; }
3214 int arguments_count() const { return values_.length(); }
3215
3216 void AddArgument(HValue* argument, Zone* zone) {
3217 values_.Add(NULL, zone); // Resize list.
3218 SetOperandAt(values_.length() - 1, argument);
3219 }
3220
3221 virtual int OperandCount() { return values_.length(); }
3222 virtual HValue* OperandAt(int index) const { return values_[index]; }
3223
3210 virtual Representation RequiredInputRepresentation(int index) { 3224 virtual Representation RequiredInputRepresentation(int index) {
3211 return Representation::None(); 3225 return Representation::None();
3212 } 3226 }
3213 3227
3214 DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject) 3228 DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject)
3215 3229
3230 protected:
3231 virtual void InternalSetOperandAt(int index, HValue* value) {
3232 values_[index] = value;
3233 }
3234
3216 private: 3235 private:
3217 virtual bool IsDeletable() const { return true; } 3236 virtual bool IsDeletable() const { return true; }
3237
3238 ZoneList<HValue*> values_;
3218 }; 3239 };
3219 3240
3220 3241
3221 class HConstant: public HTemplateInstruction<0> { 3242 class HConstant: public HTemplateInstruction<0> {
3222 public: 3243 public:
3223 HConstant(Handle<Object> handle, Representation r); 3244 HConstant(Handle<Object> handle, Representation r = Representation::None());
3224 HConstant(int32_t value, 3245 HConstant(int32_t value,
3225 Representation r = Representation::None(), 3246 Representation r = Representation::None(),
3226 bool is_not_in_new_space = true, 3247 bool is_not_in_new_space = true,
3227 Handle<Object> optional_handle = Handle<Object>::null()); 3248 Handle<Object> optional_handle = Handle<Object>::null());
3228 HConstant(double value, 3249 HConstant(double value,
3229 Representation r = Representation::None(), 3250 Representation r = Representation::None(),
3230 bool is_not_in_new_space = true, 3251 bool is_not_in_new_space = true,
3231 Handle<Object> optional_handle = Handle<Object>::null()); 3252 Handle<Object> optional_handle = Handle<Object>::null());
3232 HConstant(Handle<Object> handle, 3253 HConstant(Handle<Object> handle,
3233 UniqueValueId unique_id, 3254 UniqueValueId unique_id,
(...skipping 1591 matching lines...) Expand 10 before | Expand all | Expand 10 after
4825 4846
4826 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue) 4847 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue)
4827 4848
4828 private: 4849 private:
4829 HPhi* incoming_value_; 4850 HPhi* incoming_value_;
4830 }; 4851 };
4831 4852
4832 4853
4833 class HLoadGlobalCell: public HTemplateInstruction<0> { 4854 class HLoadGlobalCell: public HTemplateInstruction<0> {
4834 public: 4855 public:
4835 HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details) 4856 HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details)
4836 : cell_(cell), details_(details), unique_id_() { 4857 : cell_(cell), details_(details), unique_id_() {
4837 set_representation(Representation::Tagged()); 4858 set_representation(Representation::Tagged());
4838 SetFlag(kUseGVN); 4859 SetFlag(kUseGVN);
4839 SetGVNFlag(kDependsOnGlobalVars); 4860 SetGVNFlag(kDependsOnGlobalVars);
4840 } 4861 }
4841 4862
4842 Handle<JSGlobalPropertyCell> cell() const { return cell_; } 4863 Handle<Cell> cell() const { return cell_; }
4843 bool RequiresHoleCheck() const; 4864 bool RequiresHoleCheck() const;
4844 4865
4845 virtual void PrintDataTo(StringStream* stream); 4866 virtual void PrintDataTo(StringStream* stream);
4846 4867
4847 virtual intptr_t Hashcode() { 4868 virtual intptr_t Hashcode() {
4848 return unique_id_.Hashcode(); 4869 return unique_id_.Hashcode();
4849 } 4870 }
4850 4871
4851 virtual void FinalizeUniqueValueId() { 4872 virtual void FinalizeUniqueValueId() {
4852 unique_id_ = UniqueValueId(cell_); 4873 unique_id_ = UniqueValueId(cell_);
4853 } 4874 }
4854 4875
4855 virtual Representation RequiredInputRepresentation(int index) { 4876 virtual Representation RequiredInputRepresentation(int index) {
4856 return Representation::None(); 4877 return Representation::None();
4857 } 4878 }
4858 4879
4859 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) 4880 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell)
4860 4881
4861 protected: 4882 protected:
4862 virtual bool DataEquals(HValue* other) { 4883 virtual bool DataEquals(HValue* other) {
4863 HLoadGlobalCell* b = HLoadGlobalCell::cast(other); 4884 HLoadGlobalCell* b = HLoadGlobalCell::cast(other);
4864 return unique_id_ == b->unique_id_; 4885 return unique_id_ == b->unique_id_;
4865 } 4886 }
4866 4887
4867 private: 4888 private:
4868 virtual bool IsDeletable() const { return !RequiresHoleCheck(); } 4889 virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
4869 4890
4870 Handle<JSGlobalPropertyCell> cell_; 4891 Handle<Cell> cell_;
4871 PropertyDetails details_; 4892 PropertyDetails details_;
4872 UniqueValueId unique_id_; 4893 UniqueValueId unique_id_;
4873 }; 4894 };
4874 4895
4875 4896
4876 class HLoadGlobalGeneric: public HTemplateInstruction<2> { 4897 class HLoadGlobalGeneric: public HTemplateInstruction<2> {
4877 public: 4898 public:
4878 HLoadGlobalGeneric(HValue* context, 4899 HLoadGlobalGeneric(HValue* context,
4879 HValue* global_object, 4900 HValue* global_object,
4880 Handle<Object> name, 4901 Handle<Object> name,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
5040 if (object->IsAllocate()) { 5061 if (object->IsAllocate()) {
5041 return !HAllocate::cast(object)->GuaranteedInNewSpace(); 5062 return !HAllocate::cast(object)->GuaranteedInNewSpace();
5042 } 5063 }
5043 return true; 5064 return true;
5044 } 5065 }
5045 5066
5046 5067
5047 class HStoreGlobalCell: public HUnaryOperation { 5068 class HStoreGlobalCell: public HUnaryOperation {
5048 public: 5069 public:
5049 HStoreGlobalCell(HValue* value, 5070 HStoreGlobalCell(HValue* value,
5050 Handle<JSGlobalPropertyCell> cell, 5071 Handle<PropertyCell> cell,
5051 PropertyDetails details) 5072 PropertyDetails details)
5052 : HUnaryOperation(value), 5073 : HUnaryOperation(value),
5053 cell_(cell), 5074 cell_(cell),
5054 details_(details) { 5075 details_(details) {
5055 SetGVNFlag(kChangesGlobalVars); 5076 SetGVNFlag(kChangesGlobalVars);
5056 } 5077 }
5057 5078
5058 Handle<JSGlobalPropertyCell> cell() const { return cell_; } 5079 Handle<PropertyCell> cell() const { return cell_; }
5059 bool RequiresHoleCheck() { 5080 bool RequiresHoleCheck() {
5060 return !details_.IsDontDelete() || details_.IsReadOnly(); 5081 return !details_.IsDontDelete() || details_.IsReadOnly();
5061 } 5082 }
5062 bool NeedsWriteBarrier() { 5083 bool NeedsWriteBarrier() {
5063 return StoringValueNeedsWriteBarrier(value()); 5084 return StoringValueNeedsWriteBarrier(value());
5064 } 5085 }
5065 5086
5066 virtual Representation RequiredInputRepresentation(int index) { 5087 virtual Representation RequiredInputRepresentation(int index) {
5067 return Representation::Tagged(); 5088 return Representation::Tagged();
5068 } 5089 }
5069 virtual void PrintDataTo(StringStream* stream); 5090 virtual void PrintDataTo(StringStream* stream);
5070 5091
5071 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell) 5092 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell)
5072 5093
5073 private: 5094 private:
5074 Handle<JSGlobalPropertyCell> cell_; 5095 Handle<PropertyCell> cell_;
5075 PropertyDetails details_; 5096 PropertyDetails details_;
5076 }; 5097 };
5077 5098
5078 5099
5079 class HStoreGlobalGeneric: public HTemplateInstruction<3> { 5100 class HStoreGlobalGeneric: public HTemplateInstruction<3> {
5080 public: 5101 public:
5081 HStoreGlobalGeneric(HValue* context, 5102 HStoreGlobalGeneric(HValue* context,
5082 HValue* global_object, 5103 HValue* global_object,
5083 Handle<Object> name, 5104 Handle<Object> name,
5084 HValue* value, 5105 HValue* value,
(...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after
6587 virtual bool IsDeletable() const { return true; } 6608 virtual bool IsDeletable() const { return true; }
6588 }; 6609 };
6589 6610
6590 6611
6591 #undef DECLARE_INSTRUCTION 6612 #undef DECLARE_INSTRUCTION
6592 #undef DECLARE_CONCRETE_INSTRUCTION 6613 #undef DECLARE_CONCRETE_INSTRUCTION
6593 6614
6594 } } // namespace v8::internal 6615 } } // namespace v8::internal
6595 6616
6596 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ 6617 #endif // V8_HYDROGEN_INSTRUCTIONS_H_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698