blob: cdf6b1af63aa7b3e2e57dbef7d502de696d6078d [file] [log] [blame]
armvixlc68cb642014-09-25 18:49:30 +01001// Copyright 2014, ARM Limited
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are met:
6//
7// * Redistributions of source code must retain the above copyright notice,
8// this list of conditions and the following disclaimer.
9// * Redistributions in binary form must reproduce the above copyright notice,
10// this list of conditions and the following disclaimer in the documentation
11// and/or other materials provided with the distribution.
12// * Neither the name of ARM Limited nor the names of its contributors may be
13// used to endorse or promote products derived from this software without
14// specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef VIXL_EXAMPLES_CUSTOM_DISASSEMBLER_H_
28#define VIXL_EXAMPLES_CUSTOM_DISASSEMBLER_H_
29
Alexandre Rames39c32a62016-05-23 15:47:22 +010030#include "a64/disasm-a64.h"
armvixlc68cb642014-09-25 18:49:30 +010031
32using namespace vixl;
33
34void TestCustomDisassembler();
35
armvixl330dc712014-11-25 10:38:32 +000036// We want to change three things in the disassembly:
37// - Add comments to some add/sub instructions.
38// - Use aliases for register names.
39// - Add descriptions for code addresses.
armvixl0f35e362016-05-10 13:57:58 +010040class CustomDisassembler : public Disassembler {
armvixlc68cb642014-09-25 18:49:30 +010041 public:
armvixl0f35e362016-05-10 13:57:58 +010042 CustomDisassembler() : Disassembler() {}
43 virtual ~CustomDisassembler() {}
armvixlc68cb642014-09-25 18:49:30 +010044
45 virtual void VisitAddSubShifted(const Instruction* instr);
46
47 protected:
armvixlc68cb642014-09-25 18:49:30 +010048 virtual void AppendRegisterNameToOutput(const Instruction* instr,
49 const CPURegister& reg);
50
armvixl330dc712014-11-25 10:38:32 +000051 virtual void AppendCodeRelativeCodeAddressToOutput(const Instruction* instr,
52 const void* addr);
armvixlc68cb642014-09-25 18:49:30 +010053};
54
55
56#endif