diff options
Diffstat (limited to 'emulator/qtools/opcode.h')
| -rw-r--r-- | emulator/qtools/opcode.h | 166 | 
1 files changed, 0 insertions, 166 deletions
| diff --git a/emulator/qtools/opcode.h b/emulator/qtools/opcode.h deleted file mode 100644 index c8b67a6..0000000 --- a/emulator/qtools/opcode.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2006 The Android Open Source Project - -#ifndef OPCODE_H -#define OPCODE_H - -#include <inttypes.h> - -// Note: this list of opcodes must match the list used to initialize -// the opflags[] array in opcode.cpp. -enum Opcode { -    OP_INVALID, -    OP_UNDEFINED, -    OP_ADC, -    OP_ADD, -    OP_AND, -    OP_B, -    OP_BL, -    OP_BIC, -    OP_BKPT, -    OP_BLX, -    OP_BX, -    OP_CDP, -    OP_CLZ, -    OP_CMN, -    OP_CMP, -    OP_EOR, -    OP_LDC, -    OP_LDM, -    OP_LDR, -    OP_LDRB, -    OP_LDRBT, -    OP_LDRH, -    OP_LDRSB, -    OP_LDRSH, -    OP_LDRT, -    OP_MCR, -    OP_MLA, -    OP_MOV, -    OP_MRC, -    OP_MRS, -    OP_MSR, -    OP_MUL, -    OP_MVN, -    OP_ORR, -    OP_PLD, -    OP_RSB, -    OP_RSC, -    OP_SBC, -    OP_SMLAL, -    OP_SMULL, -    OP_STC, -    OP_STM, -    OP_STR, -    OP_STRB, -    OP_STRBT, -    OP_STRH, -    OP_STRT, -    OP_SUB, -    OP_SWI, -    OP_SWP, -    OP_SWPB, -    OP_TEQ, -    OP_TST, -    OP_UMLAL, -    OP_UMULL, - -    // Define thumb opcodes -    OP_THUMB_UNDEFINED, -    OP_THUMB_ADC, -    OP_THUMB_ADD, -    OP_THUMB_AND, -    OP_THUMB_ASR, -    OP_THUMB_B, -    OP_THUMB_BIC, -    OP_THUMB_BKPT, -    OP_THUMB_BL, -    OP_THUMB_BLX, -    OP_THUMB_BX, -    OP_THUMB_CMN, -    OP_THUMB_CMP, -    OP_THUMB_EOR, -    OP_THUMB_LDMIA, -    OP_THUMB_LDR, -    OP_THUMB_LDRB, -    OP_THUMB_LDRH, -    OP_THUMB_LDRSB, -    OP_THUMB_LDRSH, -    OP_THUMB_LSL, -    OP_THUMB_LSR, -    OP_THUMB_MOV, -    OP_THUMB_MUL, -    OP_THUMB_MVN, -    OP_THUMB_NEG, -    OP_THUMB_ORR, -    OP_THUMB_POP, -    OP_THUMB_PUSH, -    OP_THUMB_ROR, -    OP_THUMB_SBC, -    OP_THUMB_STMIA, -    OP_THUMB_STR, -    OP_THUMB_STRB, -    OP_THUMB_STRH, -    OP_THUMB_SUB, -    OP_THUMB_SWI, -    OP_THUMB_TST, - -    OP_END                // must be last -}; - -extern uint32_t opcode_flags[]; -extern const char *opcode_names[]; - -// Define bit flags for the opcode categories -static const uint32_t kCatByte          = 0x0001; -static const uint32_t kCatHalf          = 0x0002; -static const uint32_t kCatWord          = 0x0004; -static const uint32_t kCatLong          = 0x0008; -static const uint32_t kCatNumBytes      = (kCatByte | kCatHalf | kCatWord | kCatLong); -static const uint32_t kCatMultiple      = 0x0010; -static const uint32_t kCatSigned        = 0x0020; -static const uint32_t kCatLoad          = 0x0040; -static const uint32_t kCatStore         = 0x0080; -static const uint32_t kCatMemoryRef     = (kCatLoad | kCatStore); -static const uint32_t kCatAlu           = 0x0100; -static const uint32_t kCatBranch        = 0x0200; -static const uint32_t kCatBranchLink    = 0x0400; -static const uint32_t kCatBranchExch    = 0x0800; -static const uint32_t kCatCoproc        = 0x1000; -static const uint32_t kCatLoadMultiple  = (kCatLoad | kCatMultiple); -static const uint32_t kCatStoreMultiple = (kCatStore | kCatMultiple); - -inline bool isALU(Opcode op)    { return (opcode_flags[op] & kCatAlu) != 0; } -inline bool isBranch(Opcode op) { return (opcode_flags[op] & kCatBranch) != 0; } -inline bool isBranchLink(Opcode op) { -    return (opcode_flags[op] & kCatBranchLink) != 0; -} -inline bool isBranchExch(Opcode op) { -    return (opcode_flags[op] & kCatBranchExch) != 0; -} -inline bool isLoad(Opcode op)   { return (opcode_flags[op] & kCatLoad) != 0; } -inline bool isLoadMultiple(Opcode op) { -    return (opcode_flags[op] & kCatLoadMultiple) == kCatLoadMultiple; -} -inline bool isStoreMultiple(Opcode op) { -    return (opcode_flags[op] & kCatStoreMultiple) == kCatStoreMultiple; -} -inline bool isStore(Opcode op)  { return (opcode_flags[op] & kCatStore) != 0; } -inline bool isSigned(Opcode op) { return (opcode_flags[op] & kCatSigned) != 0; } -inline bool isMemoryRef(Opcode op) { -    return (opcode_flags[op] & kCatMemoryRef) != 0; -} -inline int getAccessSize(Opcode op) { return opcode_flags[op] & kCatNumBytes; } -inline bool isCoproc(Opcode op) { return (opcode_flags[op] & kCatCoproc) != 0; } -inline int getNumAccesses(Opcode op, uint32_t binary) { -  extern int num_one_bits[]; -  int num_accesses = 0; -  if (opcode_flags[op] & kCatNumBytes) -    num_accesses = 1; -  else if (opcode_flags[op] & kCatMultiple) { -    num_accesses = num_one_bits[(binary >> 8) & 0xff] -                   + num_one_bits[binary & 0xff]; -  } -  return num_accesses; -} - -#endif  // OPCODE_H | 
