• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2012 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #ifndef ART_DISASSEMBLER_DISASSEMBLER_MIPS_H_
18  #define ART_DISASSEMBLER_DISASSEMBLER_MIPS_H_
19  
20  #include <vector>
21  
22  #include "disassembler.h"
23  
24  namespace art {
25  namespace mips {
26  
27  class DisassemblerMips final : public Disassembler {
28   public:
DisassemblerMips(DisassemblerOptions * options,bool is_o32_abi)29    explicit DisassemblerMips(DisassemblerOptions* options, bool is_o32_abi)
30        : Disassembler(options),
31          last_ptr_(nullptr),
32          last_instr_(0),
33          is_o32_abi_(is_o32_abi) {}
34  
35    const char* RegName(uint32_t reg);
36    size_t Dump(std::ostream& os, const uint8_t* begin) override;
37    void Dump(std::ostream& os, const uint8_t* begin, const uint8_t* end) override;
38  
39   private:
40    // Address and encoding of the last disassembled instruction.
41    // Needed to produce more readable disassembly of certain 2-instruction sequences.
42    const uint8_t* last_ptr_;
43    uint32_t last_instr_;
44    const bool is_o32_abi_;
45  
46    DISALLOW_COPY_AND_ASSIGN(DisassemblerMips);
47  };
48  
49  }  // namespace mips
50  }  // namespace art
51  
52  #endif  // ART_DISASSEMBLER_DISASSEMBLER_MIPS_H_
53