1881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne//===- XCoreDisassembler.cpp - Disassembler for XCore -----------*- C++ -*-===// 2881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// 3881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// The LLVM Compiler Infrastructure 4881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// 5881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// This file is distributed under the University of Illinois Open Source 6881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// License. See LICENSE.TXT for details. 7881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne// 8881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne//===----------------------------------------------------------------------===// 9b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne/// 10b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne/// \file 11b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne/// \brief This file is part of the XCore Disassembler. 12b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne/// 13881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne//===----------------------------------------------------------------------===// 14881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 1554d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne#include "XCore.h" 1654d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne#include "XCoreRegisterInfo.h" 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/MC/MCContext.h" 18881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne#include "llvm/MC/MCDisassembler.h" 19881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne#include "llvm/MC/MCFixedLenDisassembler.h" 2054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne#include "llvm/MC/MCInst.h" 21881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne#include "llvm/MC/MCSubtargetInfo.h" 22881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne#include "llvm/Support/MemoryObject.h" 23881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne#include "llvm/Support/TargetRegistry.h" 24881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 25881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborneusing namespace llvm; 26881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "xcore-disassembler" 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 29881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osbornetypedef MCDisassembler::DecodeStatus DecodeStatus; 30881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 31881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osbornenamespace { 32881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 33b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne/// \brief A disassembler class for XCore. 34881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborneclass XCoreDisassembler : public MCDisassembler { 35881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osbornepublic: 36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines XCoreDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx) : 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCDisassembler(STI, Ctx) {} 38881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 39b4d40a04f0639fdec8329a8708565411fa53b5bcRichard Osborne /// \brief See MCDisassembler. 40881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne virtual DecodeStatus getInstruction(MCInst &instr, 41881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne uint64_t &size, 42881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne const MemoryObject ®ion, 43881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne uint64_t address, 44881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne raw_ostream &vStream, 45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines raw_ostream &cStream) const override; 4654d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 47881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne}; 4854d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne} 49881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 5054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osbornestatic bool readInstruction16(const MemoryObject ®ion, 5154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint64_t address, 5254d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint64_t &size, 5354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint16_t &insn) { 5454d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint8_t Bytes[4]; 5554d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 5654d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne // We want to read exactly 2 Bytes of data. 5749a6a8d8f2994249c81b7914b07015714748a55cBenjamin Kramer if (region.readBytes(address, 2, Bytes) == -1) { 5854d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne size = 0; 5954d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return false; 6054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne } 6154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne // Encoded as a little-endian 16-bit word in the stream. 6254d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne insn = (Bytes[0] << 0) | (Bytes[1] << 8); 6354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return true; 6454d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne} 6554d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 66c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osbornestatic bool readInstruction32(const MemoryObject ®ion, 67c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint64_t address, 68c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint64_t &size, 69c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint32_t &insn) { 70c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint8_t Bytes[4]; 71c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 72c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne // We want to read exactly 4 Bytes of data. 7349a6a8d8f2994249c81b7914b07015714748a55cBenjamin Kramer if (region.readBytes(address, 4, Bytes) == -1) { 74c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne size = 0; 75c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return false; 76c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne } 77c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne // Encoded as a little-endian 32-bit word in the stream. 78c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne insn = (Bytes[0] << 0) | (Bytes[1] << 8) | (Bytes[2] << 16) | 79c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne (Bytes[3] << 24); 80c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return true; 81c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne} 82c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 8354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osbornestatic unsigned getReg(const void *D, unsigned RC, unsigned RegNo) { 8454d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne const XCoreDisassembler *Dis = static_cast<const XCoreDisassembler*>(D); 85dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCRegisterInfo *RegInfo = Dis->getContext().getRegisterInfo(); 86dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return *(RegInfo->getRegClass(RC).begin() + RegNo); 8754d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne} 8854d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 8954d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osbornestatic DecodeStatus DecodeGRRegsRegisterClass(MCInst &Inst, 9054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne unsigned RegNo, 9154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint64_t Address, 9254d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne const void *Decoder); 9354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 94c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osbornestatic DecodeStatus DecodeRRegsRegisterClass(MCInst &Inst, 95c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne unsigned RegNo, 96c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne uint64_t Address, 97c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne const void *Decoder); 98c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne 9935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus DecodeBitpOperand(MCInst &Inst, unsigned Val, 10035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne uint64_t Address, const void *Decoder); 10135150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 1021114b0ec15aaa22dfc0ce582820cea556600d103Richard Osbornestatic DecodeStatus DecodeNegImmOperand(MCInst &Inst, unsigned Val, 1031114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne uint64_t Address, const void *Decoder); 1041114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne 1051ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus Decode2RInstruction(MCInst &Inst, 1066e43b7f6b20b39b041cf24d732ddb802bbd6471aRichard Osborne unsigned Insn, 1071ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne uint64_t Address, 1081ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder); 1091ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 1108dc741e400213ea8183e09626f0d1f45f14e044fRichard Osbornestatic DecodeStatus Decode2RImmInstruction(MCInst &Inst, 1118dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne unsigned Insn, 1128dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne uint64_t Address, 1138dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne const void *Decoder); 1148dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne 1151ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus DecodeR2RInstruction(MCInst &Inst, 1166e43b7f6b20b39b041cf24d732ddb802bbd6471aRichard Osborne unsigned Insn, 1171ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne uint64_t Address, 1181ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder); 1191ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 1201ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus Decode2RSrcDstInstruction(MCInst &Inst, 1216e43b7f6b20b39b041cf24d732ddb802bbd6471aRichard Osborne unsigned Insn, 1221ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne uint64_t Address, 1231ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder); 1241ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 12535150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus DecodeRUSInstruction(MCInst &Inst, 12635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Insn, 12735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne uint64_t Address, 12835150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder); 12935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 13035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus DecodeRUSBitpInstruction(MCInst &Inst, 13135150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Insn, 13235150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne uint64_t Address, 13335150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder); 13435150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 13535150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus DecodeRUSSrcDstBitpInstruction(MCInst &Inst, 13635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Insn, 13735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne uint64_t Address, 13835150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder); 13935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 140c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osbornestatic DecodeStatus DecodeL2RInstruction(MCInst &Inst, 141c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne unsigned Insn, 142c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint64_t Address, 143c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne const void *Decoder); 144c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 145c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osbornestatic DecodeStatus DecodeLR2RInstruction(MCInst &Inst, 146c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne unsigned Insn, 147c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint64_t Address, 148c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne const void *Decoder); 149c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 15062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osbornestatic DecodeStatus Decode3RInstruction(MCInst &Inst, 15162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Insn, 15262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne uint64_t Address, 15362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne const void *Decoder); 15462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 155763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osbornestatic DecodeStatus Decode3RImmInstruction(MCInst &Inst, 156763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne unsigned Insn, 157763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne uint64_t Address, 158763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne const void *Decoder); 159763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne 160a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osbornestatic DecodeStatus Decode2RUSInstruction(MCInst &Inst, 161a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne unsigned Insn, 162a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne uint64_t Address, 163a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne const void *Decoder); 164a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne 165a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osbornestatic DecodeStatus Decode2RUSBitpInstruction(MCInst &Inst, 166a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne unsigned Insn, 167a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne uint64_t Address, 168a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne const void *Decoder); 169a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne 170c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osbornestatic DecodeStatus DecodeL3RInstruction(MCInst &Inst, 171c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne unsigned Insn, 172c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne uint64_t Address, 173c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne const void *Decoder); 174c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 175c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osbornestatic DecodeStatus DecodeL3RSrcDstInstruction(MCInst &Inst, 176c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne unsigned Insn, 177c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne uint64_t Address, 178c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne const void *Decoder); 179c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 180b853c415c663c752c669cb191cea95542c1d21f6Richard Osbornestatic DecodeStatus DecodeL2RUSInstruction(MCInst &Inst, 181b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne unsigned Insn, 182b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne uint64_t Address, 183b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne const void *Decoder); 184b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne 185b853c415c663c752c669cb191cea95542c1d21f6Richard Osbornestatic DecodeStatus DecodeL2RUSBitpInstruction(MCInst &Inst, 186b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne unsigned Insn, 187b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne uint64_t Address, 188b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne const void *Decoder); 189b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne 1909e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osbornestatic DecodeStatus DecodeL6RInstruction(MCInst &Inst, 1919e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne unsigned Insn, 1929e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne uint64_t Address, 1939e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne const void *Decoder); 1949e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne 1953b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osbornestatic DecodeStatus DecodeL5RInstruction(MCInst &Inst, 1963b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne unsigned Insn, 1973b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne uint64_t Address, 1983b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne const void *Decoder); 1993b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne 200c47bd9899b639c3384268f871009259c2a94fba4Richard Osbornestatic DecodeStatus DecodeL4RSrcDstInstruction(MCInst &Inst, 201c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Insn, 202c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne uint64_t Address, 203c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne const void *Decoder); 204c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne 205c47bd9899b639c3384268f871009259c2a94fba4Richard Osbornestatic DecodeStatus DecodeL4RSrcDstSrcDstInstruction(MCInst &Inst, 206c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Insn, 207c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne uint64_t Address, 208c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne const void *Decoder); 209c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne 21054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne#include "XCoreGenDisassemblerTables.inc" 21154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 21254d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osbornestatic DecodeStatus DecodeGRRegsRegisterClass(MCInst &Inst, 21354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne unsigned RegNo, 21454d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne uint64_t Address, 21554d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne const void *Decoder) 21654d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne{ 21754d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne if (RegNo > 11) 21854d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return MCDisassembler::Fail; 21954d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne unsigned Reg = getReg(Decoder, XCore::GRRegsRegClassID, RegNo); 22054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne Inst.addOperand(MCOperand::CreateReg(Reg)); 22154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return MCDisassembler::Success; 222881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne} 223881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 224c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osbornestatic DecodeStatus DecodeRRegsRegisterClass(MCInst &Inst, 225c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne unsigned RegNo, 226c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne uint64_t Address, 227c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne const void *Decoder) 228c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne{ 229c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne if (RegNo > 15) 230c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne return MCDisassembler::Fail; 231c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne unsigned Reg = getReg(Decoder, XCore::RRegsRegClassID, RegNo); 232c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne Inst.addOperand(MCOperand::CreateReg(Reg)); 233c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne return MCDisassembler::Success; 234c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne} 235c6ff29713d69b4a41c225cbde9c82e4a350dbfacRichard Osborne 23635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus DecodeBitpOperand(MCInst &Inst, unsigned Val, 23735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne uint64_t Address, const void *Decoder) { 23835150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne if (Val > 11) 23935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne return MCDisassembler::Fail; 24035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne static unsigned Values[] = { 24135150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 32 /*bpw*/, 1, 2, 3, 4, 5, 6, 7, 8, 16, 24, 32 24235150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne }; 24335150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne Inst.addOperand(MCOperand::CreateImm(Values[Val])); 24435150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne return MCDisassembler::Success; 24535150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne} 24635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 2471114b0ec15aaa22dfc0ce582820cea556600d103Richard Osbornestatic DecodeStatus DecodeNegImmOperand(MCInst &Inst, unsigned Val, 2481114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne uint64_t Address, const void *Decoder) { 2491114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne Inst.addOperand(MCOperand::CreateImm(-(int64_t)Val)); 2501114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne return MCDisassembler::Success; 2511114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne} 2521114b0ec15aaa22dfc0ce582820cea556600d103Richard Osborne 2531ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus 2541ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard OsborneDecode2OpInstruction(unsigned Insn, unsigned &Op1, unsigned &Op2) { 25562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Combined = fieldFromInstruction(Insn, 6, 5); 25662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (Combined < 27) 2571ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne return MCDisassembler::Fail; 25862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (fieldFromInstruction(Insn, 5, 1)) { 25962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (Combined == 31) 26062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return MCDisassembler::Fail; 26162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Combined += 5; 26262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne } 26362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Combined -= 27; 2641ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne unsigned Op1High = Combined % 3; 2651ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne unsigned Op2High = Combined / 3; 2661ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne Op1 = (Op1High << 2) | fieldFromInstruction(Insn, 2, 2); 2671ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne Op2 = (Op2High << 2) | fieldFromInstruction(Insn, 0, 2); 2681ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne return MCDisassembler::Success; 2691ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne} 2701ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 2711ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus 27262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard OsborneDecode3OpInstruction(unsigned Insn, unsigned &Op1, unsigned &Op2, 27362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned &Op3) { 27462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Combined = fieldFromInstruction(Insn, 6, 5); 27562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (Combined >= 27) 27662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return MCDisassembler::Fail; 27762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 27862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Op1High = Combined % 3; 27962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Op2High = (Combined / 3) % 3; 28062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Op3High = Combined / 9; 28162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Op1 = (Op1High << 2) | fieldFromInstruction(Insn, 4, 2); 28262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Op2 = (Op2High << 2) | fieldFromInstruction(Insn, 2, 2); 28362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Op3 = (Op3High << 2) | fieldFromInstruction(Insn, 0, 2); 28462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return MCDisassembler::Success; 28562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne} 28662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 28762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osbornestatic DecodeStatus 28862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard OsborneDecode2OpInstructionFail(MCInst &Inst, unsigned Insn, uint64_t Address, 28962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne const void *Decoder) { 29062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne // Try and decode as a 3R instruction. 29162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Opcode = fieldFromInstruction(Insn, 11, 5); 29262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne switch (Opcode) { 293a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x0: 294a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::STW_2rus); 295a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSInstruction(Inst, Insn, Address, Decoder); 296a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x1: 297a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::LDW_2rus); 298a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSInstruction(Inst, Insn, Address, Decoder); 29962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x2: 30062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::ADD_3r); 30162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 30262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x3: 30362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::SUB_3r); 30462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 30562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x4: 30662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::SHL_3r); 30762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 30862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x5: 30962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::SHR_3r); 31062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 31162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x6: 31262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::EQ_3r); 31362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 31462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x7: 31562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::AND_3r); 31662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 31762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x8: 31862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::OR_3r); 31962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 32062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x9: 32162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::LDW_3r); 32262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 32362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x10: 32462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::LD16S_3r); 32562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 32662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x11: 32762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::LD8U_3r); 32862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 329a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x12: 330a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::ADD_2rus); 331a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSInstruction(Inst, Insn, Address, Decoder); 332a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x13: 333a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::SUB_2rus); 334a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSInstruction(Inst, Insn, Address, Decoder); 335a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x14: 336a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::SHL_2rus); 337a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSBitpInstruction(Inst, Insn, Address, Decoder); 338a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x15: 339a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::SHR_2rus); 340a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSBitpInstruction(Inst, Insn, Address, Decoder); 341a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne case 0x16: 342a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.setOpcode(XCore::EQ_2rus); 343a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return Decode2RUSInstruction(Inst, Insn, Address, Decoder); 344763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne case 0x17: 345763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne Inst.setOpcode(XCore::TSETR_3r); 346763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne return Decode3RImmInstruction(Inst, Insn, Address, Decoder); 34762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x18: 34862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::LSS_3r); 34962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 35062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne case 0x19: 35162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.setOpcode(XCore::LSU_3r); 35262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode3RInstruction(Inst, Insn, Address, Decoder); 35362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne } 35462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return MCDisassembler::Fail; 35562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne} 35662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 35762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osbornestatic DecodeStatus 3581ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard OsborneDecode2RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 3591ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder) { 3601ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne unsigned Op1, Op2; 3611ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 36262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 36362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 36462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 36562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 36662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 3671ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne return S; 3681ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne} 3691ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 3701ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus 3718dc741e400213ea8183e09626f0d1f45f14e044fRichard OsborneDecode2RImmInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 3728dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne const void *Decoder) { 3738dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne unsigned Op1, Op2; 3748dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 3758dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne if (S != MCDisassembler::Success) 3768dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 3778dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne 3788dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne Inst.addOperand(MCOperand::CreateImm(Op1)); 3798dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 3808dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne return S; 3818dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne} 3828dc741e400213ea8183e09626f0d1f45f14e044fRichard Osborne 3838dc741e400213ea8183e09626f0d1f45f14e044fRichard Osbornestatic DecodeStatus 3841ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard OsborneDecodeR2RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 3851ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder) { 3861ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne unsigned Op1, Op2; 3871ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op2, Op1); 38862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 38962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 39062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 39162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 39262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 3931ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne return S; 3941ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne} 3951ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 3961ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osbornestatic DecodeStatus 3971ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard OsborneDecode2RSrcDstInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 3981ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne const void *Decoder) { 3991ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne unsigned Op1, Op2; 4001ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 40162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 40262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 40362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 40462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 40562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 40662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 4071ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne return S; 4081ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne} 4091ffe48a84b398e8cebbdc7a47bedb57e1e67e63fRichard Osborne 41035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus 41135150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard OsborneDecodeRUSInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 41235150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder) { 41335150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Op1, Op2; 41435150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 41562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 41662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 41762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 41862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 41962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne Inst.addOperand(MCOperand::CreateImm(Op2)); 42035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne return S; 42135150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne} 42235150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 42335150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus 42435150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard OsborneDecodeRUSBitpInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 42535150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder) { 42635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Op1, Op2; 42735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 42862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 42962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 43062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 43162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 43262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeBitpOperand(Inst, Op2, Address, Decoder); 43335150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne return S; 43435150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne} 43535150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 43635150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osbornestatic DecodeStatus 43735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard OsborneDecodeRUSSrcDstBitpInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 43835150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne const void *Decoder) { 43935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne unsigned Op1, Op2; 44035150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne DecodeStatus S = Decode2OpInstruction(Insn, Op1, Op2); 44162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S != MCDisassembler::Success) 44262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return Decode2OpInstructionFail(Inst, Insn, Address, Decoder); 44362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 44462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 44562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 44662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeBitpOperand(Inst, Op2, Address, Decoder); 44735150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne return S; 44835150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne} 44935150cbf4166ae8d69032d355f1e8d83b4a6eb3cRichard Osborne 450c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osbornestatic DecodeStatus 451c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard OsborneDecodeL2OpInstructionFail(MCInst &Inst, unsigned Insn, uint64_t Address, 452c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne const void *Decoder) { 453b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne // Try and decode as a L3R / L2RUS instruction. 454c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne unsigned Opcode = fieldFromInstruction(Insn, 16, 4) | 455c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne fieldFromInstruction(Insn, 27, 5) << 4; 456c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne switch (Opcode) { 457c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x0c: 4581f375e5bc78647f9b29564eafdc907250ccd91edRichard Osborne Inst.setOpcode(XCore::STW_l3r); 459c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 460c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x1c: 461c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::XOR_l3r); 462c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 463c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x2c: 464c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::ASHR_l3r); 465c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 466c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x3c: 467c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::LDAWF_l3r); 468c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 469c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x4c: 470c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::LDAWB_l3r); 471c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 472c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x5c: 473c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::LDA16F_l3r); 474c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 475c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x6c: 476c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::LDA16B_l3r); 477c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 478c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x7c: 479c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::MUL_l3r); 480c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 481c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x8c: 482c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::DIVS_l3r); 483c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 484c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x9c: 485c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::DIVU_l3r); 486c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 487c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x10c: 488c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::ST16_l3r); 489c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 490c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x11c: 491c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::ST8_l3r); 492c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 493b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne case 0x12c: 494b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Inst.setOpcode(XCore::ASHR_l2rus); 495b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne return DecodeL2RUSBitpInstruction(Inst, Insn, Address, Decoder); 496970a479c02a418726950580e13136acd2a2dc13fRichard Osborne case 0x12d: 497970a479c02a418726950580e13136acd2a2dc13fRichard Osborne Inst.setOpcode(XCore::OUTPW_l2rus); 498970a479c02a418726950580e13136acd2a2dc13fRichard Osborne return DecodeL2RUSBitpInstruction(Inst, Insn, Address, Decoder); 499970a479c02a418726950580e13136acd2a2dc13fRichard Osborne case 0x12e: 500970a479c02a418726950580e13136acd2a2dc13fRichard Osborne Inst.setOpcode(XCore::INPW_l2rus); 501970a479c02a418726950580e13136acd2a2dc13fRichard Osborne return DecodeL2RUSBitpInstruction(Inst, Insn, Address, Decoder); 502b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne case 0x13c: 503b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Inst.setOpcode(XCore::LDAWF_l2rus); 504b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne return DecodeL2RUSInstruction(Inst, Insn, Address, Decoder); 505b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne case 0x14c: 506b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Inst.setOpcode(XCore::LDAWB_l2rus); 507b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne return DecodeL2RUSInstruction(Inst, Insn, Address, Decoder); 508c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x15c: 509c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::CRC_l3r); 510c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RSrcDstInstruction(Inst, Insn, Address, Decoder); 511c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x18c: 512c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::REMS_l3r); 513c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 514c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne case 0x19c: 515c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Inst.setOpcode(XCore::REMU_l3r); 516c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL3RInstruction(Inst, Insn, Address, Decoder); 517c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne } 518c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return MCDisassembler::Fail; 519c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne} 520c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 521c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osbornestatic DecodeStatus 522c47793c62c434bd27fee1d243c2081a34d4f3817Richard OsborneDecodeL2RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 523c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne const void *Decoder) { 524c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne unsigned Op1, Op2; 525c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne DecodeStatus S = Decode2OpInstruction(fieldFromInstruction(Insn, 0, 16), 526c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne Op1, Op2); 527c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne if (S != MCDisassembler::Success) 528c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL2OpInstructionFail(Inst, Insn, Address, Decoder); 529c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 530c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 531c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 532c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return S; 533c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne} 534c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 535c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osbornestatic DecodeStatus 536c47793c62c434bd27fee1d243c2081a34d4f3817Richard OsborneDecodeLR2RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 537c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne const void *Decoder) { 538c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne unsigned Op1, Op2; 539c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne DecodeStatus S = Decode2OpInstruction(fieldFromInstruction(Insn, 0, 16), 540c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne Op1, Op2); 541c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne if (S != MCDisassembler::Success) 542c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return DecodeL2OpInstructionFail(Inst, Insn, Address, Decoder); 543c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 544c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 545c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 546c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return S; 547c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne} 548c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 54962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osbornestatic DecodeStatus 55062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard OsborneDecode3RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 55162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne const void *Decoder) { 55262b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne unsigned Op1, Op2, Op3; 55362b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeStatus S = Decode3OpInstruction(Insn, Op1, Op2, Op3); 55462b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne if (S == MCDisassembler::Success) { 55562b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 55662b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 55762b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 55862b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne } 55962b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne return S; 56062b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne} 56162b8786d12ceacafd665d4a1fbb6e90af0ec368cRichard Osborne 562a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osbornestatic DecodeStatus 563763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard OsborneDecode3RImmInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 564763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne const void *Decoder) { 565763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne unsigned Op1, Op2, Op3; 566763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne DecodeStatus S = Decode3OpInstruction(Insn, Op1, Op2, Op3); 567763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne if (S == MCDisassembler::Success) { 568763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne Inst.addOperand(MCOperand::CreateImm(Op1)); 569763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 570763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 571763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne } 572763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne return S; 573763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne} 574763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osborne 575763c858edeb76173ee4ef5ab9bf7d750db5d8c4fRichard Osbornestatic DecodeStatus 576a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard OsborneDecode2RUSInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 577a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne const void *Decoder) { 578a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne unsigned Op1, Op2, Op3; 579a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeStatus S = Decode3OpInstruction(Insn, Op1, Op2, Op3); 580a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne if (S == MCDisassembler::Success) { 581a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 582a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 583a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne Inst.addOperand(MCOperand::CreateImm(Op3)); 584a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne } 585a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return S; 586a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne} 587a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne 588a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osbornestatic DecodeStatus 589a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard OsborneDecode2RUSBitpInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 590a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne const void *Decoder) { 591a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne unsigned Op1, Op2, Op3; 592a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeStatus S = Decode3OpInstruction(Insn, Op1, Op2, Op3); 593a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne if (S == MCDisassembler::Success) { 594a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 595a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 596a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne DecodeBitpOperand(Inst, Op3, Address, Decoder); 597a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne } 598a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne return S; 599a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne} 600a68c64fbb2f1bee7f9313f3ee19c35677563f974Richard Osborne 601c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osbornestatic DecodeStatus 602c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard OsborneDecodeL3RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 603c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne const void *Decoder) { 604c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne unsigned Op1, Op2, Op3; 605c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeStatus S = 606c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 607c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne if (S == MCDisassembler::Success) { 608c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 609c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 610c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 611c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne } 612c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return S; 613c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne} 614c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 615c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osbornestatic DecodeStatus 616c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard OsborneDecodeL3RSrcDstInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 617c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne const void *Decoder) { 618c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne unsigned Op1, Op2, Op3; 619c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeStatus S = 620c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 621c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne if (S == MCDisassembler::Success) { 622c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 623c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 624c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 625c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 626c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne } 627c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne return S; 628c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne} 629c78ec6b6bc05572aed6af1eee4349d76a68ded18Richard Osborne 630b853c415c663c752c669cb191cea95542c1d21f6Richard Osbornestatic DecodeStatus 631b853c415c663c752c669cb191cea95542c1d21f6Richard OsborneDecodeL2RUSInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 632b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne const void *Decoder) { 633b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne unsigned Op1, Op2, Op3; 634b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeStatus S = 635b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 636b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne if (S == MCDisassembler::Success) { 637b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 638b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 639b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Inst.addOperand(MCOperand::CreateImm(Op3)); 640b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne } 641b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne return S; 642b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne} 643b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne 644b853c415c663c752c669cb191cea95542c1d21f6Richard Osbornestatic DecodeStatus 645b853c415c663c752c669cb191cea95542c1d21f6Richard OsborneDecodeL2RUSBitpInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 646b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne const void *Decoder) { 647b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne unsigned Op1, Op2, Op3; 648b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeStatus S = 649b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 650b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne if (S == MCDisassembler::Success) { 651b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 652b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 653b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne DecodeBitpOperand(Inst, Op3, Address, Decoder); 654b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne } 655b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne return S; 656b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne} 657b853c415c663c752c669cb191cea95542c1d21f6Richard Osborne 6589e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osbornestatic DecodeStatus 6599e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard OsborneDecodeL6RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 6609e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne const void *Decoder) { 6619e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne unsigned Op1, Op2, Op3, Op4, Op5, Op6; 6629e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeStatus S = 6639e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 6649e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne if (S != MCDisassembler::Success) 6659e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne return S; 6669e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne S = Decode3OpInstruction(fieldFromInstruction(Insn, 16, 16), Op4, Op5, Op6); 6679e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne if (S != MCDisassembler::Success) 6689e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne return S; 6699e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 6709e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 6719e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 6729e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 6739e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op5, Address, Decoder); 6749e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne DecodeGRRegsRegisterClass(Inst, Op6, Address, Decoder); 6759e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne return S; 6769e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne} 6779e6a5a37460ff82ad4e3a7aea1c45e2c934ab25bRichard Osborne 6783b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osbornestatic DecodeStatus 6793b6a5eefe0ab2199bc69094b390b736ae332b905Richard OsborneDecodeL5RInstructionFail(MCInst &Inst, unsigned Insn, uint64_t Address, 6803b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne const void *Decoder) { 6813b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne // Try and decode as a L6R instruction. 6823b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne Inst.clear(); 6833b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne unsigned Opcode = fieldFromInstruction(Insn, 27, 5); 6843b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne switch (Opcode) { 6853b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne case 0x00: 6863b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne Inst.setOpcode(XCore::LMUL_l6r); 6873b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne return DecodeL6RInstruction(Inst, Insn, Address, Decoder); 6883b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne } 6893b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne return MCDisassembler::Fail; 6903b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne} 6913b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne 6923b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osbornestatic DecodeStatus 6933b6a5eefe0ab2199bc69094b390b736ae332b905Richard OsborneDecodeL5RInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 6943b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne const void *Decoder) { 6953b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne unsigned Op1, Op2, Op3, Op4, Op5; 6963b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeStatus S = 6973b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 6983b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne if (S != MCDisassembler::Success) 6993b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne return DecodeL5RInstructionFail(Inst, Insn, Address, Decoder); 7003b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne S = Decode2OpInstruction(fieldFromInstruction(Insn, 16, 16), Op4, Op5); 7013b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne if (S != MCDisassembler::Success) 7023b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne return DecodeL5RInstructionFail(Inst, Insn, Address, Decoder); 7033b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne 7043b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 7053b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 7063b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 7073b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 7083b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne DecodeGRRegsRegisterClass(Inst, Op5, Address, Decoder); 7093b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne return S; 7103b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne} 7113b6a5eefe0ab2199bc69094b390b736ae332b905Richard Osborne 712c47bd9899b639c3384268f871009259c2a94fba4Richard Osbornestatic DecodeStatus 713c47bd9899b639c3384268f871009259c2a94fba4Richard OsborneDecodeL4RSrcDstInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 714c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne const void *Decoder) { 715c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Op1, Op2, Op3; 716c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Op4 = fieldFromInstruction(Insn, 16, 4); 717c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeStatus S = 718c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 719c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne if (S == MCDisassembler::Success) { 720c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 721c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne S = DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 722c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne } 723c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne if (S == MCDisassembler::Success) { 724c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 725c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 726c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 727c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne } 728c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne return S; 729c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne} 730c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne 731c47bd9899b639c3384268f871009259c2a94fba4Richard Osbornestatic DecodeStatus 732c47bd9899b639c3384268f871009259c2a94fba4Richard OsborneDecodeL4RSrcDstSrcDstInstruction(MCInst &Inst, unsigned Insn, uint64_t Address, 733c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne const void *Decoder) { 734c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Op1, Op2, Op3; 735c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne unsigned Op4 = fieldFromInstruction(Insn, 16, 4); 736c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeStatus S = 737c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne Decode3OpInstruction(fieldFromInstruction(Insn, 0, 16), Op1, Op2, Op3); 738c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne if (S == MCDisassembler::Success) { 739c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 740c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne S = DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 741c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne } 742c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne if (S == MCDisassembler::Success) { 743c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op1, Address, Decoder); 744c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op4, Address, Decoder); 745c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op2, Address, Decoder); 746c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne DecodeGRRegsRegisterClass(Inst, Op3, Address, Decoder); 747c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne } 748c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne return S; 749c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne} 750c47bd9899b639c3384268f871009259c2a94fba4Richard Osborne 751881e3cca66c64a57ff431a4f6d1136dd6017c137Richard OsborneMCDisassembler::DecodeStatus 752881e3cca66c64a57ff431a4f6d1136dd6017c137Richard OsborneXCoreDisassembler::getInstruction(MCInst &instr, 753881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne uint64_t &Size, 754881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne const MemoryObject &Region, 755881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne uint64_t Address, 756881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne raw_ostream &vStream, 757881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne raw_ostream &cStream) const { 758c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint16_t insn16; 75954d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 760c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne if (!readInstruction16(Region, Address, Size, insn16)) { 76154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return Fail; 76254d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne } 76354d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 76454d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne // Calling the auto-generated decoder function. 765c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne DecodeStatus Result = decodeInstruction(DecoderTable16, instr, insn16, 766c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne Address, this, STI); 76754d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne if (Result != Fail) { 76854d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne Size = 2; 76954d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne return Result; 77054d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne } 77154d6266e9baa8c2796c4a95c35897b5c67d8d910Richard Osborne 772c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne uint32_t insn32; 773c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 774c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne if (!readInstruction32(Region, Address, Size, insn32)) { 775c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return Fail; 776c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne } 777c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 778c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne // Calling the auto-generated decoder function. 779c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne Result = decodeInstruction(DecoderTable32, instr, insn32, Address, this, STI); 780c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne if (Result != Fail) { 781c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne Size = 4; 782c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne return Result; 783c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne } 784c47793c62c434bd27fee1d243c2081a34d4f3817Richard Osborne 785881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne return Fail; 786881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne} 787881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 788881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osbornenamespace llvm { 789881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne extern Target TheXCoreTarget; 790881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne} 791881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 792881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osbornestatic MCDisassembler *createXCoreDisassembler(const Target &T, 793dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCSubtargetInfo &STI, 794dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines MCContext &Ctx) { 795dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return new XCoreDisassembler(STI, Ctx); 796881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne} 797881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne 798881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborneextern "C" void LLVMInitializeXCoreDisassembler() { 799881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne // Register the disassembler. 800881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne TargetRegistry::RegisterMCDisassembler(TheXCoreTarget, 801881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne createXCoreDisassembler); 802881e3cca66c64a57ff431a4f6d1136dd6017c137Richard Osborne} 803