mirror of https://github.com/mgba-emu/mgba.git
Extract emittor macros into headers
This commit is contained in:
parent
66d1c0c55c
commit
5d19919df2
|
@ -0,0 +1,82 @@
|
|||
#ifndef EMITTER_INLINES_H
|
||||
#define EMITTER_INLINES_H
|
||||
|
||||
#define DO_4(DIRECTIVE) \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE
|
||||
|
||||
#define DO_8(DIRECTIVE) \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE
|
||||
|
||||
#define DO_256(DIRECTIVE) \
|
||||
DO_4(DO_8(DO_8(DIRECTIVE)))
|
||||
|
||||
#define DO_INTERLACE(LEFT, RIGHT) \
|
||||
LEFT, \
|
||||
RIGHT
|
||||
|
||||
#define APPLY(F, ...) F(__VA_ARGS__)
|
||||
|
||||
#define COUNT_1(EMITTER, PREFIX, ...) \
|
||||
EMITTER(PREFIX ## 0, 0, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1, 1, __VA_ARGS__)
|
||||
|
||||
#define COUNT_2(EMITTER, PREFIX, ...) \
|
||||
COUNT_1(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 2, 2, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 3, 3, __VA_ARGS__)
|
||||
|
||||
#define COUNT_3(EMITTER, PREFIX, ...) \
|
||||
COUNT_2(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 4, 4, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 5, 5, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 6, 6, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 7, 7, __VA_ARGS__)
|
||||
|
||||
#define COUNT_4(EMITTER, PREFIX, ...) \
|
||||
COUNT_3(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 8, 8, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 9, 9, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## A, 10, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## B, 11, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## C, 12, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## D, 13, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## E, 14, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## F, 15, __VA_ARGS__)
|
||||
|
||||
#define COUNT_5(EMITTER, PREFIX, ...) \
|
||||
COUNT_4(EMITTER, PREFIX ## 0, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 10, 16, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 11, 17, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 12, 18, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 13, 19, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 14, 20, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 15, 21, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 16, 22, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 17, 23, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 18, 24, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 19, 25, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1A, 26, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1B, 27, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1C, 28, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1D, 29, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1E, 30, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1F, 31, __VA_ARGS__) \
|
||||
|
||||
#define DUMMY(X, ...) X,
|
||||
#define DUMMY_4(...) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,108 @@
|
|||
#ifndef EMITTER_THUMB_H
|
||||
#define EMITTER_THUMB_H
|
||||
|
||||
#include "emitter-inlines.h"
|
||||
|
||||
#define DECLARE_INSTRUCTION_THUMB(EMITTER, NAME) \
|
||||
EMITTER ## NAME
|
||||
|
||||
#define DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, NAME) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 00), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 01), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 10), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 11)
|
||||
|
||||
#define DECLARE_THUMB_EMITTER_BLOCK(EMITTER) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LSL1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LSR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ASR1_)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD1_)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB1_)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, MOV1_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, CMP1_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD2_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB2_R)) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, AND), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, EOR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, LSL2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, LSR2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ASR2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SBC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ROR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, TST), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NEG), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, CMP2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, CMN), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ORR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, MUL), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BIC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, MVN), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, ADD4), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, CMP3), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, MOV3), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BX), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BX), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ILL), \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STR2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRH2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRB2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRSB_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRH2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRB2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRSH_R)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRB1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRB1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRH1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRH1_)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, STR3_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR4_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD5_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD6_R)) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADD7), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADD7), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SUB4), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SUB4), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, PUSH)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, PUSHR)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, POP)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, POPR)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BKPT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, STMIA_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDMIA_R)) \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BEQ)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BNE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BCS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BCC)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BMI)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BPL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BVS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BVC)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BHI)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BGE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BGT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, SWI)), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, B))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BL1))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BL2))) \
|
||||
|
||||
#endif
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "arm.h"
|
||||
#include "isa-inlines.h"
|
||||
#include "emitter-inlines.h"
|
||||
|
||||
enum {
|
||||
PSR_USER_MASK = 0xF0000000,
|
||||
|
|
|
@ -5,29 +5,6 @@
|
|||
|
||||
#define UNUSED(V) (void)(V)
|
||||
|
||||
#define DO_4(DIRECTIVE) \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE
|
||||
|
||||
#define DO_8(DIRECTIVE) \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE, \
|
||||
DIRECTIVE
|
||||
|
||||
#define DO_256(DIRECTIVE) \
|
||||
DO_4(DO_8(DO_8(DIRECTIVE)))
|
||||
|
||||
#define DO_INTERLACE(LEFT, RIGHT) \
|
||||
LEFT, \
|
||||
RIGHT
|
||||
|
||||
#define ARM_COND_EQ (cpu->cpsr.z)
|
||||
#define ARM_COND_NE (!cpu->cpsr.z)
|
||||
#define ARM_COND_CS (cpu->cpsr.c)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "isa-thumb.h"
|
||||
|
||||
#include "isa-inlines.h"
|
||||
#include "emitter-thumb.h"
|
||||
|
||||
// Instruction definitions
|
||||
// Beware pre-processor insanity
|
||||
|
@ -38,54 +39,6 @@
|
|||
#define THUMB_STORE_POST_BODY \
|
||||
currentCycles += cpu->memory->activeNonseqCycles16 - cpu->memory->activePrefetchCycles16;
|
||||
|
||||
#define APPLY(F, ...) F(__VA_ARGS__)
|
||||
|
||||
#define COUNT_1(EMITTER, PREFIX, ...) \
|
||||
EMITTER(PREFIX ## 0, 0, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1, 1, __VA_ARGS__)
|
||||
|
||||
#define COUNT_2(EMITTER, PREFIX, ...) \
|
||||
COUNT_1(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 2, 2, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 3, 3, __VA_ARGS__)
|
||||
|
||||
#define COUNT_3(EMITTER, PREFIX, ...) \
|
||||
COUNT_2(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 4, 4, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 5, 5, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 6, 6, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 7, 7, __VA_ARGS__)
|
||||
|
||||
#define COUNT_4(EMITTER, PREFIX, ...) \
|
||||
COUNT_3(EMITTER, PREFIX, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 8, 8, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 9, 9, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## A, 10, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## B, 11, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## C, 12, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## D, 13, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## E, 14, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## F, 15, __VA_ARGS__)
|
||||
|
||||
#define COUNT_5(EMITTER, PREFIX, ...) \
|
||||
COUNT_4(EMITTER, PREFIX ## 0, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 10, 16, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 11, 17, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 12, 18, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 13, 19, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 14, 20, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 15, 21, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 16, 22, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 17, 23, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 18, 24, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 19, 25, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1A, 26, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1B, 27, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1C, 28, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1D, 29, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1E, 30, __VA_ARGS__) \
|
||||
EMITTER(PREFIX ## 1F, 31, __VA_ARGS__) \
|
||||
|
||||
#define DEFINE_INSTRUCTION_THUMB(NAME, BODY) \
|
||||
static void _ThumbInstruction ## NAME (struct ARMCore* cpu, uint16_t opcode) { \
|
||||
int currentCycles = THUMB_PREFETCH_CYCLES; \
|
||||
|
@ -471,115 +424,6 @@ DEFINE_INSTRUCTION_THUMB(BX,
|
|||
|
||||
DEFINE_INSTRUCTION_THUMB(SWI, cpu->board->swi16(cpu->board, opcode & 0xFF))
|
||||
|
||||
#define DECLARE_INSTRUCTION_THUMB(EMITTER, NAME) \
|
||||
EMITTER ## NAME
|
||||
|
||||
#define DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, NAME) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 00), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 01), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 10), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NAME ## 11)
|
||||
|
||||
#define DUMMY(X, ...) X,
|
||||
#define DUMMY_4(...) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__) \
|
||||
DUMMY(__VA_ARGS__)
|
||||
|
||||
#define DECLARE_THUMB_EMITTER_BLOCK(EMITTER) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LSL1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LSR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ASR1_)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD1_)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB1_)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, MOV1_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, CMP1_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD2_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, SUB2_R)) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, AND), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, EOR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, LSL2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, LSR2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ASR2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SBC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ROR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, TST), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, NEG), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, CMP2), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, CMN), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ORR), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, MUL), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BIC), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, MVN), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, ADD4), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, CMP3), \
|
||||
DECLARE_INSTRUCTION_WITH_HIGH_THUMB(EMITTER, MOV3), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BX), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, BX), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ILL), \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR3_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STR2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRH2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRB2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRSB_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRH2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRB2_R)) \
|
||||
APPLY(COUNT_3, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRSH_R)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRB1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRB1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, STRH1_)) \
|
||||
APPLY(COUNT_5, DUMMY, DECLARE_INSTRUCTION_THUMB(EMITTER, LDRH1_)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, STR3_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDR4_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD5_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, ADD6_R)) \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADD7), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, ADD7), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SUB4), \
|
||||
DECLARE_INSTRUCTION_THUMB(EMITTER, SUB4), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, PUSH)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, PUSHR)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_8(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, POP)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, POPR)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BKPT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, STMIA_R)) \
|
||||
APPLY(COUNT_3, DUMMY_4, DECLARE_INSTRUCTION_THUMB(EMITTER, LDMIA_R)) \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BEQ)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BNE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BCS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BCC)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BMI)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BPL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BVS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BVC)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BHI)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLS)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BGE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BGT)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BLE)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL)), \
|
||||
DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, SWI)), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, B))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, ILL))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BL1))), \
|
||||
DO_8(DO_4(DECLARE_INSTRUCTION_THUMB(EMITTER, BL2)))
|
||||
|
||||
const ThumbInstruction _thumbTable[0x400] = {
|
||||
DECLARE_THUMB_EMITTER_BLOCK(_ThumbInstruction)
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue