v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
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_DIAGNOSTICS_ARM64_DISASM_ARM64_H_
6#define V8_DIAGNOSTICS_ARM64_DISASM_ARM64_H_
7
11#include "src/common/globals.h"
12
13namespace v8 {
14namespace internal {
15
17 public:
19 DisassemblingDecoder(char* text_buffer, int buffer_size);
21 char* GetOutput();
22
23// Declare all Visitor functions.
24#define DECLARE(A) void Visit##A(Instruction* instr);
26#undef DECLARE
27
28 protected:
30
31 // Default output functions. The functions below implement a default way of
32 // printing elements in the disassembly. A sub-class can override these to
33 // customize the disassembly output.
34
35 // Prints the name of a register.
37
38 void Format(Instruction* instr, const char* mnemonic, const char* format);
39 void Substitute(Instruction* instr, const char* string);
40 int SubstituteField(Instruction* instr, const char* format);
41 int SubstituteRegisterField(Instruction* instr, const char* format);
42 int SubstituteImmediateField(Instruction* instr, const char* format);
43 int SubstituteLiteralField(Instruction* instr, const char* format);
45 int SubstituteShiftField(Instruction* instr, const char* format);
46 int SubstituteExtendField(Instruction* instr, const char* format);
47 int SubstituteConditionField(Instruction* instr, const char* format);
50 int SubstituteLSRegOffsetField(Instruction* instr, const char* format);
51 int SubstitutePrefetchField(Instruction* instr, const char* format);
52 int SubstituteBarrierField(Instruction* instr, const char* format);
53
55 return (instr->Rd() == kZeroRegCode);
56 }
57
59 return (instr->Rn() == kZeroRegCode);
60 }
61
63 return (instr->Rm() == kZeroRegCode);
64 }
65
67 return (instr->Ra() == kZeroRegCode);
68 }
69
70 bool IsMovzMovnImm(unsigned reg_size, uint64_t value);
71
73 void AppendToOutput(const char* string, ...);
75
76 char* buffer_;
77 uint32_t buffer_pos_;
78 uint32_t buffer_size_;
80};
81
83 public:
84 explicit PrintDisassembler(FILE* stream) : stream_(stream) {}
86
88
89 private:
90 FILE* stream_;
91};
92
93} // namespace internal
94} // namespace v8
95
96#endif // V8_DIAGNOSTICS_ARM64_DISASM_ARM64_H_
int SubstituteBranchTargetField(Instruction *instr, const char *format)
DisassemblingDecoder(char *text_buffer, int buffer_size)
int SubstituteBitfieldImmediateField(Instruction *instr, const char *format)
void Substitute(Instruction *instr, const char *string)
int SubstituteExtendField(Instruction *instr, const char *format)
int SubstituteLSRegOffsetField(Instruction *instr, const char *format)
int SubstitutePrefetchField(Instruction *instr, const char *format)
int SubstituteShiftField(Instruction *instr, const char *format)
void DisassembleNEONPolynomialMul(Instruction *instr)
void AppendToOutput(const char *string,...)
int SubstituteRegisterField(Instruction *instr, const char *format)
virtual void ProcessOutput(Instruction *instr)
int SubstituteImmediateField(Instruction *instr, const char *format)
void Format(Instruction *instr, const char *mnemonic, const char *format)
int SubstituteLiteralField(Instruction *instr, const char *format)
bool IsMovzMovnImm(unsigned reg_size, uint64_t value)
virtual void AppendRegisterNameToOutput(const CPURegister &reg)
bool RaIsZROrSP(Instruction *instr) const
bool RnIsZROrSP(Instruction *instr) const
int SubstitutePCRelAddressField(Instruction *instr, const char *format)
int SubstituteConditionField(Instruction *instr, const char *format)
int SubstituteField(Instruction *instr, const char *format)
bool RmIsZROrSP(Instruction *instr) const
bool RdIsZROrSP(Instruction *instr) const
int SubstituteBarrierField(Instruction *instr, const char *format)
virtual void ProcessOutput(Instruction *instr)
#define VISITOR_LIST(V)
#define DECLARE(A)
Instruction * instr
LiftoffRegister reg
constexpr int kZeroRegCode
#define V8_EXPORT_PRIVATE
Definition macros.h:460