17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file. 47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_LITHIUM_INL_H_ 67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_LITHIUM_INL_H_ 77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/lithium.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#if V8_TARGET_ARCH_IA32 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/ia32/lithium-ia32.h" // NOLINT 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_X64 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/x64/lithium-x64.h" // NOLINT 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_ARM64 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/arm64/lithium-arm64.h" // NOLINT 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_ARM 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/arm/lithium-arm.h" // NOLINT 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_MIPS 197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/mips/lithium-mips.h" // NOLINT 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_MIPS64 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/mips64/lithium-mips64.h" // NOLINT 227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#elif V8_TARGET_ARCH_X87 237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/x87/lithium-x87.h" // NOLINT 247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#else 257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#error "Unknown architecture." 267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif 277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 { 297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal { 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTempIterator::TempIterator(LInstruction* instr) 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org : instr_(instr), limit_(instr->TempCount()), current_(0) { 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SkipUninteresting(); 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgbool TempIterator::Done() { return current_ >= limit_; } 387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgLOperand* TempIterator::Current() { 41e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!Done()); 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return instr_->TempAt(current_); 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid TempIterator::SkipUninteresting() { 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org while (current_ < limit_ && instr_->TempAt(current_) == NULL) ++current_; 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid TempIterator::Advance() { 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org ++current_; 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SkipUninteresting(); 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgInputIterator::InputIterator(LInstruction* instr) 587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org : instr_(instr), limit_(instr->InputCount()), current_(0) { 597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SkipUninteresting(); 607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgbool InputIterator::Done() { return current_ >= limit_; } 647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgLOperand* InputIterator::Current() { 67e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!Done()); 68e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(instr_->InputAt(current_) != NULL); 697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return instr_->InputAt(current_); 707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid InputIterator::Advance() { 747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org ++current_; 757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SkipUninteresting(); 767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid InputIterator::SkipUninteresting() { 807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org while (current_ < limit_) { 817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org LOperand* current = instr_->InputAt(current_); 827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (current != NULL && !current->IsConstantOperand()) break; 837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org ++current_; 847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgUseIterator::UseIterator(LInstruction* instr) 897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org : input_iterator_(instr), env_iterator_(instr->environment()) {} 907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgbool UseIterator::Done() { 937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return input_iterator_.Done() && env_iterator_.Done(); 947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgLOperand* UseIterator::Current() { 98e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!Done()); 997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org LOperand* result = input_iterator_.Done() ? env_iterator_.Current() 1007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org : input_iterator_.Current(); 101e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(result != NULL); 1027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return result; 1037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid UseIterator::Advance() { 1077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org input_iterator_.Done() ? env_iterator_.Advance() : input_iterator_.Advance(); 1087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace v8::internal 1117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif // V8_LITHIUM_INL_H_ 113