diff options
Diffstat (limited to 'deps/v8/src/lithium-inl.h')
-rw-r--r-- | deps/v8/src/lithium-inl.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/deps/v8/src/lithium-inl.h b/deps/v8/src/lithium-inl.h new file mode 100644 index 000000000..36e166e92 --- /dev/null +++ b/deps/v8/src/lithium-inl.h @@ -0,0 +1,112 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_LITHIUM_INL_H_ +#define V8_LITHIUM_INL_H_ + +#include "src/lithium.h" + +#if V8_TARGET_ARCH_IA32 +#include "src/ia32/lithium-ia32.h" // NOLINT +#elif V8_TARGET_ARCH_X64 +#include "src/x64/lithium-x64.h" // NOLINT +#elif V8_TARGET_ARCH_ARM64 +#include "src/arm64/lithium-arm64.h" // NOLINT +#elif V8_TARGET_ARCH_ARM +#include "src/arm/lithium-arm.h" // NOLINT +#elif V8_TARGET_ARCH_MIPS +#include "src/mips/lithium-mips.h" // NOLINT +#elif V8_TARGET_ARCH_MIPS64 +#include "src/mips64/lithium-mips64.h" // NOLINT +#elif V8_TARGET_ARCH_X87 +#include "src/x87/lithium-x87.h" // NOLINT +#else +#error "Unknown architecture." +#endif + +namespace v8 { +namespace internal { + +TempIterator::TempIterator(LInstruction* instr) + : instr_(instr), limit_(instr->TempCount()), current_(0) { + SkipUninteresting(); +} + + +bool TempIterator::Done() { return current_ >= limit_; } + + +LOperand* TempIterator::Current() { + DCHECK(!Done()); + return instr_->TempAt(current_); +} + + +void TempIterator::SkipUninteresting() { + while (current_ < limit_ && instr_->TempAt(current_) == NULL) ++current_; +} + + +void TempIterator::Advance() { + ++current_; + SkipUninteresting(); +} + + +InputIterator::InputIterator(LInstruction* instr) + : instr_(instr), limit_(instr->InputCount()), current_(0) { + SkipUninteresting(); +} + + +bool InputIterator::Done() { return current_ >= limit_; } + + +LOperand* InputIterator::Current() { + DCHECK(!Done()); + DCHECK(instr_->InputAt(current_) != NULL); + return instr_->InputAt(current_); +} + + +void InputIterator::Advance() { + ++current_; + SkipUninteresting(); +} + + +void InputIterator::SkipUninteresting() { + while (current_ < limit_) { + LOperand* current = instr_->InputAt(current_); + if (current != NULL && !current->IsConstantOperand()) break; + ++current_; + } +} + + +UseIterator::UseIterator(LInstruction* instr) + : input_iterator_(instr), env_iterator_(instr->environment()) {} + + +bool UseIterator::Done() { + return input_iterator_.Done() && env_iterator_.Done(); +} + + +LOperand* UseIterator::Current() { + DCHECK(!Done()); + LOperand* result = input_iterator_.Done() ? env_iterator_.Current() + : input_iterator_.Current(); + DCHECK(result != NULL); + return result; +} + + +void UseIterator::Advance() { + input_iterator_.Done() ? env_iterator_.Advance() : input_iterator_.Advance(); +} +} +} // namespace v8::internal + +#endif // V8_LITHIUM_INL_H_ |