| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 14 matching lines...) Expand all Loading... |
| 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | 27 |
| 28 #ifndef V8_IA32_LITHIUM_IA32_H_ | 28 #ifndef V8_IA32_LITHIUM_IA32_H_ |
| 29 #define V8_IA32_LITHIUM_IA32_H_ | 29 #define V8_IA32_LITHIUM_IA32_H_ |
| 30 | 30 |
| 31 #include "hydrogen.h" | 31 #include "hydrogen.h" |
| 32 #include "lithium-allocator.h" | 32 #include "lithium-allocator.h" |
| 33 #include "lithium.h" | 33 #include "lithium.h" |
| 34 #include "safepoint-table.h" | 34 #include "safepoint-table.h" |
| 35 #include "utils.h" |
| 35 | 36 |
| 36 namespace v8 { | 37 namespace v8 { |
| 37 namespace internal { | 38 namespace internal { |
| 38 | 39 |
| 39 // Forward declarations. | 40 // Forward declarations. |
| 40 class LCodeGen; | 41 class LCodeGen; |
| 41 | 42 |
| 42 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ | 43 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ |
| 43 V(AccessArgumentsAt) \ | 44 V(AccessArgumentsAt) \ |
| 44 V(AddI) \ | 45 V(AddI) \ |
| (...skipping 18 matching lines...) Expand all Loading... |
| 63 V(CallStub) \ | 64 V(CallStub) \ |
| 64 V(CheckFunction) \ | 65 V(CheckFunction) \ |
| 65 V(CheckInstanceType) \ | 66 V(CheckInstanceType) \ |
| 66 V(CheckMap) \ | 67 V(CheckMap) \ |
| 67 V(CheckNonSmi) \ | 68 V(CheckNonSmi) \ |
| 68 V(CheckPrototypeMaps) \ | 69 V(CheckPrototypeMaps) \ |
| 69 V(CheckSmi) \ | 70 V(CheckSmi) \ |
| 70 V(ClampDToUint8) \ | 71 V(ClampDToUint8) \ |
| 71 V(ClampIToUint8) \ | 72 V(ClampIToUint8) \ |
| 72 V(ClampTToUint8) \ | 73 V(ClampTToUint8) \ |
| 73 V(ClassOfTest) \ | |
| 74 V(ClassOfTestAndBranch) \ | 74 V(ClassOfTestAndBranch) \ |
| 75 V(CmpID) \ | |
| 76 V(CmpIDAndBranch) \ | 75 V(CmpIDAndBranch) \ |
| 77 V(CmpJSObjectEq) \ | 76 V(CmpObjectEqAndBranch) \ |
| 78 V(CmpJSObjectEqAndBranch) \ | |
| 79 V(CmpSymbolEq) \ | |
| 80 V(CmpSymbolEqAndBranch) \ | |
| 81 V(CmpMapAndBranch) \ | 77 V(CmpMapAndBranch) \ |
| 82 V(CmpT) \ | 78 V(CmpT) \ |
| 83 V(CmpTAndBranch) \ | 79 V(CmpConstantEqAndBranch) \ |
| 84 V(ConstantD) \ | 80 V(ConstantD) \ |
| 85 V(ConstantI) \ | 81 V(ConstantI) \ |
| 86 V(ConstantT) \ | 82 V(ConstantT) \ |
| 87 V(Context) \ | 83 V(Context) \ |
| 88 V(DeleteProperty) \ | 84 V(DeleteProperty) \ |
| 89 V(Deoptimize) \ | 85 V(Deoptimize) \ |
| 90 V(DivI) \ | 86 V(DivI) \ |
| 91 V(DoubleToI) \ | 87 V(DoubleToI) \ |
| 88 V(ElementsKind) \ |
| 92 V(ExternalArrayLength) \ | 89 V(ExternalArrayLength) \ |
| 93 V(FixedArrayLength) \ | 90 V(FixedArrayLength) \ |
| 94 V(FunctionLiteral) \ | 91 V(FunctionLiteral) \ |
| 95 V(GetCachedArrayIndex) \ | 92 V(GetCachedArrayIndex) \ |
| 96 V(GlobalObject) \ | 93 V(GlobalObject) \ |
| 97 V(GlobalReceiver) \ | 94 V(GlobalReceiver) \ |
| 98 V(Goto) \ | 95 V(Goto) \ |
| 99 V(HasCachedArrayIndex) \ | |
| 100 V(HasCachedArrayIndexAndBranch) \ | 96 V(HasCachedArrayIndexAndBranch) \ |
| 101 V(HasInstanceType) \ | |
| 102 V(HasInstanceTypeAndBranch) \ | 97 V(HasInstanceTypeAndBranch) \ |
| 103 V(In) \ | 98 V(In) \ |
| 104 V(InstanceOf) \ | 99 V(InstanceOf) \ |
| 105 V(InstanceOfAndBranch) \ | |
| 106 V(InstanceOfKnownGlobal) \ | 100 V(InstanceOfKnownGlobal) \ |
| 107 V(InstructionGap) \ | 101 V(InstructionGap) \ |
| 108 V(Integer32ToDouble) \ | 102 V(Integer32ToDouble) \ |
| 109 V(InvokeFunction) \ | 103 V(InvokeFunction) \ |
| 110 V(IsConstructCall) \ | |
| 111 V(IsConstructCallAndBranch) \ | 104 V(IsConstructCallAndBranch) \ |
| 112 V(IsNull) \ | |
| 113 V(IsNullAndBranch) \ | 105 V(IsNullAndBranch) \ |
| 114 V(IsObject) \ | |
| 115 V(IsObjectAndBranch) \ | 106 V(IsObjectAndBranch) \ |
| 116 V(IsSmi) \ | |
| 117 V(IsSmiAndBranch) \ | 107 V(IsSmiAndBranch) \ |
| 118 V(IsUndetectable) \ | |
| 119 V(IsUndetectableAndBranch) \ | 108 V(IsUndetectableAndBranch) \ |
| 120 V(JSArrayLength) \ | 109 V(JSArrayLength) \ |
| 121 V(Label) \ | 110 V(Label) \ |
| 122 V(LazyBailout) \ | 111 V(LazyBailout) \ |
| 123 V(LoadContextSlot) \ | 112 V(LoadContextSlot) \ |
| 124 V(LoadElements) \ | 113 V(LoadElements) \ |
| 125 V(LoadExternalArrayPointer) \ | 114 V(LoadExternalArrayPointer) \ |
| 126 V(LoadFunctionPrototype) \ | 115 V(LoadFunctionPrototype) \ |
| 127 V(LoadGlobalCell) \ | 116 V(LoadGlobalCell) \ |
| 128 V(LoadGlobalGeneric) \ | 117 V(LoadGlobalGeneric) \ |
| (...skipping 27 matching lines...) Expand all Loading... |
| 156 V(StoreKeyedGeneric) \ | 145 V(StoreKeyedGeneric) \ |
| 157 V(StoreKeyedSpecializedArrayElement) \ | 146 V(StoreKeyedSpecializedArrayElement) \ |
| 158 V(StoreNamedField) \ | 147 V(StoreNamedField) \ |
| 159 V(StoreNamedGeneric) \ | 148 V(StoreNamedGeneric) \ |
| 160 V(StringAdd) \ | 149 V(StringAdd) \ |
| 161 V(StringCharCodeAt) \ | 150 V(StringCharCodeAt) \ |
| 162 V(StringCharFromCode) \ | 151 V(StringCharFromCode) \ |
| 163 V(StringLength) \ | 152 V(StringLength) \ |
| 164 V(SubI) \ | 153 V(SubI) \ |
| 165 V(TaggedToI) \ | 154 V(TaggedToI) \ |
| 155 V(ThisFunction) \ |
| 166 V(Throw) \ | 156 V(Throw) \ |
| 167 V(ToFastProperties) \ | 157 V(ToFastProperties) \ |
| 168 V(Typeof) \ | 158 V(Typeof) \ |
| 169 V(TypeofIs) \ | |
| 170 V(TypeofIsAndBranch) \ | 159 V(TypeofIsAndBranch) \ |
| 171 V(UnaryMathOperation) \ | 160 V(UnaryMathOperation) \ |
| 172 V(UnknownOSRValue) \ | 161 V(UnknownOSRValue) \ |
| 173 V(ValueOf) | 162 V(ValueOf) |
| 174 | 163 |
| 175 | 164 |
| 176 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ | 165 #define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \ |
| 177 virtual Opcode opcode() const { return LInstruction::k##type; } \ | 166 virtual Opcode opcode() const { return LInstruction::k##type; } \ |
| 178 virtual void CompileToNative(LCodeGen* generator); \ | 167 virtual void CompileToNative(LCodeGen* generator); \ |
| 179 virtual const char* Mnemonic() const { return mnemonic; } \ | 168 virtual const char* Mnemonic() const { return mnemonic; } \ |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 #define DECLARE_PREDICATE(type) \ | 207 #define DECLARE_PREDICATE(type) \ |
| 219 bool Is##type() const { return opcode() == k##type; } | 208 bool Is##type() const { return opcode() == k##type; } |
| 220 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) | 209 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_PREDICATE) |
| 221 #undef DECLARE_PREDICATE | 210 #undef DECLARE_PREDICATE |
| 222 | 211 |
| 223 // Declare virtual predicates for instructions that don't have | 212 // Declare virtual predicates for instructions that don't have |
| 224 // an opcode. | 213 // an opcode. |
| 225 virtual bool IsGap() const { return false; } | 214 virtual bool IsGap() const { return false; } |
| 226 | 215 |
| 227 virtual bool IsControl() const { return false; } | 216 virtual bool IsControl() const { return false; } |
| 228 virtual void SetBranchTargets(int true_block_id, int false_block_id) { } | |
| 229 | 217 |
| 230 void set_environment(LEnvironment* env) { environment_ = env; } | 218 void set_environment(LEnvironment* env) { environment_ = env; } |
| 231 LEnvironment* environment() const { return environment_; } | 219 LEnvironment* environment() const { return environment_; } |
| 232 bool HasEnvironment() const { return environment_ != NULL; } | 220 bool HasEnvironment() const { return environment_ != NULL; } |
| 233 | 221 |
| 234 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } | 222 void set_pointer_map(LPointerMap* p) { pointer_map_.set(p); } |
| 235 LPointerMap* pointer_map() const { return pointer_map_.get(); } | 223 LPointerMap* pointer_map() const { return pointer_map_.get(); } |
| 236 bool HasPointerMap() const { return pointer_map_.is_set(); } | 224 bool HasPointerMap() const { return pointer_map_.is_set(); } |
| 237 | 225 |
| 238 | 226 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 private: | 262 private: |
| 275 LEnvironment* environment_; | 263 LEnvironment* environment_; |
| 276 SetOncePointer<LPointerMap> pointer_map_; | 264 SetOncePointer<LPointerMap> pointer_map_; |
| 277 HValue* hydrogen_value_; | 265 HValue* hydrogen_value_; |
| 278 SetOncePointer<LEnvironment> deoptimization_environment_; | 266 SetOncePointer<LEnvironment> deoptimization_environment_; |
| 279 bool is_call_; | 267 bool is_call_; |
| 280 bool is_save_doubles_; | 268 bool is_save_doubles_; |
| 281 }; | 269 }; |
| 282 | 270 |
| 283 | 271 |
| 284 template<typename ElementType, int NumElements> | |
| 285 class OperandContainer { | |
| 286 public: | |
| 287 OperandContainer() { | |
| 288 for (int i = 0; i < NumElements; i++) elems_[i] = NULL; | |
| 289 } | |
| 290 int length() { return NumElements; } | |
| 291 ElementType& operator[](int i) { | |
| 292 ASSERT(i < length()); | |
| 293 return elems_[i]; | |
| 294 } | |
| 295 void PrintOperandsTo(StringStream* stream); | |
| 296 | |
| 297 private: | |
| 298 ElementType elems_[NumElements]; | |
| 299 }; | |
| 300 | |
| 301 | |
| 302 template<typename ElementType> | |
| 303 class OperandContainer<ElementType, 0> { | |
| 304 public: | |
| 305 int length() { return 0; } | |
| 306 void PrintOperandsTo(StringStream* stream) { } | |
| 307 ElementType& operator[](int i) { | |
| 308 UNREACHABLE(); | |
| 309 static ElementType t = 0; | |
| 310 return t; | |
| 311 } | |
| 312 }; | |
| 313 | |
| 314 | |
| 315 // R = number of result operands (0 or 1). | 272 // R = number of result operands (0 or 1). |
| 316 // I = number of input operands. | 273 // I = number of input operands. |
| 317 // T = number of temporary operands. | 274 // T = number of temporary operands. |
| 318 template<int R, int I, int T> | 275 template<int R, int I, int T> |
| 319 class LTemplateInstruction: public LInstruction { | 276 class LTemplateInstruction: public LInstruction { |
| 320 public: | 277 public: |
| 321 // Allow 0 or 1 output operands. | 278 // Allow 0 or 1 output operands. |
| 322 STATIC_ASSERT(R == 0 || R == 1); | 279 STATIC_ASSERT(R == 0 || R == 1); |
| 323 virtual bool HasResult() const { return R != 0; } | 280 virtual bool HasResult() const { return R != 0; } |
| 324 void set_result(LOperand* operand) { results_[0] = operand; } | 281 void set_result(LOperand* operand) { results_[0] = operand; } |
| 325 LOperand* result() { return results_[0]; } | 282 LOperand* result() { return results_[0]; } |
| 326 | 283 |
| 327 int InputCount() { return I; } | 284 int InputCount() { return I; } |
| 328 LOperand* InputAt(int i) { return inputs_[i]; } | 285 LOperand* InputAt(int i) { return inputs_[i]; } |
| 329 | 286 |
| 330 int TempCount() { return T; } | 287 int TempCount() { return T; } |
| 331 LOperand* TempAt(int i) { return temps_[i]; } | 288 LOperand* TempAt(int i) { return temps_[i]; } |
| 332 | 289 |
| 333 virtual void PrintDataTo(StringStream* stream); | 290 virtual void PrintDataTo(StringStream* stream); |
| 334 virtual void PrintOutputOperandTo(StringStream* stream); | 291 virtual void PrintOutputOperandTo(StringStream* stream); |
| 335 | 292 |
| 336 protected: | 293 protected: |
| 337 OperandContainer<LOperand*, R> results_; | 294 EmbeddedContainer<LOperand*, R> results_; |
| 338 OperandContainer<LOperand*, I> inputs_; | 295 EmbeddedContainer<LOperand*, I> inputs_; |
| 339 OperandContainer<LOperand*, T> temps_; | 296 EmbeddedContainer<LOperand*, T> temps_; |
| 340 }; | 297 }; |
| 341 | 298 |
| 342 | 299 |
| 343 class LGap: public LTemplateInstruction<0, 0, 0> { | 300 class LGap: public LTemplateInstruction<0, 0, 0> { |
| 344 public: | 301 public: |
| 345 explicit LGap(HBasicBlock* block) : block_(block) { | 302 explicit LGap(HBasicBlock* block) : block_(block) { |
| 346 parallel_moves_[BEFORE] = NULL; | 303 parallel_moves_[BEFORE] = NULL; |
| 347 parallel_moves_[START] = NULL; | 304 parallel_moves_[START] = NULL; |
| 348 parallel_moves_[END] = NULL; | 305 parallel_moves_[END] = NULL; |
| 349 parallel_moves_[AFTER] = NULL; | 306 parallel_moves_[AFTER] = NULL; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 class LInstructionGap: public LGap { | 345 class LInstructionGap: public LGap { |
| 389 public: | 346 public: |
| 390 explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } | 347 explicit LInstructionGap(HBasicBlock* block) : LGap(block) { } |
| 391 | 348 |
| 392 DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") | 349 DECLARE_CONCRETE_INSTRUCTION(InstructionGap, "gap") |
| 393 }; | 350 }; |
| 394 | 351 |
| 395 | 352 |
| 396 class LGoto: public LTemplateInstruction<0, 0, 0> { | 353 class LGoto: public LTemplateInstruction<0, 0, 0> { |
| 397 public: | 354 public: |
| 398 LGoto(int block_id, bool include_stack_check = false) | 355 explicit LGoto(int block_id) : block_id_(block_id) { } |
| 399 : block_id_(block_id), include_stack_check_(include_stack_check) { } | |
| 400 | 356 |
| 401 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") | 357 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") |
| 402 virtual void PrintDataTo(StringStream* stream); | 358 virtual void PrintDataTo(StringStream* stream); |
| 403 virtual bool IsControl() const { return true; } | 359 virtual bool IsControl() const { return true; } |
| 404 | 360 |
| 405 int block_id() const { return block_id_; } | 361 int block_id() const { return block_id_; } |
| 406 bool include_stack_check() const { return include_stack_check_; } | |
| 407 | 362 |
| 408 private: | 363 private: |
| 409 int block_id_; | 364 int block_id_; |
| 410 bool include_stack_check_; | |
| 411 }; | 365 }; |
| 412 | 366 |
| 413 | 367 |
| 414 class LLazyBailout: public LTemplateInstruction<0, 0, 0> { | 368 class LLazyBailout: public LTemplateInstruction<0, 0, 0> { |
| 415 public: | 369 public: |
| 416 LLazyBailout() : gap_instructions_size_(0) { } | 370 LLazyBailout() : gap_instructions_size_(0) { } |
| 417 | 371 |
| 418 DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") | 372 DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout") |
| 419 | 373 |
| 420 void set_gap_instructions_size(int gap_instructions_size) { | 374 void set_gap_instructions_size(int gap_instructions_size) { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 public: | 436 public: |
| 483 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") | 437 DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value") |
| 484 }; | 438 }; |
| 485 | 439 |
| 486 | 440 |
| 487 template<int I, int T> | 441 template<int I, int T> |
| 488 class LControlInstruction: public LTemplateInstruction<0, I, T> { | 442 class LControlInstruction: public LTemplateInstruction<0, I, T> { |
| 489 public: | 443 public: |
| 490 virtual bool IsControl() const { return true; } | 444 virtual bool IsControl() const { return true; } |
| 491 | 445 |
| 492 int true_block_id() const { return true_block_id_; } | 446 int SuccessorCount() { return hydrogen()->SuccessorCount(); } |
| 493 int false_block_id() const { return false_block_id_; } | 447 HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); } |
| 494 void SetBranchTargets(int true_block_id, int false_block_id) { | 448 int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); } |
| 495 true_block_id_ = true_block_id; | 449 int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); } |
| 496 false_block_id_ = false_block_id; | |
| 497 } | |
| 498 | 450 |
| 499 private: | 451 private: |
| 500 int true_block_id_; | 452 HControlInstruction* hydrogen() { |
| 501 int false_block_id_; | 453 return HControlInstruction::cast(this->hydrogen_value()); |
| 454 } |
| 502 }; | 455 }; |
| 503 | 456 |
| 504 | 457 |
| 505 class LApplyArguments: public LTemplateInstruction<1, 4, 1> { | 458 class LApplyArguments: public LTemplateInstruction<1, 4, 1> { |
| 506 public: | 459 public: |
| 507 LApplyArguments(LOperand* function, | 460 LApplyArguments(LOperand* function, |
| 508 LOperand* receiver, | 461 LOperand* receiver, |
| 509 LOperand* length, | 462 LOperand* length, |
| 510 LOperand* elements, | 463 LOperand* elements, |
| 511 LOperand* temp) { | 464 LOperand* temp) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 inputs_[0] = left; | 546 inputs_[0] = left; |
| 594 inputs_[1] = right; | 547 inputs_[1] = right; |
| 595 temps_[0] = temp; | 548 temps_[0] = temp; |
| 596 } | 549 } |
| 597 | 550 |
| 598 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") | 551 DECLARE_CONCRETE_INSTRUCTION(MulI, "mul-i") |
| 599 DECLARE_HYDROGEN_ACCESSOR(Mul) | 552 DECLARE_HYDROGEN_ACCESSOR(Mul) |
| 600 }; | 553 }; |
| 601 | 554 |
| 602 | 555 |
| 603 class LCmpID: public LTemplateInstruction<1, 2, 0> { | |
| 604 public: | |
| 605 LCmpID(LOperand* left, LOperand* right) { | |
| 606 inputs_[0] = left; | |
| 607 inputs_[1] = right; | |
| 608 } | |
| 609 | |
| 610 DECLARE_CONCRETE_INSTRUCTION(CmpID, "cmp-id") | |
| 611 DECLARE_HYDROGEN_ACCESSOR(Compare) | |
| 612 | |
| 613 Token::Value op() const { return hydrogen()->token(); } | |
| 614 bool is_double() const { | |
| 615 return hydrogen()->GetInputRepresentation().IsDouble(); | |
| 616 } | |
| 617 }; | |
| 618 | |
| 619 | |
| 620 class LCmpIDAndBranch: public LControlInstruction<2, 0> { | 556 class LCmpIDAndBranch: public LControlInstruction<2, 0> { |
| 621 public: | 557 public: |
| 622 LCmpIDAndBranch(LOperand* left, LOperand* right) { | 558 LCmpIDAndBranch(LOperand* left, LOperand* right) { |
| 623 inputs_[0] = left; | 559 inputs_[0] = left; |
| 624 inputs_[1] = right; | 560 inputs_[1] = right; |
| 625 } | 561 } |
| 626 | 562 |
| 627 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") | 563 DECLARE_CONCRETE_INSTRUCTION(CmpIDAndBranch, "cmp-id-and-branch") |
| 628 DECLARE_HYDROGEN_ACCESSOR(Compare) | 564 DECLARE_HYDROGEN_ACCESSOR(CompareIDAndBranch) |
| 629 | 565 |
| 630 Token::Value op() const { return hydrogen()->token(); } | 566 Token::Value op() const { return hydrogen()->token(); } |
| 631 bool is_double() const { | 567 bool is_double() const { |
| 632 return hydrogen()->GetInputRepresentation().IsDouble(); | 568 return hydrogen()->GetInputRepresentation().IsDouble(); |
| 633 } | 569 } |
| 634 | 570 |
| 635 virtual void PrintDataTo(StringStream* stream); | 571 virtual void PrintDataTo(StringStream* stream); |
| 636 }; | 572 }; |
| 637 | 573 |
| 638 | 574 |
| 639 class LUnaryMathOperation: public LTemplateInstruction<1, 1, 0> { | 575 class LUnaryMathOperation: public LTemplateInstruction<1, 2, 0> { |
| 640 public: | 576 public: |
| 641 explicit LUnaryMathOperation(LOperand* value) { | 577 LUnaryMathOperation(LOperand* context, LOperand* value) { |
| 578 inputs_[1] = context; |
| 642 inputs_[0] = value; | 579 inputs_[0] = value; |
| 643 } | 580 } |
| 644 | 581 |
| 582 LOperand* context() { return inputs_[1]; } |
| 583 LOperand* value() { return inputs_[0]; } |
| 584 |
| 645 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") | 585 DECLARE_CONCRETE_INSTRUCTION(UnaryMathOperation, "unary-math-operation") |
| 646 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) | 586 DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) |
| 647 | 587 |
| 648 virtual void PrintDataTo(StringStream* stream); | 588 virtual void PrintDataTo(StringStream* stream); |
| 649 BuiltinFunctionId op() const { return hydrogen()->op(); } | 589 BuiltinFunctionId op() const { return hydrogen()->op(); } |
| 650 }; | 590 }; |
| 651 | 591 |
| 652 | 592 |
| 653 class LCmpJSObjectEq: public LTemplateInstruction<1, 2, 0> { | 593 class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> { |
| 654 public: | 594 public: |
| 655 LCmpJSObjectEq(LOperand* left, LOperand* right) { | 595 LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { |
| 656 inputs_[0] = left; | 596 inputs_[0] = left; |
| 657 inputs_[1] = right; | 597 inputs_[1] = right; |
| 658 } | 598 } |
| 659 | 599 |
| 660 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEq, "cmp-jsobject-eq") | 600 DECLARE_CONCRETE_INSTRUCTION(CmpObjectEqAndBranch, |
| 601 "cmp-object-eq-and-branch") |
| 661 }; | 602 }; |
| 662 | 603 |
| 663 | 604 |
| 664 class LCmpJSObjectEqAndBranch: public LControlInstruction<2, 0> { | 605 class LCmpConstantEqAndBranch: public LControlInstruction<1, 0> { |
| 665 public: | 606 public: |
| 666 LCmpJSObjectEqAndBranch(LOperand* left, LOperand* right) { | 607 explicit LCmpConstantEqAndBranch(LOperand* left) { |
| 667 inputs_[0] = left; | 608 inputs_[0] = left; |
| 668 inputs_[1] = right; | |
| 669 } | 609 } |
| 670 | 610 |
| 671 DECLARE_CONCRETE_INSTRUCTION(CmpJSObjectEqAndBranch, | 611 DECLARE_CONCRETE_INSTRUCTION(CmpConstantEqAndBranch, |
| 672 "cmp-jsobject-eq-and-branch") | 612 "cmp-constant-eq-and-branch") |
| 673 }; | 613 DECLARE_HYDROGEN_ACCESSOR(CompareConstantEqAndBranch) |
| 674 | |
| 675 | |
| 676 class LCmpSymbolEq: public LTemplateInstruction<1, 2, 0> { | |
| 677 public: | |
| 678 LCmpSymbolEq(LOperand* left, LOperand* right) { | |
| 679 inputs_[0] = left; | |
| 680 inputs_[1] = right; | |
| 681 } | |
| 682 | |
| 683 DECLARE_CONCRETE_INSTRUCTION(CmpSymbolEq, "cmp-symbol-eq") | |
| 684 }; | |
| 685 | |
| 686 | |
| 687 class LCmpSymbolEqAndBranch: public LControlInstruction<2, 0> { | |
| 688 public: | |
| 689 LCmpSymbolEqAndBranch(LOperand* left, LOperand* right) { | |
| 690 inputs_[0] = left; | |
| 691 inputs_[1] = right; | |
| 692 } | |
| 693 | |
| 694 DECLARE_CONCRETE_INSTRUCTION(CmpSymbolEqAndBranch, "cmp-symbol-eq-and-branch") | |
| 695 }; | |
| 696 | |
| 697 | |
| 698 class LIsNull: public LTemplateInstruction<1, 1, 0> { | |
| 699 public: | |
| 700 explicit LIsNull(LOperand* value) { | |
| 701 inputs_[0] = value; | |
| 702 } | |
| 703 | |
| 704 DECLARE_CONCRETE_INSTRUCTION(IsNull, "is-null") | |
| 705 DECLARE_HYDROGEN_ACCESSOR(IsNull) | |
| 706 | |
| 707 bool is_strict() const { return hydrogen()->is_strict(); } | |
| 708 }; | 614 }; |
| 709 | 615 |
| 710 | 616 |
| 711 class LIsNullAndBranch: public LControlInstruction<1, 1> { | 617 class LIsNullAndBranch: public LControlInstruction<1, 1> { |
| 712 public: | 618 public: |
| 713 LIsNullAndBranch(LOperand* value, LOperand* temp) { | 619 LIsNullAndBranch(LOperand* value, LOperand* temp) { |
| 714 inputs_[0] = value; | 620 inputs_[0] = value; |
| 715 temps_[0] = temp; | 621 temps_[0] = temp; |
| 716 } | 622 } |
| 717 | 623 |
| 718 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch") | 624 DECLARE_CONCRETE_INSTRUCTION(IsNullAndBranch, "is-null-and-branch") |
| 719 DECLARE_HYDROGEN_ACCESSOR(IsNull) | 625 DECLARE_HYDROGEN_ACCESSOR(IsNullAndBranch) |
| 720 | 626 |
| 721 bool is_strict() const { return hydrogen()->is_strict(); } | 627 bool is_strict() const { return hydrogen()->is_strict(); } |
| 722 | 628 |
| 723 virtual void PrintDataTo(StringStream* stream); | 629 virtual void PrintDataTo(StringStream* stream); |
| 724 }; | 630 }; |
| 725 | 631 |
| 726 | 632 |
| 727 class LIsObject: public LTemplateInstruction<1, 1, 1> { | 633 class LIsObjectAndBranch: public LControlInstruction<1, 1> { |
| 728 public: | 634 public: |
| 729 LIsObject(LOperand* value, LOperand* temp) { | 635 LIsObjectAndBranch(LOperand* value, LOperand* temp) { |
| 730 inputs_[0] = value; | 636 inputs_[0] = value; |
| 731 temps_[0] = temp; | 637 temps_[0] = temp; |
| 732 } | 638 } |
| 733 | 639 |
| 734 DECLARE_CONCRETE_INSTRUCTION(IsObject, "is-object") | |
| 735 }; | |
| 736 | |
| 737 | |
| 738 class LIsObjectAndBranch: public LControlInstruction<1, 2> { | |
| 739 public: | |
| 740 LIsObjectAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | |
| 741 inputs_[0] = value; | |
| 742 temps_[0] = temp; | |
| 743 temps_[1] = temp2; | |
| 744 } | |
| 745 | |
| 746 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") | 640 DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch") |
| 747 | 641 |
| 748 virtual void PrintDataTo(StringStream* stream); | 642 virtual void PrintDataTo(StringStream* stream); |
| 749 }; | 643 }; |
| 750 | 644 |
| 751 | 645 |
| 752 class LIsSmi: public LTemplateInstruction<1, 1, 0> { | |
| 753 public: | |
| 754 explicit LIsSmi(LOperand* value) { | |
| 755 inputs_[0] = value; | |
| 756 } | |
| 757 | |
| 758 DECLARE_CONCRETE_INSTRUCTION(IsSmi, "is-smi") | |
| 759 DECLARE_HYDROGEN_ACCESSOR(IsSmi) | |
| 760 }; | |
| 761 | |
| 762 | |
| 763 class LIsSmiAndBranch: public LControlInstruction<1, 0> { | 646 class LIsSmiAndBranch: public LControlInstruction<1, 0> { |
| 764 public: | 647 public: |
| 765 explicit LIsSmiAndBranch(LOperand* value) { | 648 explicit LIsSmiAndBranch(LOperand* value) { |
| 766 inputs_[0] = value; | 649 inputs_[0] = value; |
| 767 } | 650 } |
| 768 | 651 |
| 769 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") | 652 DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch") |
| 653 DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch) |
| 770 | 654 |
| 771 virtual void PrintDataTo(StringStream* stream); | 655 virtual void PrintDataTo(StringStream* stream); |
| 772 }; | 656 }; |
| 773 | 657 |
| 774 | 658 |
| 775 class LIsUndetectable: public LTemplateInstruction<1, 1, 0> { | |
| 776 public: | |
| 777 explicit LIsUndetectable(LOperand* value) { | |
| 778 inputs_[0] = value; | |
| 779 } | |
| 780 | |
| 781 DECLARE_CONCRETE_INSTRUCTION(IsUndetectable, "is-undetectable") | |
| 782 DECLARE_HYDROGEN_ACCESSOR(IsUndetectable) | |
| 783 }; | |
| 784 | |
| 785 | |
| 786 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> { | 659 class LIsUndetectableAndBranch: public LControlInstruction<1, 1> { |
| 787 public: | 660 public: |
| 788 explicit LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { | 661 LIsUndetectableAndBranch(LOperand* value, LOperand* temp) { |
| 789 inputs_[0] = value; | 662 inputs_[0] = value; |
| 790 temps_[0] = temp; | 663 temps_[0] = temp; |
| 791 } | 664 } |
| 792 | 665 |
| 793 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, | 666 DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch, |
| 794 "is-undetectable-and-branch") | 667 "is-undetectable-and-branch") |
| 795 | 668 |
| 796 virtual void PrintDataTo(StringStream* stream); | 669 virtual void PrintDataTo(StringStream* stream); |
| 797 }; | 670 }; |
| 798 | 671 |
| 799 | 672 |
| 800 class LHasInstanceType: public LTemplateInstruction<1, 1, 0> { | |
| 801 public: | |
| 802 explicit LHasInstanceType(LOperand* value) { | |
| 803 inputs_[0] = value; | |
| 804 } | |
| 805 | |
| 806 DECLARE_CONCRETE_INSTRUCTION(HasInstanceType, "has-instance-type") | |
| 807 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | |
| 808 }; | |
| 809 | |
| 810 | |
| 811 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> { | 673 class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> { |
| 812 public: | 674 public: |
| 813 LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { | 675 LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) { |
| 814 inputs_[0] = value; | 676 inputs_[0] = value; |
| 815 temps_[0] = temp; | 677 temps_[0] = temp; |
| 816 } | 678 } |
| 817 | 679 |
| 818 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, | 680 DECLARE_CONCRETE_INSTRUCTION(HasInstanceTypeAndBranch, |
| 819 "has-instance-type-and-branch") | 681 "has-instance-type-and-branch") |
| 820 DECLARE_HYDROGEN_ACCESSOR(HasInstanceType) | 682 DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch) |
| 821 | 683 |
| 822 virtual void PrintDataTo(StringStream* stream); | 684 virtual void PrintDataTo(StringStream* stream); |
| 823 }; | 685 }; |
| 824 | 686 |
| 825 | 687 |
| 826 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { | 688 class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { |
| 827 public: | 689 public: |
| 828 explicit LGetCachedArrayIndex(LOperand* value) { | 690 explicit LGetCachedArrayIndex(LOperand* value) { |
| 829 inputs_[0] = value; | 691 inputs_[0] = value; |
| 830 } | 692 } |
| 831 | 693 |
| 832 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") | 694 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex, "get-cached-array-index") |
| 833 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) | 695 DECLARE_HYDROGEN_ACCESSOR(GetCachedArrayIndex) |
| 834 }; | 696 }; |
| 835 | 697 |
| 836 | 698 |
| 837 class LHasCachedArrayIndex: public LTemplateInstruction<1, 1, 0> { | |
| 838 public: | |
| 839 explicit LHasCachedArrayIndex(LOperand* value) { | |
| 840 inputs_[0] = value; | |
| 841 } | |
| 842 | |
| 843 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndex, "has-cached-array-index") | |
| 844 DECLARE_HYDROGEN_ACCESSOR(HasCachedArrayIndex) | |
| 845 }; | |
| 846 | |
| 847 | |
| 848 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { | 699 class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> { |
| 849 public: | 700 public: |
| 850 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { | 701 explicit LHasCachedArrayIndexAndBranch(LOperand* value) { |
| 851 inputs_[0] = value; | 702 inputs_[0] = value; |
| 852 } | 703 } |
| 853 | 704 |
| 854 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, | 705 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch, |
| 855 "has-cached-array-index-and-branch") | 706 "has-cached-array-index-and-branch") |
| 856 virtual void PrintDataTo(StringStream* stream); | 707 virtual void PrintDataTo(StringStream* stream); |
| 857 }; | 708 }; |
| 858 | 709 |
| 859 | 710 |
| 860 class LIsConstructCall: public LTemplateInstruction<1, 0, 0> { | |
| 861 public: | |
| 862 DECLARE_CONCRETE_INSTRUCTION(IsConstructCall, "is-construct-call") | |
| 863 DECLARE_HYDROGEN_ACCESSOR(IsConstructCall) | |
| 864 }; | |
| 865 | |
| 866 | |
| 867 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> { | 711 class LIsConstructCallAndBranch: public LControlInstruction<0, 1> { |
| 868 public: | 712 public: |
| 869 explicit LIsConstructCallAndBranch(LOperand* temp) { | 713 explicit LIsConstructCallAndBranch(LOperand* temp) { |
| 870 temps_[0] = temp; | 714 temps_[0] = temp; |
| 871 } | 715 } |
| 872 | 716 |
| 873 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, | 717 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch, |
| 874 "is-construct-call-and-branch") | 718 "is-construct-call-and-branch") |
| 875 }; | 719 }; |
| 876 | 720 |
| 877 | 721 |
| 878 class LClassOfTest: public LTemplateInstruction<1, 1, 1> { | |
| 879 public: | |
| 880 LClassOfTest(LOperand* value, LOperand* temp) { | |
| 881 inputs_[0] = value; | |
| 882 temps_[0] = temp; | |
| 883 } | |
| 884 | |
| 885 DECLARE_CONCRETE_INSTRUCTION(ClassOfTest, "class-of-test") | |
| 886 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | |
| 887 | |
| 888 virtual void PrintDataTo(StringStream* stream); | |
| 889 }; | |
| 890 | |
| 891 | |
| 892 class LClassOfTestAndBranch: public LControlInstruction<1, 2> { | 722 class LClassOfTestAndBranch: public LControlInstruction<1, 2> { |
| 893 public: | 723 public: |
| 894 LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { | 724 LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) { |
| 895 inputs_[0] = value; | 725 inputs_[0] = value; |
| 896 temps_[0] = temp; | 726 temps_[0] = temp; |
| 897 temps_[1] = temp2; | 727 temps_[1] = temp2; |
| 898 } | 728 } |
| 899 | 729 |
| 900 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, | 730 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch, |
| 901 "class-of-test-and-branch") | 731 "class-of-test-and-branch") |
| 902 DECLARE_HYDROGEN_ACCESSOR(ClassOfTest) | 732 DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch) |
| 903 | 733 |
| 904 virtual void PrintDataTo(StringStream* stream); | 734 virtual void PrintDataTo(StringStream* stream); |
| 905 }; | 735 }; |
| 906 | 736 |
| 907 | 737 |
| 908 class LCmpT: public LTemplateInstruction<1, 2, 0> { | 738 class LCmpT: public LTemplateInstruction<1, 3, 0> { |
| 909 public: | 739 public: |
| 910 LCmpT(LOperand* left, LOperand* right) { | 740 LCmpT(LOperand* context, LOperand* left, LOperand* right) { |
| 911 inputs_[0] = left; | 741 inputs_[0] = context; |
| 912 inputs_[1] = right; | 742 inputs_[1] = left; |
| 743 inputs_[2] = right; |
| 913 } | 744 } |
| 914 | 745 |
| 915 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") | 746 DECLARE_CONCRETE_INSTRUCTION(CmpT, "cmp-t") |
| 916 DECLARE_HYDROGEN_ACCESSOR(Compare) | 747 DECLARE_HYDROGEN_ACCESSOR(CompareGeneric) |
| 917 | |
| 918 Token::Value op() const { return hydrogen()->token(); } | |
| 919 }; | |
| 920 | |
| 921 | |
| 922 class LCmpTAndBranch: public LControlInstruction<2, 0> { | |
| 923 public: | |
| 924 LCmpTAndBranch(LOperand* left, LOperand* right) { | |
| 925 inputs_[0] = left; | |
| 926 inputs_[1] = right; | |
| 927 } | |
| 928 | |
| 929 DECLARE_CONCRETE_INSTRUCTION(CmpTAndBranch, "cmp-t-and-branch") | |
| 930 DECLARE_HYDROGEN_ACCESSOR(Compare) | |
| 931 | 748 |
| 932 Token::Value op() const { return hydrogen()->token(); } | 749 Token::Value op() const { return hydrogen()->token(); } |
| 933 }; | 750 }; |
| 934 | 751 |
| 935 | 752 |
| 936 class LInstanceOf: public LTemplateInstruction<1, 3, 0> { | 753 class LInstanceOf: public LTemplateInstruction<1, 3, 0> { |
| 937 public: | 754 public: |
| 938 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { | 755 LInstanceOf(LOperand* context, LOperand* left, LOperand* right) { |
| 939 inputs_[0] = context; | 756 inputs_[0] = context; |
| 940 inputs_[1] = left; | 757 inputs_[1] = left; |
| 941 inputs_[2] = right; | 758 inputs_[2] = right; |
| 942 } | 759 } |
| 943 | 760 |
| 944 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") | 761 DECLARE_CONCRETE_INSTRUCTION(InstanceOf, "instance-of") |
| 945 | 762 |
| 946 LOperand* context() { return inputs_[0]; } | 763 LOperand* context() { return inputs_[0]; } |
| 947 }; | 764 }; |
| 948 | 765 |
| 949 | 766 |
| 950 class LInstanceOfAndBranch: public LControlInstruction<3, 0> { | 767 class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> { |
| 951 public: | 768 public: |
| 952 LInstanceOfAndBranch(LOperand* context, LOperand* left, LOperand* right) { | 769 LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) { |
| 953 inputs_[0] = context; | 770 inputs_[0] = context; |
| 954 inputs_[1] = left; | 771 inputs_[1] = value; |
| 955 inputs_[2] = right; | |
| 956 } | |
| 957 | |
| 958 DECLARE_CONCRETE_INSTRUCTION(InstanceOfAndBranch, "instance-of-and-branch") | |
| 959 | |
| 960 LOperand* context() { return inputs_[0]; } | |
| 961 }; | |
| 962 | |
| 963 | |
| 964 class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 1, 1> { | |
| 965 public: | |
| 966 LInstanceOfKnownGlobal(LOperand* value, LOperand* temp) { | |
| 967 inputs_[0] = value; | |
| 968 temps_[0] = temp; | 772 temps_[0] = temp; |
| 969 } | 773 } |
| 970 | 774 |
| 971 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, | 775 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal, |
| 972 "instance-of-known-global") | 776 "instance-of-known-global") |
| 973 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) | 777 DECLARE_HYDROGEN_ACCESSOR(InstanceOfKnownGlobal) |
| 974 | 778 |
| 975 Handle<JSFunction> function() const { return hydrogen()->function(); } | 779 Handle<JSFunction> function() const { return hydrogen()->function(); } |
| 976 }; | 780 }; |
| 977 | 781 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 }; | 874 }; |
| 1071 | 875 |
| 1072 | 876 |
| 1073 class LBranch: public LControlInstruction<1, 0> { | 877 class LBranch: public LControlInstruction<1, 0> { |
| 1074 public: | 878 public: |
| 1075 explicit LBranch(LOperand* value) { | 879 explicit LBranch(LOperand* value) { |
| 1076 inputs_[0] = value; | 880 inputs_[0] = value; |
| 1077 } | 881 } |
| 1078 | 882 |
| 1079 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | 883 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") |
| 1080 DECLARE_HYDROGEN_ACCESSOR(Value) | 884 DECLARE_HYDROGEN_ACCESSOR(Branch) |
| 1081 | 885 |
| 1082 virtual void PrintDataTo(StringStream* stream); | 886 virtual void PrintDataTo(StringStream* stream); |
| 1083 }; | 887 }; |
| 1084 | 888 |
| 1085 | 889 |
| 1086 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { | 890 class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> { |
| 1087 public: | 891 public: |
| 1088 explicit LCmpMapAndBranch(LOperand* value) { | 892 explicit LCmpMapAndBranch(LOperand* value) { |
| 1089 inputs_[0] = value; | 893 inputs_[0] = value; |
| 1090 } | 894 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 public: | 934 public: |
| 1131 explicit LFixedArrayLength(LOperand* value) { | 935 explicit LFixedArrayLength(LOperand* value) { |
| 1132 inputs_[0] = value; | 936 inputs_[0] = value; |
| 1133 } | 937 } |
| 1134 | 938 |
| 1135 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length") | 939 DECLARE_CONCRETE_INSTRUCTION(FixedArrayLength, "fixed-array-length") |
| 1136 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength) | 940 DECLARE_HYDROGEN_ACCESSOR(FixedArrayLength) |
| 1137 }; | 941 }; |
| 1138 | 942 |
| 1139 | 943 |
| 944 class LElementsKind: public LTemplateInstruction<1, 1, 0> { |
| 945 public: |
| 946 explicit LElementsKind(LOperand* value) { |
| 947 inputs_[0] = value; |
| 948 } |
| 949 |
| 950 DECLARE_CONCRETE_INSTRUCTION(ElementsKind, "elements-kind") |
| 951 DECLARE_HYDROGEN_ACCESSOR(ElementsKind) |
| 952 }; |
| 953 |
| 954 |
| 1140 class LValueOf: public LTemplateInstruction<1, 1, 1> { | 955 class LValueOf: public LTemplateInstruction<1, 1, 1> { |
| 1141 public: | 956 public: |
| 1142 LValueOf(LOperand* value, LOperand* temp) { | 957 LValueOf(LOperand* value, LOperand* temp) { |
| 1143 inputs_[0] = value; | 958 inputs_[0] = value; |
| 1144 temps_[0] = temp; | 959 temps_[0] = temp; |
| 1145 } | 960 } |
| 1146 | 961 |
| 1147 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") | 962 DECLARE_CONCRETE_INSTRUCTION(ValueOf, "value-of") |
| 1148 DECLARE_HYDROGEN_ACCESSOR(ValueOf) | 963 DECLARE_HYDROGEN_ACCESSOR(ValueOf) |
| 1149 }; | 964 }; |
| 1150 | 965 |
| 1151 | 966 |
| 1152 class LThrow: public LTemplateInstruction<0, 1, 0> { | 967 class LThrow: public LTemplateInstruction<0, 2, 0> { |
| 1153 public: | 968 public: |
| 1154 explicit LThrow(LOperand* value) { | 969 LThrow(LOperand* context, LOperand* value) { |
| 1155 inputs_[0] = value; | 970 inputs_[0] = context; |
| 971 inputs_[1] = value; |
| 1156 } | 972 } |
| 1157 | 973 |
| 974 LOperand* context() { return inputs_[0]; } |
| 975 LOperand* value() { return inputs_[1]; } |
| 976 |
| 1158 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") | 977 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") |
| 1159 }; | 978 }; |
| 1160 | 979 |
| 1161 | 980 |
| 1162 class LBitNotI: public LTemplateInstruction<1, 1, 0> { | 981 class LBitNotI: public LTemplateInstruction<1, 1, 0> { |
| 1163 public: | 982 public: |
| 1164 explicit LBitNotI(LOperand* value) { | 983 explicit LBitNotI(LOperand* value) { |
| 1165 inputs_[0] = value; | 984 inputs_[0] = value; |
| 1166 } | 985 } |
| 1167 | 986 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 | 1024 |
| 1206 virtual Opcode opcode() const { return LInstruction::kArithmeticD; } | 1025 virtual Opcode opcode() const { return LInstruction::kArithmeticD; } |
| 1207 virtual void CompileToNative(LCodeGen* generator); | 1026 virtual void CompileToNative(LCodeGen* generator); |
| 1208 virtual const char* Mnemonic() const; | 1027 virtual const char* Mnemonic() const; |
| 1209 | 1028 |
| 1210 private: | 1029 private: |
| 1211 Token::Value op_; | 1030 Token::Value op_; |
| 1212 }; | 1031 }; |
| 1213 | 1032 |
| 1214 | 1033 |
| 1215 class LArithmeticT: public LTemplateInstruction<1, 2, 0> { | 1034 class LArithmeticT: public LTemplateInstruction<1, 3, 0> { |
| 1216 public: | 1035 public: |
| 1217 LArithmeticT(Token::Value op, LOperand* left, LOperand* right) | 1036 LArithmeticT(Token::Value op, |
| 1037 LOperand* context, |
| 1038 LOperand* left, |
| 1039 LOperand* right) |
| 1218 : op_(op) { | 1040 : op_(op) { |
| 1219 inputs_[0] = left; | 1041 inputs_[0] = context; |
| 1220 inputs_[1] = right; | 1042 inputs_[1] = left; |
| 1043 inputs_[2] = right; |
| 1221 } | 1044 } |
| 1222 | 1045 |
| 1223 virtual Opcode opcode() const { return LInstruction::kArithmeticT; } | 1046 virtual Opcode opcode() const { return LInstruction::kArithmeticT; } |
| 1224 virtual void CompileToNative(LCodeGen* generator); | 1047 virtual void CompileToNative(LCodeGen* generator); |
| 1225 virtual const char* Mnemonic() const; | 1048 virtual const char* Mnemonic() const; |
| 1226 | 1049 |
| 1227 Token::Value op() const { return op_; } | 1050 Token::Value op() const { return op_; } |
| 1051 LOperand* context() { return inputs_[0]; } |
| 1052 LOperand* left() { return inputs_[1]; } |
| 1053 LOperand* right() { return inputs_[2]; } |
| 1228 | 1054 |
| 1229 private: | 1055 private: |
| 1230 Token::Value op_; | 1056 Token::Value op_; |
| 1231 }; | 1057 }; |
| 1232 | 1058 |
| 1233 | 1059 |
| 1234 class LReturn: public LTemplateInstruction<0, 1, 0> { | 1060 class LReturn: public LTemplateInstruction<0, 1, 0> { |
| 1235 public: | 1061 public: |
| 1236 explicit LReturn(LOperand* value) { | 1062 explicit LReturn(LOperand* value) { |
| 1237 inputs_[0] = value; | 1063 inputs_[0] = value; |
| 1238 } | 1064 } |
| 1239 | 1065 |
| 1240 DECLARE_CONCRETE_INSTRUCTION(Return, "return") | 1066 DECLARE_CONCRETE_INSTRUCTION(Return, "return") |
| 1241 }; | 1067 }; |
| 1242 | 1068 |
| 1243 | 1069 |
| 1244 class LLoadNamedField: public LTemplateInstruction<1, 1, 0> { | 1070 class LLoadNamedField: public LTemplateInstruction<1, 1, 0> { |
| 1245 public: | 1071 public: |
| 1246 explicit LLoadNamedField(LOperand* object) { | 1072 explicit LLoadNamedField(LOperand* object) { |
| 1247 inputs_[0] = object; | 1073 inputs_[0] = object; |
| 1248 } | 1074 } |
| 1249 | 1075 |
| 1250 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") | 1076 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field") |
| 1251 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) | 1077 DECLARE_HYDROGEN_ACCESSOR(LoadNamedField) |
| 1252 | 1078 |
| 1253 LOperand* object() { return inputs_[0]; } | 1079 LOperand* object() { return inputs_[0]; } |
| 1254 }; | 1080 }; |
| 1255 | 1081 |
| 1256 | 1082 |
| 1257 class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 1, 0> { | 1083 class LLoadNamedFieldPolymorphic: public LTemplateInstruction<1, 2, 0> { |
| 1258 public: | 1084 public: |
| 1259 explicit LLoadNamedFieldPolymorphic(LOperand* object) { | 1085 LLoadNamedFieldPolymorphic(LOperand* context, LOperand* object) { |
| 1260 inputs_[0] = object; | 1086 inputs_[0] = context; |
| 1087 inputs_[1] = object; |
| 1261 } | 1088 } |
| 1262 | 1089 |
| 1263 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic") | 1090 DECLARE_CONCRETE_INSTRUCTION(LoadNamedField, "load-named-field-polymorphic") |
| 1264 DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic) | 1091 DECLARE_HYDROGEN_ACCESSOR(LoadNamedFieldPolymorphic) |
| 1265 | 1092 |
| 1266 LOperand* object() { return inputs_[0]; } | 1093 LOperand* context() { return inputs_[0]; } |
| 1094 LOperand* object() { return inputs_[1]; } |
| 1267 }; | 1095 }; |
| 1268 | 1096 |
| 1269 | 1097 |
| 1270 class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> { | 1098 class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> { |
| 1271 public: | 1099 public: |
| 1272 LLoadNamedGeneric(LOperand* context, LOperand* object) { | 1100 LLoadNamedGeneric(LOperand* context, LOperand* object) { |
| 1273 inputs_[0] = context; | 1101 inputs_[0] = context; |
| 1274 inputs_[1] = object; | 1102 inputs_[1] = object; |
| 1275 } | 1103 } |
| 1276 | 1104 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 inputs_[0] = external_pointer; | 1168 inputs_[0] = external_pointer; |
| 1341 inputs_[1] = key; | 1169 inputs_[1] = key; |
| 1342 } | 1170 } |
| 1343 | 1171 |
| 1344 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement, | 1172 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedSpecializedArrayElement, |
| 1345 "load-keyed-specialized-array-element") | 1173 "load-keyed-specialized-array-element") |
| 1346 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedSpecializedArrayElement) | 1174 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedSpecializedArrayElement) |
| 1347 | 1175 |
| 1348 LOperand* external_pointer() { return inputs_[0]; } | 1176 LOperand* external_pointer() { return inputs_[0]; } |
| 1349 LOperand* key() { return inputs_[1]; } | 1177 LOperand* key() { return inputs_[1]; } |
| 1350 ExternalArrayType array_type() const { | 1178 JSObject::ElementsKind elements_kind() const { |
| 1351 return hydrogen()->array_type(); | 1179 return hydrogen()->elements_kind(); |
| 1352 } | 1180 } |
| 1353 }; | 1181 }; |
| 1354 | 1182 |
| 1355 | 1183 |
| 1356 class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> { | 1184 class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> { |
| 1357 public: | 1185 public: |
| 1358 LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) { | 1186 LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) { |
| 1359 inputs_[0] = context; | 1187 inputs_[0] = context; |
| 1360 inputs_[1] = obj; | 1188 inputs_[1] = obj; |
| 1361 inputs_[2] = key; | 1189 inputs_[2] = key; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1401 temps_[1] = temp2; | 1229 temps_[1] = temp2; |
| 1402 } | 1230 } |
| 1403 | 1231 |
| 1404 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") | 1232 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell, "store-global-cell") |
| 1405 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) | 1233 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalCell) |
| 1406 }; | 1234 }; |
| 1407 | 1235 |
| 1408 | 1236 |
| 1409 class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> { | 1237 class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> { |
| 1410 public: | 1238 public: |
| 1411 explicit LStoreGlobalGeneric(LOperand* context, | 1239 LStoreGlobalGeneric(LOperand* context, |
| 1412 LOperand* global_object, | 1240 LOperand* global_object, |
| 1413 LOperand* value) { | 1241 LOperand* value) { |
| 1414 inputs_[0] = context; | 1242 inputs_[0] = context; |
| 1415 inputs_[1] = global_object; | 1243 inputs_[1] = global_object; |
| 1416 inputs_[2] = value; | 1244 inputs_[2] = value; |
| 1417 } | 1245 } |
| 1418 | 1246 |
| 1419 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") | 1247 DECLARE_CONCRETE_INSTRUCTION(StoreGlobalGeneric, "store-global-generic") |
| 1420 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) | 1248 DECLARE_HYDROGEN_ACCESSOR(StoreGlobalGeneric) |
| 1421 | 1249 |
| 1422 LOperand* context() { return InputAt(0); } | 1250 LOperand* context() { return InputAt(0); } |
| 1423 LOperand* global_object() { return InputAt(1); } | 1251 LOperand* global_object() { return InputAt(1); } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1466 class LPushArgument: public LTemplateInstruction<0, 1, 0> { | 1294 class LPushArgument: public LTemplateInstruction<0, 1, 0> { |
| 1467 public: | 1295 public: |
| 1468 explicit LPushArgument(LOperand* value) { | 1296 explicit LPushArgument(LOperand* value) { |
| 1469 inputs_[0] = value; | 1297 inputs_[0] = value; |
| 1470 } | 1298 } |
| 1471 | 1299 |
| 1472 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") | 1300 DECLARE_CONCRETE_INSTRUCTION(PushArgument, "push-argument") |
| 1473 }; | 1301 }; |
| 1474 | 1302 |
| 1475 | 1303 |
| 1304 class LThisFunction: public LTemplateInstruction<1, 0, 0> { |
| 1305 DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function") |
| 1306 }; |
| 1307 |
| 1308 |
| 1476 class LContext: public LTemplateInstruction<1, 0, 0> { | 1309 class LContext: public LTemplateInstruction<1, 0, 0> { |
| 1477 public: | 1310 public: |
| 1478 DECLARE_CONCRETE_INSTRUCTION(Context, "context") | 1311 DECLARE_CONCRETE_INSTRUCTION(Context, "context") |
| 1479 }; | 1312 }; |
| 1480 | 1313 |
| 1481 | 1314 |
| 1482 class LOuterContext: public LTemplateInstruction<1, 1, 0> { | 1315 class LOuterContext: public LTemplateInstruction<1, 1, 0> { |
| 1483 public: | 1316 public: |
| 1484 explicit LOuterContext(LOperand* context) { | 1317 explicit LOuterContext(LOperand* context) { |
| 1485 inputs_[0] = context; | 1318 inputs_[0] = context; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1636 DECLARE_HYDROGEN_ACCESSOR(CallNew) | 1469 DECLARE_HYDROGEN_ACCESSOR(CallNew) |
| 1637 | 1470 |
| 1638 virtual void PrintDataTo(StringStream* stream); | 1471 virtual void PrintDataTo(StringStream* stream); |
| 1639 | 1472 |
| 1640 LOperand* context() { return inputs_[0]; } | 1473 LOperand* context() { return inputs_[0]; } |
| 1641 LOperand* constructor() { return inputs_[1]; } | 1474 LOperand* constructor() { return inputs_[1]; } |
| 1642 int arity() const { return hydrogen()->argument_count() - 1; } | 1475 int arity() const { return hydrogen()->argument_count() - 1; } |
| 1643 }; | 1476 }; |
| 1644 | 1477 |
| 1645 | 1478 |
| 1646 class LCallRuntime: public LTemplateInstruction<1, 0, 0> { | 1479 class LCallRuntime: public LTemplateInstruction<1, 1, 0> { |
| 1647 public: | 1480 public: |
| 1481 explicit LCallRuntime(LOperand* context) { |
| 1482 inputs_[0] = context; |
| 1483 } |
| 1648 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") | 1484 DECLARE_CONCRETE_INSTRUCTION(CallRuntime, "call-runtime") |
| 1649 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) | 1485 DECLARE_HYDROGEN_ACCESSOR(CallRuntime) |
| 1650 | 1486 |
| 1487 LOperand* context() { return inputs_[0]; } |
| 1651 const Runtime::Function* function() const { return hydrogen()->function(); } | 1488 const Runtime::Function* function() const { return hydrogen()->function(); } |
| 1652 int arity() const { return hydrogen()->argument_count(); } | 1489 int arity() const { return hydrogen()->argument_count(); } |
| 1653 }; | 1490 }; |
| 1654 | 1491 |
| 1655 | 1492 |
| 1656 class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> { | 1493 class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> { |
| 1657 public: | 1494 public: |
| 1658 explicit LInteger32ToDouble(LOperand* value) { | 1495 explicit LInteger32ToDouble(LOperand* value) { |
| 1659 inputs_[0] = value; | 1496 inputs_[0] = value; |
| 1660 } | 1497 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1686 | 1523 |
| 1687 // Sometimes truncating conversion from a tagged value to an int32. | 1524 // Sometimes truncating conversion from a tagged value to an int32. |
| 1688 class LDoubleToI: public LTemplateInstruction<1, 1, 1> { | 1525 class LDoubleToI: public LTemplateInstruction<1, 1, 1> { |
| 1689 public: | 1526 public: |
| 1690 LDoubleToI(LOperand* value, LOperand* temp) { | 1527 LDoubleToI(LOperand* value, LOperand* temp) { |
| 1691 inputs_[0] = value; | 1528 inputs_[0] = value; |
| 1692 temps_[0] = temp; | 1529 temps_[0] = temp; |
| 1693 } | 1530 } |
| 1694 | 1531 |
| 1695 DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") | 1532 DECLARE_CONCRETE_INSTRUCTION(DoubleToI, "double-to-i") |
| 1696 DECLARE_HYDROGEN_ACCESSOR(Change) | 1533 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) |
| 1697 | 1534 |
| 1698 bool truncating() { return hydrogen()->CanTruncateToInt32(); } | 1535 bool truncating() { return hydrogen()->CanTruncateToInt32(); } |
| 1699 }; | 1536 }; |
| 1700 | 1537 |
| 1701 | 1538 |
| 1702 // Truncating conversion from a tagged value to an int32. | 1539 // Truncating conversion from a tagged value to an int32. |
| 1703 class LTaggedToI: public LTemplateInstruction<1, 1, 1> { | 1540 class LTaggedToI: public LTemplateInstruction<1, 1, 1> { |
| 1704 public: | 1541 public: |
| 1705 LTaggedToI(LOperand* value, LOperand* temp) { | 1542 LTaggedToI(LOperand* value, LOperand* temp) { |
| 1706 inputs_[0] = value; | 1543 inputs_[0] = value; |
| 1707 temps_[0] = temp; | 1544 temps_[0] = temp; |
| 1708 } | 1545 } |
| 1709 | 1546 |
| 1710 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") | 1547 DECLARE_CONCRETE_INSTRUCTION(TaggedToI, "tagged-to-i") |
| 1711 DECLARE_HYDROGEN_ACCESSOR(Change) | 1548 DECLARE_HYDROGEN_ACCESSOR(UnaryOperation) |
| 1712 | 1549 |
| 1713 bool truncating() { return hydrogen()->CanTruncateToInt32(); } | 1550 bool truncating() { return hydrogen()->CanTruncateToInt32(); } |
| 1714 }; | 1551 }; |
| 1715 | 1552 |
| 1716 | 1553 |
| 1717 class LSmiTag: public LTemplateInstruction<1, 1, 0> { | 1554 class LSmiTag: public LTemplateInstruction<1, 1, 0> { |
| 1718 public: | 1555 public: |
| 1719 explicit LSmiTag(LOperand* value) { | 1556 explicit LSmiTag(LOperand* value) { |
| 1720 inputs_[0] = value; | 1557 inputs_[0] = value; |
| 1721 } | 1558 } |
| 1722 | 1559 |
| 1723 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") | 1560 DECLARE_CONCRETE_INSTRUCTION(SmiTag, "smi-tag") |
| 1724 }; | 1561 }; |
| 1725 | 1562 |
| 1726 | 1563 |
| 1727 class LNumberUntagD: public LTemplateInstruction<1, 1, 0> { | 1564 class LNumberUntagD: public LTemplateInstruction<1, 1, 0> { |
| 1728 public: | 1565 public: |
| 1729 explicit LNumberUntagD(LOperand* value) { | 1566 explicit LNumberUntagD(LOperand* value) { |
| 1730 inputs_[0] = value; | 1567 inputs_[0] = value; |
| 1731 } | 1568 } |
| 1732 | 1569 |
| 1733 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") | 1570 DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag") |
| 1571 DECLARE_HYDROGEN_ACCESSOR(Change); |
| 1734 }; | 1572 }; |
| 1735 | 1573 |
| 1736 | 1574 |
| 1737 class LSmiUntag: public LTemplateInstruction<1, 1, 0> { | 1575 class LSmiUntag: public LTemplateInstruction<1, 1, 0> { |
| 1738 public: | 1576 public: |
| 1739 LSmiUntag(LOperand* value, bool needs_check) | 1577 LSmiUntag(LOperand* value, bool needs_check) |
| 1740 : needs_check_(needs_check) { | 1578 : needs_check_(needs_check) { |
| 1741 inputs_[0] = value; | 1579 inputs_[0] = value; |
| 1742 } | 1580 } |
| 1743 | 1581 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1825 inputs_[2] = val; | 1663 inputs_[2] = val; |
| 1826 } | 1664 } |
| 1827 | 1665 |
| 1828 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement, | 1666 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedSpecializedArrayElement, |
| 1829 "store-keyed-specialized-array-element") | 1667 "store-keyed-specialized-array-element") |
| 1830 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedSpecializedArrayElement) | 1668 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedSpecializedArrayElement) |
| 1831 | 1669 |
| 1832 LOperand* external_pointer() { return inputs_[0]; } | 1670 LOperand* external_pointer() { return inputs_[0]; } |
| 1833 LOperand* key() { return inputs_[1]; } | 1671 LOperand* key() { return inputs_[1]; } |
| 1834 LOperand* value() { return inputs_[2]; } | 1672 LOperand* value() { return inputs_[2]; } |
| 1835 ExternalArrayType array_type() const { | 1673 JSObject::ElementsKind elements_kind() const { |
| 1836 return hydrogen()->array_type(); | 1674 return hydrogen()->elements_kind(); |
| 1837 } | 1675 } |
| 1838 }; | 1676 }; |
| 1839 | 1677 |
| 1840 | 1678 |
| 1841 class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> { | 1679 class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> { |
| 1842 public: | 1680 public: |
| 1843 LStoreKeyedGeneric(LOperand* context, | 1681 LStoreKeyedGeneric(LOperand* context, |
| 1844 LOperand* object, | 1682 LOperand* object, |
| 1845 LOperand* key, | 1683 LOperand* key, |
| 1846 LOperand* value) { | 1684 LOperand* value) { |
| 1847 inputs_[0] = context; | 1685 inputs_[0] = context; |
| 1848 inputs_[1] = object; | 1686 inputs_[1] = object; |
| 1849 inputs_[2] = key; | 1687 inputs_[2] = key; |
| 1850 inputs_[3] = value; | 1688 inputs_[3] = value; |
| 1851 } | 1689 } |
| 1852 | 1690 |
| 1853 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") | 1691 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic") |
| 1854 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) | 1692 DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric) |
| 1855 | 1693 |
| 1856 virtual void PrintDataTo(StringStream* stream); | 1694 virtual void PrintDataTo(StringStream* stream); |
| 1857 | 1695 |
| 1858 LOperand* context() { return inputs_[0]; } | 1696 LOperand* context() { return inputs_[0]; } |
| 1859 LOperand* object() { return inputs_[1]; } | 1697 LOperand* object() { return inputs_[1]; } |
| 1860 LOperand* key() { return inputs_[2]; } | 1698 LOperand* key() { return inputs_[2]; } |
| 1861 LOperand* value() { return inputs_[3]; } | 1699 LOperand* value() { return inputs_[3]; } |
| 1862 bool strict_mode() { return hydrogen()->strict_mode(); } | 1700 bool strict_mode() { return hydrogen()->strict_mode(); } |
| 1863 }; | 1701 }; |
| 1864 | 1702 |
| 1865 | 1703 |
| 1866 class LStringAdd: public LTemplateInstruction<1, 2, 0> { | 1704 class LStringAdd: public LTemplateInstruction<1, 3, 0> { |
| 1867 public: | 1705 public: |
| 1868 LStringAdd(LOperand* left, LOperand* right) { | 1706 LStringAdd(LOperand* context, LOperand* left, LOperand* right) { |
| 1869 inputs_[0] = left; | 1707 inputs_[0] = context; |
| 1870 inputs_[1] = right; | 1708 inputs_[1] = left; |
| 1709 inputs_[2] = right; |
| 1871 } | 1710 } |
| 1872 | 1711 |
| 1873 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") | 1712 DECLARE_CONCRETE_INSTRUCTION(StringAdd, "string-add") |
| 1874 DECLARE_HYDROGEN_ACCESSOR(StringAdd) | 1713 DECLARE_HYDROGEN_ACCESSOR(StringAdd) |
| 1875 | 1714 |
| 1876 LOperand* left() { return inputs_[0]; } | 1715 LOperand* context() { return inputs_[0]; } |
| 1877 LOperand* right() { return inputs_[1]; } | 1716 LOperand* left() { return inputs_[1]; } |
| 1717 LOperand* right() { return inputs_[2]; } |
| 1878 }; | 1718 }; |
| 1879 | 1719 |
| 1880 | 1720 |
| 1881 class LStringCharCodeAt: public LTemplateInstruction<1, 2, 0> { | 1721 class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> { |
| 1882 public: | 1722 public: |
| 1883 LStringCharCodeAt(LOperand* string, LOperand* index) { | 1723 LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) { |
| 1884 inputs_[0] = string; | 1724 inputs_[0] = context; |
| 1885 inputs_[1] = index; | 1725 inputs_[1] = string; |
| 1726 inputs_[2] = index; |
| 1886 } | 1727 } |
| 1887 | 1728 |
| 1888 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") | 1729 DECLARE_CONCRETE_INSTRUCTION(StringCharCodeAt, "string-char-code-at") |
| 1889 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) | 1730 DECLARE_HYDROGEN_ACCESSOR(StringCharCodeAt) |
| 1890 | 1731 |
| 1891 LOperand* string() { return inputs_[0]; } | 1732 LOperand* context() { return inputs_[0]; } |
| 1892 LOperand* index() { return inputs_[1]; } | 1733 LOperand* string() { return inputs_[1]; } |
| 1734 LOperand* index() { return inputs_[2]; } |
| 1893 }; | 1735 }; |
| 1894 | 1736 |
| 1895 | 1737 |
| 1896 class LStringCharFromCode: public LTemplateInstruction<1, 1, 0> { | 1738 class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> { |
| 1897 public: | 1739 public: |
| 1898 explicit LStringCharFromCode(LOperand* char_code) { | 1740 LStringCharFromCode(LOperand* context, LOperand* char_code) { |
| 1899 inputs_[0] = char_code; | 1741 inputs_[0] = context; |
| 1742 inputs_[1] = char_code; |
| 1900 } | 1743 } |
| 1901 | 1744 |
| 1902 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") | 1745 DECLARE_CONCRETE_INSTRUCTION(StringCharFromCode, "string-char-from-code") |
| 1903 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) | 1746 DECLARE_HYDROGEN_ACCESSOR(StringCharFromCode) |
| 1904 | 1747 |
| 1905 LOperand* char_code() { return inputs_[0]; } | 1748 LOperand* context() { return inputs_[0]; } |
| 1749 LOperand* char_code() { return inputs_[1]; } |
| 1906 }; | 1750 }; |
| 1907 | 1751 |
| 1908 | 1752 |
| 1909 class LStringLength: public LTemplateInstruction<1, 1, 0> { | 1753 class LStringLength: public LTemplateInstruction<1, 1, 0> { |
| 1910 public: | 1754 public: |
| 1911 explicit LStringLength(LOperand* string) { | 1755 explicit LStringLength(LOperand* string) { |
| 1912 inputs_[0] = string; | 1756 inputs_[0] = string; |
| 1913 } | 1757 } |
| 1914 | 1758 |
| 1915 DECLARE_CONCRETE_INSTRUCTION(StringLength, "string-length") | 1759 DECLARE_CONCRETE_INSTRUCTION(StringLength, "string-length") |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2017 class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> { | 1861 class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> { |
| 2018 public: | 1862 public: |
| 2019 explicit LCheckNonSmi(LOperand* value) { | 1863 explicit LCheckNonSmi(LOperand* value) { |
| 2020 inputs_[0] = value; | 1864 inputs_[0] = value; |
| 2021 } | 1865 } |
| 2022 | 1866 |
| 2023 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") | 1867 DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi") |
| 2024 }; | 1868 }; |
| 2025 | 1869 |
| 2026 | 1870 |
| 2027 class LArrayLiteral: public LTemplateInstruction<1, 0, 0> { | 1871 class LArrayLiteral: public LTemplateInstruction<1, 1, 0> { |
| 2028 public: | 1872 public: |
| 1873 explicit LArrayLiteral(LOperand* context) { |
| 1874 inputs_[0] = context; |
| 1875 } |
| 1876 |
| 1877 LOperand* context() { return inputs_[0]; } |
| 1878 |
| 2029 DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array-literal") | 1879 DECLARE_CONCRETE_INSTRUCTION(ArrayLiteral, "array-literal") |
| 2030 DECLARE_HYDROGEN_ACCESSOR(ArrayLiteral) | 1880 DECLARE_HYDROGEN_ACCESSOR(ArrayLiteral) |
| 2031 }; | 1881 }; |
| 2032 | 1882 |
| 2033 | 1883 |
| 2034 class LObjectLiteral: public LTemplateInstruction<1, 1, 0> { | 1884 class LObjectLiteral: public LTemplateInstruction<1, 1, 0> { |
| 2035 public: | 1885 public: |
| 2036 explicit LObjectLiteral(LOperand* context) { | 1886 explicit LObjectLiteral(LOperand* context) { |
| 2037 inputs_[0] = context; | 1887 inputs_[0] = context; |
| 2038 } | 1888 } |
| 2039 | 1889 |
| 1890 LOperand* context() { return inputs_[0]; } |
| 1891 |
| 2040 DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object-literal") | 1892 DECLARE_CONCRETE_INSTRUCTION(ObjectLiteral, "object-literal") |
| 2041 DECLARE_HYDROGEN_ACCESSOR(ObjectLiteral) | 1893 DECLARE_HYDROGEN_ACCESSOR(ObjectLiteral) |
| 2042 | |
| 2043 LOperand* context() { return inputs_[0]; } | |
| 2044 }; | 1894 }; |
| 2045 | 1895 |
| 2046 | 1896 |
| 2047 class LRegExpLiteral: public LTemplateInstruction<1, 0, 0> { | 1897 class LRegExpLiteral: public LTemplateInstruction<1, 1, 0> { |
| 2048 public: | 1898 public: |
| 1899 explicit LRegExpLiteral(LOperand* context) { |
| 1900 inputs_[0] = context; |
| 1901 } |
| 1902 |
| 1903 LOperand* context() { return inputs_[0]; } |
| 1904 |
| 2049 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") | 1905 DECLARE_CONCRETE_INSTRUCTION(RegExpLiteral, "regexp-literal") |
| 2050 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) | 1906 DECLARE_HYDROGEN_ACCESSOR(RegExpLiteral) |
| 2051 }; | 1907 }; |
| 2052 | 1908 |
| 2053 | 1909 |
| 2054 class LFunctionLiteral: public LTemplateInstruction<1, 0, 0> { | 1910 class LFunctionLiteral: public LTemplateInstruction<1, 1, 0> { |
| 2055 public: | 1911 public: |
| 1912 explicit LFunctionLiteral(LOperand* context) { |
| 1913 inputs_[0] = context; |
| 1914 } |
| 1915 |
| 1916 LOperand* context() { return inputs_[0]; } |
| 1917 |
| 2056 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") | 1918 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral, "function-literal") |
| 2057 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) | 1919 DECLARE_HYDROGEN_ACCESSOR(FunctionLiteral) |
| 2058 | 1920 |
| 2059 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } | 1921 Handle<SharedFunctionInfo> shared_info() { return hydrogen()->shared_info(); } |
| 2060 }; | 1922 }; |
| 2061 | 1923 |
| 2062 | 1924 |
| 2063 class LToFastProperties: public LTemplateInstruction<1, 1, 0> { | 1925 class LToFastProperties: public LTemplateInstruction<1, 1, 0> { |
| 2064 public: | 1926 public: |
| 2065 explicit LToFastProperties(LOperand* value) { | 1927 explicit LToFastProperties(LOperand* value) { |
| 2066 inputs_[0] = value; | 1928 inputs_[0] = value; |
| 2067 } | 1929 } |
| 2068 | 1930 |
| 2069 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") | 1931 DECLARE_CONCRETE_INSTRUCTION(ToFastProperties, "to-fast-properties") |
| 2070 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) | 1932 DECLARE_HYDROGEN_ACCESSOR(ToFastProperties) |
| 2071 }; | 1933 }; |
| 2072 | 1934 |
| 2073 | 1935 |
| 2074 class LTypeof: public LTemplateInstruction<1, 1, 0> { | 1936 class LTypeof: public LTemplateInstruction<1, 2, 0> { |
| 2075 public: | 1937 public: |
| 2076 explicit LTypeof(LOperand* value) { | 1938 LTypeof(LOperand* context, LOperand* value) { |
| 2077 inputs_[0] = value; | 1939 inputs_[0] = context; |
| 1940 inputs_[1] = value; |
| 2078 } | 1941 } |
| 2079 | 1942 |
| 2080 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") | 1943 DECLARE_CONCRETE_INSTRUCTION(Typeof, "typeof") |
| 2081 }; | 1944 }; |
| 2082 | 1945 |
| 2083 | 1946 |
| 2084 class LTypeofIs: public LTemplateInstruction<1, 1, 0> { | |
| 2085 public: | |
| 2086 explicit LTypeofIs(LOperand* value) { | |
| 2087 inputs_[0] = value; | |
| 2088 } | |
| 2089 | |
| 2090 DECLARE_CONCRETE_INSTRUCTION(TypeofIs, "typeof-is") | |
| 2091 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | |
| 2092 | |
| 2093 Handle<String> type_literal() { return hydrogen()->type_literal(); } | |
| 2094 | |
| 2095 virtual void PrintDataTo(StringStream* stream); | |
| 2096 }; | |
| 2097 | |
| 2098 | |
| 2099 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { | 1947 class LTypeofIsAndBranch: public LControlInstruction<1, 0> { |
| 2100 public: | 1948 public: |
| 2101 explicit LTypeofIsAndBranch(LOperand* value) { | 1949 explicit LTypeofIsAndBranch(LOperand* value) { |
| 2102 inputs_[0] = value; | 1950 inputs_[0] = value; |
| 2103 } | 1951 } |
| 2104 | 1952 |
| 2105 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") | 1953 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch, "typeof-is-and-branch") |
| 2106 DECLARE_HYDROGEN_ACCESSOR(TypeofIs) | 1954 DECLARE_HYDROGEN_ACCESSOR(TypeofIsAndBranch) |
| 2107 | 1955 |
| 2108 Handle<String> type_literal() { return hydrogen()->type_literal(); } | 1956 Handle<String> type_literal() { return hydrogen()->type_literal(); } |
| 2109 | 1957 |
| 2110 virtual void PrintDataTo(StringStream* stream); | 1958 virtual void PrintDataTo(StringStream* stream); |
| 2111 }; | 1959 }; |
| 2112 | 1960 |
| 2113 | 1961 |
| 2114 class LDeleteProperty: public LTemplateInstruction<1, 2, 0> { | 1962 class LDeleteProperty: public LTemplateInstruction<1, 3, 0> { |
| 2115 public: | 1963 public: |
| 2116 LDeleteProperty(LOperand* obj, LOperand* key) { | 1964 LDeleteProperty(LOperand* context, LOperand* obj, LOperand* key) { |
| 2117 inputs_[0] = obj; | 1965 inputs_[0] = context; |
| 2118 inputs_[1] = key; | 1966 inputs_[1] = obj; |
| 1967 inputs_[2] = key; |
| 2119 } | 1968 } |
| 2120 | 1969 |
| 2121 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") | 1970 DECLARE_CONCRETE_INSTRUCTION(DeleteProperty, "delete-property") |
| 2122 | 1971 |
| 2123 LOperand* object() { return inputs_[0]; } | 1972 LOperand* context() { return inputs_[0]; } |
| 2124 LOperand* key() { return inputs_[1]; } | 1973 LOperand* object() { return inputs_[1]; } |
| 1974 LOperand* key() { return inputs_[2]; } |
| 2125 }; | 1975 }; |
| 2126 | 1976 |
| 2127 | 1977 |
| 2128 class LOsrEntry: public LTemplateInstruction<0, 0, 0> { | 1978 class LOsrEntry: public LTemplateInstruction<0, 0, 0> { |
| 2129 public: | 1979 public: |
| 2130 LOsrEntry(); | 1980 LOsrEntry(); |
| 2131 | 1981 |
| 2132 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") | 1982 DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry") |
| 2133 | 1983 |
| 2134 LOperand** SpilledRegisterArray() { return register_spills_; } | 1984 LOperand** SpilledRegisterArray() { return register_spills_; } |
| 2135 LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; } | 1985 LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; } |
| 2136 | 1986 |
| 2137 void MarkSpilledRegister(int allocation_index, LOperand* spill_operand); | 1987 void MarkSpilledRegister(int allocation_index, LOperand* spill_operand); |
| 2138 void MarkSpilledDoubleRegister(int allocation_index, | 1988 void MarkSpilledDoubleRegister(int allocation_index, |
| 2139 LOperand* spill_operand); | 1989 LOperand* spill_operand); |
| 2140 | 1990 |
| 2141 private: | 1991 private: |
| 2142 // Arrays of spill slot operands for registers with an assigned spill | 1992 // Arrays of spill slot operands for registers with an assigned spill |
| 2143 // slot, i.e., that must also be restored to the spill slot on OSR entry. | 1993 // slot, i.e., that must also be restored to the spill slot on OSR entry. |
| 2144 // NULL if the register has no assigned spill slot. Indexed by allocation | 1994 // NULL if the register has no assigned spill slot. Indexed by allocation |
| 2145 // index. | 1995 // index. |
| 2146 LOperand* register_spills_[Register::kNumAllocatableRegisters]; | 1996 LOperand* register_spills_[Register::kNumAllocatableRegisters]; |
| 2147 LOperand* double_register_spills_[DoubleRegister::kNumAllocatableRegisters]; | 1997 LOperand* double_register_spills_[DoubleRegister::kNumAllocatableRegisters]; |
| 2148 }; | 1998 }; |
| 2149 | 1999 |
| 2150 | 2000 |
| 2151 class LStackCheck: public LTemplateInstruction<0, 0, 0> { | 2001 class LStackCheck: public LTemplateInstruction<0, 1, 0> { |
| 2152 public: | 2002 public: |
| 2003 explicit LStackCheck(LOperand* context) { |
| 2004 inputs_[0] = context; |
| 2005 } |
| 2006 |
| 2007 LOperand* context() { return inputs_[0]; } |
| 2008 |
| 2153 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") | 2009 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") |
| 2010 DECLARE_HYDROGEN_ACCESSOR(StackCheck) |
| 2011 |
| 2012 Label* done_label() { return &done_label_; } |
| 2013 |
| 2014 private: |
| 2015 Label done_label_; |
| 2154 }; | 2016 }; |
| 2155 | 2017 |
| 2156 | 2018 |
| 2157 class LIn: public LTemplateInstruction<1, 2, 0> { | 2019 class LIn: public LTemplateInstruction<1, 3, 0> { |
| 2158 public: | 2020 public: |
| 2159 LIn(LOperand* key, LOperand* object) { | 2021 LIn(LOperand* context, LOperand* key, LOperand* object) { |
| 2160 inputs_[0] = key; | 2022 inputs_[0] = context; |
| 2161 inputs_[1] = object; | 2023 inputs_[1] = key; |
| 2024 inputs_[2] = object; |
| 2162 } | 2025 } |
| 2163 | 2026 |
| 2164 LOperand* key() { return inputs_[0]; } | 2027 LOperand* context() { return inputs_[0]; } |
| 2165 LOperand* object() { return inputs_[1]; } | 2028 LOperand* key() { return inputs_[1]; } |
| 2029 LOperand* object() { return inputs_[2]; } |
| 2166 | 2030 |
| 2167 DECLARE_CONCRETE_INSTRUCTION(In, "in") | 2031 DECLARE_CONCRETE_INSTRUCTION(In, "in") |
| 2168 }; | 2032 }; |
| 2169 | 2033 |
| 2170 | 2034 |
| 2171 class LChunkBuilder; | 2035 class LChunkBuilder; |
| 2172 class LChunk: public ZoneObject { | 2036 class LChunk: public ZoneObject { |
| 2173 public: | 2037 public: |
| 2174 explicit LChunk(CompilationInfo* info, HGraph* graph) | 2038 LChunk(CompilationInfo* info, HGraph* graph) |
| 2175 : spill_slot_count_(0), | 2039 : spill_slot_count_(0), |
| 2176 info_(info), | 2040 info_(info), |
| 2177 graph_(graph), | 2041 graph_(graph), |
| 2178 instructions_(32), | 2042 instructions_(32), |
| 2179 pointer_maps_(8), | 2043 pointer_maps_(8), |
| 2180 inlined_closures_(1) { } | 2044 inlined_closures_(1) { } |
| 2181 | 2045 |
| 2182 void AddInstruction(LInstruction* instruction, HBasicBlock* block); | 2046 void AddInstruction(LInstruction* instruction, HBasicBlock* block); |
| 2183 LConstantOperand* DefineConstantOperand(HConstant* constant); | 2047 LConstantOperand* DefineConstantOperand(HConstant* constant); |
| 2184 Handle<Object> LookupLiteral(LConstantOperand* operand) const; | 2048 Handle<Object> LookupLiteral(LConstantOperand* operand) const; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2389 | 2253 |
| 2390 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 2254 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
| 2391 }; | 2255 }; |
| 2392 | 2256 |
| 2393 #undef DECLARE_HYDROGEN_ACCESSOR | 2257 #undef DECLARE_HYDROGEN_ACCESSOR |
| 2394 #undef DECLARE_CONCRETE_INSTRUCTION | 2258 #undef DECLARE_CONCRETE_INSTRUCTION |
| 2395 | 2259 |
| 2396 } } // namespace v8::internal | 2260 } } // namespace v8::internal |
| 2397 | 2261 |
| 2398 #endif // V8_IA32_LITHIUM_IA32_H_ | 2262 #endif // V8_IA32_LITHIUM_IA32_H_ |
| OLD | NEW |