1b78f13911bfe6eda303e91ef215c87a165aae8aeAlexandre Rames// Copyright 2014, VIXL authors 2c68cb64496485710cdb5b8480f8fee287058c93farmvixl// All rights reserved. 3c68cb64496485710cdb5b8480f8fee287058c93farmvixl// 4c68cb64496485710cdb5b8480f8fee287058c93farmvixl// Redistribution and use in source and binary forms, with or without 5c68cb64496485710cdb5b8480f8fee287058c93farmvixl// modification, are permitted provided that the following conditions are met: 6c68cb64496485710cdb5b8480f8fee287058c93farmvixl// 7c68cb64496485710cdb5b8480f8fee287058c93farmvixl// * Redistributions of source code must retain the above copyright notice, 8c68cb64496485710cdb5b8480f8fee287058c93farmvixl// this list of conditions and the following disclaimer. 9c68cb64496485710cdb5b8480f8fee287058c93farmvixl// * Redistributions in binary form must reproduce the above copyright notice, 10c68cb64496485710cdb5b8480f8fee287058c93farmvixl// this list of conditions and the following disclaimer in the documentation 11c68cb64496485710cdb5b8480f8fee287058c93farmvixl// and/or other materials provided with the distribution. 12c68cb64496485710cdb5b8480f8fee287058c93farmvixl// * Neither the name of ARM Limited nor the names of its contributors may be 13c68cb64496485710cdb5b8480f8fee287058c93farmvixl// used to endorse or promote products derived from this software without 14c68cb64496485710cdb5b8480f8fee287058c93farmvixl// specific prior written permission. 15c68cb64496485710cdb5b8480f8fee287058c93farmvixl// 16c68cb64496485710cdb5b8480f8fee287058c93farmvixl// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND 17c68cb64496485710cdb5b8480f8fee287058c93farmvixl// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18c68cb64496485710cdb5b8480f8fee287058c93farmvixl// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19c68cb64496485710cdb5b8480f8fee287058c93farmvixl// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 20c68cb64496485710cdb5b8480f8fee287058c93farmvixl// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21c68cb64496485710cdb5b8480f8fee287058c93farmvixl// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22c68cb64496485710cdb5b8480f8fee287058c93farmvixl// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23c68cb64496485710cdb5b8480f8fee287058c93farmvixl// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24c68cb64496485710cdb5b8480f8fee287058c93farmvixl// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25c68cb64496485710cdb5b8480f8fee287058c93farmvixl// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26c68cb64496485710cdb5b8480f8fee287058c93farmvixl 27c68cb64496485710cdb5b8480f8fee287058c93farmvixl#ifndef VIXL_EXAMPLES_CUSTOM_DISASSEMBLER_H_ 28c68cb64496485710cdb5b8480f8fee287058c93farmvixl#define VIXL_EXAMPLES_CUSTOM_DISASSEMBLER_H_ 29c68cb64496485710cdb5b8480f8fee287058c93farmvixl 30d3832965c62a8ad461b9ea9eb0994ca6b0a3da2cAlexandre Rames#include "aarch64/disasm-aarch64.h" 31c68cb64496485710cdb5b8480f8fee287058c93farmvixl 3288c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisusing namespace vixl::aarch64; 33c68cb64496485710cdb5b8480f8fee287058c93farmvixl 34c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid TestCustomDisassembler(); 35c68cb64496485710cdb5b8480f8fee287058c93farmvixl 36330dc7153e671968beb67f09ed2cb7b5bda334dbarmvixl// We want to change three things in the disassembly: 37330dc7153e671968beb67f09ed2cb7b5bda334dbarmvixl// - Add comments to some add/sub instructions. 38330dc7153e671968beb67f09ed2cb7b5bda334dbarmvixl// - Use aliases for register names. 39330dc7153e671968beb67f09ed2cb7b5bda334dbarmvixl// - Add descriptions for code addresses. 400f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixlclass CustomDisassembler : public Disassembler { 41c68cb64496485710cdb5b8480f8fee287058c93farmvixl public: 420f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl CustomDisassembler() : Disassembler() {} 430f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl virtual ~CustomDisassembler() {} 44c68cb64496485710cdb5b8480f8fee287058c93farmvixl 453fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois virtual void VisitAddSubShifted(const Instruction* instr) VIXL_OVERRIDE; 46c68cb64496485710cdb5b8480f8fee287058c93farmvixl 47c68cb64496485710cdb5b8480f8fee287058c93farmvixl protected: 48c68cb64496485710cdb5b8480f8fee287058c93farmvixl virtual void AppendRegisterNameToOutput(const Instruction* instr, 493fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const CPURegister& reg) VIXL_OVERRIDE; 50c68cb64496485710cdb5b8480f8fee287058c93farmvixl 513fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois virtual void AppendCodeRelativeCodeAddressToOutput( 523fac43c1a101f98f116e752b80abc122d32b83acPierre Langlois const Instruction* instr, const void* addr) VIXL_OVERRIDE; 53c68cb64496485710cdb5b8480f8fee287058c93farmvixl}; 54c68cb64496485710cdb5b8480f8fee287058c93farmvixl 55c68cb64496485710cdb5b8480f8fee287058c93farmvixl 56c68cb64496485710cdb5b8480f8fee287058c93farmvixl#endif 57