V8 Project
disasm-arm64.h
Go to the documentation of this file.
1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_ARM64_DISASM_ARM64_H
6 #define V8_ARM64_DISASM_ARM64_H
7 
8 #include "src/v8.h"
9 
12 #include "src/globals.h"
13 #include "src/utils.h"
14 
15 namespace v8 {
16 namespace internal {
17 
18 
20  public:
22  Disassembler(char* text_buffer, int buffer_size);
23  virtual ~Disassembler();
24  char* GetOutput();
25 
26  // Declare all Visitor functions.
27  #define DECLARE(A) void Visit##A(Instruction* instr);
29  #undef DECLARE
30 
31  protected:
32  virtual void ProcessOutput(Instruction* instr);
33 
34  void Format(Instruction* instr, const char* mnemonic, const char* format);
35  void Substitute(Instruction* instr, const char* string);
36  int SubstituteField(Instruction* instr, const char* format);
37  int SubstituteRegisterField(Instruction* instr, const char* format);
38  int SubstituteImmediateField(Instruction* instr, const char* format);
39  int SubstituteLiteralField(Instruction* instr, const char* format);
40  int SubstituteBitfieldImmediateField(Instruction* instr, const char* format);
41  int SubstituteShiftField(Instruction* instr, const char* format);
42  int SubstituteExtendField(Instruction* instr, const char* format);
43  int SubstituteConditionField(Instruction* instr, const char* format);
44  int SubstitutePCRelAddressField(Instruction* instr, const char* format);
45  int SubstituteBranchTargetField(Instruction* instr, const char* format);
46  int SubstituteLSRegOffsetField(Instruction* instr, const char* format);
47  int SubstitutePrefetchField(Instruction* instr, const char* format);
48  int SubstituteBarrierField(Instruction* instr, const char* format);
49 
50  bool RdIsZROrSP(Instruction* instr) const {
51  return (instr->Rd() == kZeroRegCode);
52  }
53 
54  bool RnIsZROrSP(Instruction* instr) const {
55  return (instr->Rn() == kZeroRegCode);
56  }
57 
58  bool RmIsZROrSP(Instruction* instr) const {
59  return (instr->Rm() == kZeroRegCode);
60  }
61 
62  bool RaIsZROrSP(Instruction* instr) const {
63  return (instr->Ra() == kZeroRegCode);
64  }
65 
66  bool IsMovzMovnImm(unsigned reg_size, uint64_t value);
67 
68  void ResetOutput();
69  void AppendToOutput(const char* string, ...);
70 
71  char* buffer_;
75 };
76 
77 
79  public:
80  explicit PrintDisassembler(FILE* stream) : stream_(stream) { }
82 
83  virtual void ProcessOutput(Instruction* instr);
84 
85  private:
86  FILE *stream_;
87 };
88 
89 
90 } } // namespace v8::internal
91 
92 #endif // V8_ARM64_DISASM_ARM64_H
void Format(Instruction *instr, const char *mnemonic, const char *format)
int SubstituteBranchTargetField(Instruction *instr, const char *format)
int SubstituteExtendField(Instruction *instr, const char *format)
bool RnIsZROrSP(Instruction *instr) const
Definition: disasm-arm64.h:54
bool IsMovzMovnImm(unsigned reg_size, uint64_t value)
bool RdIsZROrSP(Instruction *instr) const
Definition: disasm-arm64.h:50
void AppendToOutput(const char *string,...)
int SubstituteField(Instruction *instr, const char *format)
bool RaIsZROrSP(Instruction *instr) const
Definition: disasm-arm64.h:62
int SubstituteLiteralField(Instruction *instr, const char *format)
bool RmIsZROrSP(Instruction *instr) const
Definition: disasm-arm64.h:58
int SubstituteConditionField(Instruction *instr, const char *format)
int SubstituteBitfieldImmediateField(Instruction *instr, const char *format)
int SubstituteImmediateField(Instruction *instr, const char *format)
int SubstitutePCRelAddressField(Instruction *instr, const char *format)
Disassembler(char *text_buffer, int buffer_size)
int SubstituteShiftField(Instruction *instr, const char *format)
int SubstituteRegisterField(Instruction *instr, const char *format)
int SubstituteLSRegOffsetField(Instruction *instr, const char *format)
int SubstituteBarrierField(Instruction *instr, const char *format)
void Substitute(Instruction *instr, const char *string)
int SubstitutePrefetchField(Instruction *instr, const char *format)
virtual void ProcessOutput(Instruction *instr)
virtual void ProcessOutput(Instruction *instr)
#define VISITOR_LIST(V)
Definition: decoder-arm64.h:19
#define DECLARE(A)
Definition: disasm-arm64.h:27
const unsigned kZeroRegCode
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20