Index: src/interpreter/register-translator.h |
diff --git a/src/interpreter/register-translator.h b/src/interpreter/register-translator.h |
deleted file mode 100644 |
index b683a899e2f265e39aca15c9ad01297920f058c6..0000000000000000000000000000000000000000 |
--- a/src/interpreter/register-translator.h |
+++ /dev/null |
@@ -1,119 +0,0 @@ |
-// Copyright 2015 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_INTERPRETER_REGISTER_TRANSLATOR_H_ |
-#define V8_INTERPRETER_REGISTER_TRANSLATOR_H_ |
- |
-#include "src/interpreter/bytecodes.h" |
- |
-namespace v8 { |
-namespace internal { |
-namespace interpreter { |
- |
-class RegisterMover; |
- |
-// A class that enables bytecodes having only byte sized register operands |
-// to access all registers in the two byte space. Most bytecode uses few |
-// registers so space can be saved if most bytecodes with register operands |
-// just take byte operands. |
-// |
-// To reach the wider register space, a translation window is reserved in |
-// the byte addressable space specifically for copying registers into and |
-// out of before a bytecode is emitted. The translation window occupies |
-// the last register slots at the top of the byte addressable range. |
-// |
-// Because of the translation window any registers which naturally lie |
-// at above the translation window have to have their register index |
-// incremented by the window width before they are emitted. |
-// |
-// This class does not support moving ranges of registers to and from |
-// the translation window. It would be straightforward to add support |
-// for constrained ranges, e.g. kRegPair8, kRegTriple8 operands, but |
-// these would have two negative effects. The translation window would |
-// need to be wider, further limiting the space for byte operands. And |
-// every register in a range would need to be moved consuming more |
-// space in the bytecode array. |
-class RegisterTranslator final { |
- public: |
- explicit RegisterTranslator(RegisterMover* mover); |
- |
- // Translate and re-write the register operands that are inputs |
- // to |bytecode| when it is about to be emitted. |
- void TranslateInputRegisters(Bytecode bytecode, uint32_t* raw_operands, |
- int raw_operand_count); |
- |
- // Translate and re-write the register operands that are outputs |
- // from |bytecode| when it has just been output. |
- void TranslateOutputRegisters(); |
- |
- // Returns true if |reg| is in the translation window. |
- static bool InTranslationWindow(Register reg); |
- |
- // Return register value as if it had been translated. |
- static Register UntranslateRegister(Register reg); |
- |
- // Returns the distance in registers between the translation window |
- // start and |reg|. The result is negative when |reg| is above the |
- // start of the translation window. |
- static int DistanceToTranslationWindow(Register reg); |
- |
- // Returns true if |reg| can be represented as an 8-bit operand |
- // after translation. |
- static bool FitsInReg8Operand(Register reg); |
- |
- // Returns true if |reg| can be represented as an 16-bit operand |
- // after translation. |
- static bool FitsInReg16Operand(Register reg); |
- |
- // Returns the increment to the register count necessary if the |
- // value indicates the translation window is required. |
- static int RegisterCountAdjustment(int register_count, int parameter_count); |
- |
- private: |
- static const int kTranslationWindowLength = 4; |
- static const int kTranslationWindowLimit = -kMinInt8; |
- static const int kTranslationWindowStart = |
- kTranslationWindowLimit - kTranslationWindowLength + 1; |
- |
- Register TranslateAndMove(Bytecode bytecode, int operand_index, Register reg); |
- static bool RegisterIsMovableToWindow(Bytecode bytecode, int operand_index); |
- |
- static Register Translate(Register reg); |
- |
- RegisterMover* mover() const { return mover_; } |
- |
- // Entity to perform register moves necessary to translate registers |
- // and ensure reachability. |
- RegisterMover* mover_; |
- |
- // Flag to avoid re-entrancy when emitting move bytecodes for |
- // translation. |
- bool emitting_moves_; |
- |
- // Number of window registers in use. |
- int window_registers_count_; |
- |
- // State for restoring register moves emitted by TranslateOutputRegisters. |
- std::pair<Register, Register> output_moves_[kTranslationWindowLength]; |
- int output_moves_count_; |
-}; |
- |
-// Interface for RegisterTranslator helper class that will emit |
-// register move bytecodes at the translator's behest. |
-class RegisterMover { |
- public: |
- virtual ~RegisterMover() {} |
- |
- // Move register |from| to register |to| with no translation. |
- // returns false if either register operand is invalid. Implementations |
- // of this method must be aware that register moves with bad |
- // register values are a security hole. |
- virtual void MoveRegisterUntranslated(Register from, Register to) = 0; |
-}; |
- |
-} // namespace interpreter |
-} // namespace internal |
-} // namespace v8 |
- |
-#endif // V8_INTERPRETER_REGISTER_TRANSLATOR_H_ |