mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 04:24:00 +00:00
Don't provide two different definitions of ModRMDecision, OpcodeDecision, and ContextDecision in different source files (depending on #define magic).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -22,6 +22,29 @@
|
|||||||
|
|
||||||
using namespace llvm::X86Disassembler;
|
using namespace llvm::X86Disassembler;
|
||||||
|
|
||||||
|
/// Specifies whether a ModR/M byte is needed and (if so) which
|
||||||
|
/// instruction each possible value of the ModR/M byte corresponds to. Once
|
||||||
|
/// this information is known, we have narrowed down to a single instruction.
|
||||||
|
struct ModRMDecision {
|
||||||
|
uint8_t modrm_type;
|
||||||
|
uint16_t instructionIDs;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Specifies which set of ModR/M->instruction tables to look at
|
||||||
|
/// given a particular opcode.
|
||||||
|
struct OpcodeDecision {
|
||||||
|
ModRMDecision modRMDecisions[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Specifies which opcode->instruction tables to look at given
|
||||||
|
/// a particular context (set of attributes). Since there are many possible
|
||||||
|
/// contexts, the decoder first uses CONTEXTS_SYM to determine which context
|
||||||
|
/// applies given a specific set of attributes. Hence there are only IC_max
|
||||||
|
/// entries in this table, rather than 2^(ATTR_max).
|
||||||
|
struct ContextDecision {
|
||||||
|
OpcodeDecision opcodeDecisions[IC_max];
|
||||||
|
};
|
||||||
|
|
||||||
#include "X86GenDisassemblerTables.inc"
|
#include "X86GenDisassemblerTables.inc"
|
||||||
|
|
||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
|
@ -16,14 +16,8 @@
|
|||||||
#ifndef X86DISASSEMBLERDECODER_H
|
#ifndef X86DISASSEMBLERDECODER_H
|
||||||
#define X86DISASSEMBLERDECODER_H
|
#define X86DISASSEMBLERDECODER_H
|
||||||
|
|
||||||
#define INSTRUCTION_IDS \
|
|
||||||
uint16_t instructionIDs;
|
|
||||||
|
|
||||||
#include "X86DisassemblerDecoderCommon.h"
|
#include "X86DisassemblerDecoderCommon.h"
|
||||||
|
|
||||||
#undef INSTRUCTION_SPECIFIER_FIELDS
|
|
||||||
#undef INSTRUCTION_IDS
|
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
namespace X86Disassembler {
|
namespace X86Disassembler {
|
||||||
|
|
||||||
|
@ -337,37 +337,6 @@ enum ModRMDecisionType {
|
|||||||
};
|
};
|
||||||
#undef ENUM_ENTRY
|
#undef ENUM_ENTRY
|
||||||
|
|
||||||
/*
|
|
||||||
* ModRMDecision - Specifies whether a ModR/M byte is needed and (if so) which
|
|
||||||
* instruction each possible value of the ModR/M byte corresponds to. Once
|
|
||||||
* this information is known, we have narrowed down to a single instruction.
|
|
||||||
*/
|
|
||||||
struct ModRMDecision {
|
|
||||||
uint8_t modrm_type;
|
|
||||||
|
|
||||||
/* The macro below must be defined wherever this file is included. */
|
|
||||||
INSTRUCTION_IDS
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* OpcodeDecision - Specifies which set of ModR/M->instruction tables to look at
|
|
||||||
* given a particular opcode.
|
|
||||||
*/
|
|
||||||
struct OpcodeDecision {
|
|
||||||
ModRMDecision modRMDecisions[256];
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ContextDecision - Specifies which opcode->instruction tables to look at given
|
|
||||||
* a particular context (set of attributes). Since there are many possible
|
|
||||||
* contexts, the decoder first uses CONTEXTS_SYM to determine which context
|
|
||||||
* applies given a specific set of attributes. Hence there are only IC_max
|
|
||||||
* entries in this table, rather than 2^(ATTR_max).
|
|
||||||
*/
|
|
||||||
struct ContextDecision {
|
|
||||||
OpcodeDecision opcodeDecisions[IC_max];
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Physical encodings of instruction operands.
|
* Physical encodings of instruction operands.
|
||||||
*/
|
*/
|
||||||
|
@ -13,14 +13,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define INSTRUCTION_IDS \
|
|
||||||
InstrUID instructionIDs[256];
|
|
||||||
|
|
||||||
#include "../../lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h"
|
#include "../../lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h"
|
||||||
|
|
||||||
#undef INSTRUCTION_SPECIFIER_FIELDS
|
|
||||||
#undef INSTRUCTION_IDS
|
|
||||||
|
|
||||||
struct InstructionSpecifier {
|
struct InstructionSpecifier {
|
||||||
llvm::X86Disassembler::OperandSpecifier operands[X86_MAX_OPERANDS];
|
llvm::X86Disassembler::OperandSpecifier operands[X86_MAX_OPERANDS];
|
||||||
llvm::X86Disassembler::InstructionContext insnContext;
|
llvm::X86Disassembler::InstructionContext insnContext;
|
||||||
@ -33,4 +27,27 @@ struct InstructionSpecifier {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Specifies whether a ModR/M byte is needed and (if so) which
|
||||||
|
/// instruction each possible value of the ModR/M byte corresponds to. Once
|
||||||
|
/// this information is known, we have narrowed down to a single instruction.
|
||||||
|
struct ModRMDecision {
|
||||||
|
uint8_t modrm_type;
|
||||||
|
llvm::X86Disassembler::InstrUID instructionIDs[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Specifies which set of ModR/M->instruction tables to look at
|
||||||
|
/// given a particular opcode.
|
||||||
|
struct OpcodeDecision {
|
||||||
|
ModRMDecision modRMDecisions[256];
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Specifies which opcode->instruction tables to look at given
|
||||||
|
/// a particular context (set of attributes). Since there are many possible
|
||||||
|
/// contexts, the decoder first uses CONTEXTS_SYM to determine which context
|
||||||
|
/// applies given a specific set of attributes. Hence there are only IC_max
|
||||||
|
/// entries in this table, rather than 2^(ATTR_max).
|
||||||
|
struct ContextDecision {
|
||||||
|
OpcodeDecision opcodeDecisions[llvm::X86Disassembler::IC_max];
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user