1 // Copyright (c) 2012- PPSSPP Project. 2 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, version 2.0 or later versions. 6 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License 2.0 for more details. 11 12 // A copy of the GPL 2.0 should have been included with the program. 13 // If not, see http://www.gnu.org/licenses/ 14 15 // Official git repository and contact information can be found at 16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. 17 18 #pragma once 19 20 #include <cstdint> 21 22 // This stuff used to only disassemble very old ARM but has now 23 // been extended to support most (but not all) modern instructions, including NEON. 24 25 // Disarm itself has the license you can see in the cpp file. 26 // I'm not entirely sure it's 100% gpl compatible but it's nearly 27 // public domain so meh. 28 29 const char *ArmRegName(int r); 30 void ArmDis(unsigned int addr, unsigned int w, char *output, int bufsize, bool includeWord); 31 32 // Information about a load/store instruction. 33 struct ArmLSInstructionInfo { 34 int instructionSize; 35 36 bool isIntegerLoadStore; 37 bool isFPLoadStore; 38 bool isMultiLoadStore; 39 40 int size; // 0 = 8-bit, 1 = 16-bit, 2 = 32-bit, 3 = 64-bit 41 bool isMemoryWrite; 42 43 int Rt; 44 int Rn; 45 int Rm; 46 47 // TODO: more. 48 }; 49 50 bool ArmAnalyzeLoadStore(uint32_t addr, uint32_t op, ArmLSInstructionInfo *info); 51