| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- typedef unsigned char AssemblyStep;
- enum AssemblyStepDefs
- {
- STEP_DONE = 32,
- STEP_ILLEGAL,
- STEP_REG,
- STEP_REG_PLUS_1,
- STEP_HREG,
- STEP_DREG,
- STEP_SREG,
- STEP_VMOV_IMM,
- STEP_SWPREG,
- STEP_DUMMY_REG,
- STEP_STACKREG,
- STEP_OPEQ,
- STEP_OPEQ2,
- STEP_NEXTOPN,
- STEP_DST2,
- STEP_CONSTANT,
- STEP_FCONSTANT_Z,
- STEP_T1_SETS_CR0,
- STEP_SHIFTER,
- STEP_DATA,
- STEP_LDRI,
- STEP_LDR,
- STEP_STRI,
- STEP_STR,
- STEP_OPCODE,
- STEP_HBIT,
- STEP_LABEL,
- STEP_CALL,
- STEP_CONDCOD,
- STEP_SBIT,
- STEP_AM1,
- STEP_IMM32,
- STEP_IBIT,
- STEP_IMM5_AM1,
- STEP_IMM5,
- STEP_AM,
- STEP_AM2,
- STEP_INDEXED,
- STEP_BASED,
- STEP_BASEREG,
- STEP_INDEXREG,
- STEP_STACKIMM,
- STEP_IMM12_AM2,
- STEP_AM3,
- STEP_UIMM8_AM3,
- STEP_UIMM16HS,
- STEP_AM4,
- STEP_SBZ,
- STEP_LXN,
- STEP_L24,
- STEP_INDIR,
- STEP_SYM,
- STEP_IMM_W5,
- STEP_IMM,
- STEP_IMM_H5,
- STEP_IMM_W7,
- STEP_IMM_W8,
- STEP_IMM_S8,
- STEP_IMM_DPW8,
- STEP_UIMM32,
- STEP_UIMM8,
- STEP_UIMM16,
- STEP_UIMM24,
- STEP_UIMM5,
- STEP_UIMM_WB5,
- STEP_UIMM3,
- STEP_OFFSET,
- STEP_REGLIST,
- STEP_SHIFTER_TYPE,
- STEP_SHIFTER_CONST,
- STEP_SCALE_CONST,
- STEP_FIXUP,
- STEP_LOFFSET1,
- STEP_LOFFSET2,
- STEP_VALUE,
- STEP_MULL,
- STEP_MRS,
- STEP_NAN,
- STEP_AM5,
- STEP_ZBIT,
- STEP_ACC,
- STEP_OPCODE3,
- STEP_WORD,
- STEP_COPROC,
- STEP_EXTR,
- STEP_IMM8,
- STEP_WLDRI,
- STEP_WSTRI,
- STEP_MASK,
- STEP_UIMM4,
- STEP_BIT,
- STEP_MODCONST_12,
- STEP_T2_IMM_16,
- STEP_T2_IMM_12,
- STEP_T2_SHIFT_IMM_5,
- STEP_T2_IMMSTACK_POS12_NEG8,
- STEP_NOT_CONSTANT,
- STEP_T2_CONST_SHIFT_TYPE,
- STEP_T2_CONST_SHIFT_NUM,
- STEP_T2_CONST_ROR,
- STEP_T2_CONST_ROR_NUM,
- STEP_T2_LSB,
- STEP_T2_xBFX_WIDTH,
- STEP_T2_BFx_WIDTH,
- STEP_T2_MEMIMM_POS12_NEG8,
- STEP_T2_REGLIST,
- STEP_T2_MEM_TYPE,
- STEP_T2_BRANCH20,
- STEP_T2_BRANCH24,
- STEP_T2_LXZ,
- STEP_T2_CBZ,
- STEP_T2_IT,
- STEP_MOVW_reloc,
- STEP_MOVT_reloc,
- STEP_Shift_IMM5,
- STEP_XT_CONST_ROR,
- STEP_XT_CONST_ROR_NUM,
- STEP_DREGLIST,
- STEP_NREG,
- STEP_QREG,
- STEP_FAKEQREG,
- STEP_IMM_OPCODE,
- STEP_NEON_AM5,
- STEP_UIMM16V7,
- STEP_A7_LSB,
- STEP_A7_xBFX_WIDTH,
- STEP_A7_BFx_WIDTH,
- STEP_NOSBIT,
- STEP_T2_INDIRSETUP_PC_OFF,
- STEP_AM_D_T,
- STEP_AM_D_T_STACK,
- STEP_T2_STACKSYM_IMM_12,
- STEP_R12,
- };
- // used by : ADD, SUB
- static const AssemblyStep Steps_T_Add_Sub_dnc [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3, STEP_NEXTOPN, STEP_CONSTANT, STEP_T1_SETS_CR0,
- STEP_UIMM3, 6, STEP_OPCODE, STEP_DONE
- };
- // used by : ADD, SUB
- static const AssemblyStep Steps_T_Add_Sub_ddc [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_OPEQ, STEP_NEXTOPN, STEP_CONSTANT, STEP_T1_SETS_CR0,
- STEP_UIMM8, STEP_OPCODE, STEP_DONE
- };
- // used by : ADD, SUB
- static const AssemblyStep Steps_T_Add_Sub_dnm [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3, STEP_NEXTOPN, STEP_REG, 6,
- STEP_OPCODE, STEP_DONE
- };
- // used by : ADD
- static const AssemblyStep Steps_T_Add_High_dm [] =
- {
- STEP_HREG, 0, STEP_HBIT, 7, STEP_NEXTOPN, STEP_OPEQ, STEP_NEXTOPN,
- STEP_HREG, 3, STEP_HBIT, 6, STEP_OPCODE, STEP_NOSBIT, STEP_DONE
- };
- // used by : ADD
- static const AssemblyStep Steps_T_Add_SP_or_PC [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_DUMMY_REG, STEP_NEXTOPN, STEP_CONSTANT,
- STEP_IMM_DPW8, STEP_OPCODE, STEP_DONE
- };
- // used by : ADD, SUB
- static const AssemblyStep Steps_T_Add_Sub_SP [] =
- {
- STEP_DUMMY_REG, STEP_NEXTOPN, STEP_DUMMY_REG, STEP_NEXTOPN, STEP_CONSTANT,
- STEP_IMM_W7, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by some ALU instructions (ADD, ADC, ...)
- // ALU rd, rd, rm
- static const AssemblyStep Steps_T2_ALU_ddm [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_NEXTOPN, STEP_REG, 16,
- STEP_NEXTOPN, STEP_SBIT, 4,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by ADDW
- // ALU rd, rn, immediate12bits
- static const AssemblyStep Steps_T2_ALU_dn_imm12 [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN,
- STEP_CONSTANT, STEP_T2_IMM_12, STEP_OPCODE, STEP_DONE
- };
- // Thumb2: used by : B (unconditional) <label>
- static const AssemblyStep Steps_T2_BranchUncond [] =
- {
- STEP_T2_BRANCH24, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_BranchCond [] =
- {
- STEP_T2_BRANCH20, STEP_OPCODE, STEP_DONE
- };
- // Thumb2: used by : BL
- static const AssemblyStep Steps_T2_BL [] =
- {
- STEP_CALL, STEP_OPCODE, STEP_DONE
- };
- // used by : BL
- static const AssemblyStep Steps_T_BL [] =
- {
- STEP_CALL, STEP_OPCODE, STEP_DONE
- };
- // used by : BLX
- static const AssemblyStep Steps_T_BLX [] =
- {
- STEP_LABEL, STEP_OPCODE, STEP_DONE
- };
- // Thumb2: used by : BLX
- static const AssemblyStep Steps_T2_BLX [] =
- {
- STEP_CALL, STEP_OPCODE, STEP_DONE
- };
- // used by : BX
- static const AssemblyStep Steps_T_BX [] =
- {
- STEP_REG, 3, STEP_OPCODE, STEP_DONE
- };
- // used by : AND, MUL, BIC, ADC, SUB, SBC
- static const AssemblyStep Steps_T_ALU_dm [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_OPEQ, STEP_NEXTOPN, STEP_REG, 3, STEP_T1_SETS_CR0,
- STEP_OPCODE, STEP_DONE
- };
- // used by : CMP
- // used by : CMP(1),
- static const AssemblyStep Steps_T_RR_dc [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_CONSTANT,
- STEP_UIMM8, STEP_OPCODE, STEP_DONE
- };
- // used by : CMP(3),
- static const AssemblyStep Steps_T_HRR_ds [] =
- {
- STEP_HREG, 0, STEP_HBIT, 7, STEP_NEXTOPN,
- STEP_HREG, 3, STEP_HBIT, 6, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_n_modc12 [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_CONSTANT,
- STEP_MODCONST_12, STEP_OPCODE, STEP_DONE
- };
- // used by : LDM
- static const AssemblyStep Steps_T_LDM_rspx [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_OFFSET, STEP_OPCODE, STEP_DONE
- };
- // used by : LDM
- static const AssemblyStep Steps_T_LDM_rrx [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_UIMM8, STEP_BASEREG, 8, STEP_OPCODE,
- STEP_DONE
- };
- // thumb2: used by : LDM
- static const AssemblyStep Steps_T2_LDM [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_T2_REGLIST, STEP_BASEREG, 0, STEP_OPCODE, STEP_DONE
- };
- // thumb2: used by : LDM
- static const AssemblyStep Steps_T2_LDM_ONE [] =
- {
- STEP_INDIR, STEP_REGLIST, 28, STEP_OPCODE, STEP_DONE
- };
- // thumb2: used by : STM
- static const AssemblyStep Steps_T2_STM_rsp_ONE [] =
- {
- STEP_REGLIST, 28, STEP_OPCODE, STEP_DONE
- };
- // used by : LDRRET (Thumb2)
- static const AssemblyStep Steps_T2_LDRRET [] =
- {
- STEP_NEXTOPN, STEP_BASED,
- STEP_T2_MEMIMM_POS12_NEG8, 16,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : MLS Rd, Rn, Rm, Ra -> dst, R12, src2, src1.
- static const AssemblyStep Steps_T2_mls_dnma [] =
- {
- // dst (Rd) R12 (Rn) src2 (Rm) src1 (Ra)
- STEP_REG, 24, STEP_R12, 0, STEP_NEXTOPN, STEP_REG, 16, STEP_NEXTOPN, STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- // used by : MULA
- static const AssemblyStep Steps_T2_MULA_dnsm [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16,
- STEP_NEXTOPN, STEP_REG, 28, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : MUL rd, rn, rm
- static const AssemblyStep Steps_T2_ALU_dnm_no_sbit [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16, STEP_NOSBIT,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : SMULL/UMULL RdLo, RdHi, Rn, Rm -> dst, r12, src1, src1
- static const AssemblyStep Steps_T2_ALU_mull_no_sbit [] =
- {
- // RdLo RdHi 0000 Rm__ | 1111 1011 1000 Rn__
- // dst (RdLo) src1 (Rn) src2 (Rm)
- STEP_REG, 28, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16, STEP_R12, 24,
- STEP_NOSBIT, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by some ALU instructions (MVN, ...)
- // ALU rd, rn ,modified constant 12 bit
- static const AssemblyStep Steps_T2_ALU_dm_Shift_c [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 16, STEP_NEXTOPN, STEP_T2_CONST_SHIFT_TYPE, 20, STEP_NEXTOPN,
- STEP_CONSTANT, STEP_T2_SHIFT_IMM_5, STEP_SBIT, 4, STEP_OPCODE, STEP_DONE
- };
- // used by : NEG, MVN
- static const AssemblyStep Steps_T_Neg_Mvn_dm [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3, STEP_T1_SETS_CR0, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T_Ret_rr [] =
- {
- STEP_HREG, 0, STEP_HBIT, 7, STEP_NEXTOPN, STEP_HREG, 3, STEP_HBIT, 6,
- STEP_OPCODE, STEP_DONE
- };
- // used by : RET
- static const AssemblyStep Steps_T_IWRET_dm [] =
- {
- STEP_NEXTOPN, STEP_REG, 3, STEP_OPCODE, STEP_DONE
- };
- // used by : MOV,
- static const AssemblyStep Steps_T_ALU_rc [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_CONSTANT, STEP_UIMM8, STEP_T1_SETS_CR0,
- STEP_OPCODE, STEP_DONE
- };
- // used by : MOV
- static const AssemblyStep Steps_T_MovHigh_rr [] =
- {
- STEP_HREG, 0, STEP_HBIT, 7, STEP_NEXTOPN, STEP_HREG, 3, STEP_HBIT, 6,
- STEP_OPCODE, STEP_DONE
- };
- // used by : STM
- static const AssemblyStep Steps_T_STM_rspx [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_OFFSET, STEP_OPCODE, STEP_DONE
- };
- // used by : STM
- static const AssemblyStep Steps_T_STM_rrx [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_UIMM8, STEP_BASEREG, 8, STEP_OPCODE, STEP_DONE
- };
- // used by : STM
- static const AssemblyStep Steps_T2_STM_rrx [] =
- {
- STEP_INDIR, STEP_REGLIST, STEP_T2_REGLIST, STEP_BASEREG, 0, STEP_OPCODE, STEP_DONE
- };
- // used by : LDR
- static const AssemblyStep Steps_T_LDRN_rcr [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_BASED, STEP_BASEREG, 3,
- STEP_IMM, 6, STEP_FIXUP, STEP_LDRI, STEP_OPCODE, STEP_DONE
- };
- // used by : LDR
- static const AssemblyStep Steps_T_LDRN_rrr [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_INDEXED, STEP_BASEREG, 3, STEP_INDEXREG, 6,
- STEP_LDR, STEP_OPCODE, STEP_DONE
- };
- // used by : LDR
- static const AssemblyStep Steps_T_LDRN_PC_or_SP [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_INDIR, STEP_IMM_W8, STEP_OPCODE,
- STEP_DONE
- };
- // used by : LDR
- static const AssemblyStep Steps_T_LDRN_ri [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_INDIR, STEP_IMM, 6, STEP_OPCODE,
- STEP_DONE
- };
- // Thumb2 LDR rxf, [rd, +#immediate12]
- // Thumb2 LDR rxf, [rd, -#immediate8]
- static const AssemblyStep Steps_T2_LDR_OFF [] =
- {
- STEP_REG, 28, STEP_NEXTOPN, STEP_BASED, STEP_BASEREG, 0,
- STEP_T2_MEMIMM_POS12_NEG8, 16,
- STEP_T2_MEM_TYPE, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 LDR rxf, symbol
- static const AssemblyStep Steps_T2_LDR_Stack [] =
- {
- STEP_REG, 28, STEP_NEXTOPN, STEP_INDIR,
- STEP_T2_IMMSTACK_POS12_NEG8, 16, STEP_T2_MEM_TYPE,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 LDR rxf, [rn, rm {LSL #<shift>}]
- static const AssemblyStep Steps_T2_LDR_RegIndir [] =
- {
- STEP_REG, 28, STEP_NEXTOPN, STEP_INDEXED, STEP_BASEREG, 0,
- STEP_INDEXREG, 16, STEP_T2_MEM_TYPE, STEP_SCALE_CONST, 20, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 LEA
- static const AssemblyStep Steps_T2_LEA_rrd [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_T2_STACKSYM_IMM_12, 0, STEP_OPCODE, STEP_DONE
- };
- // used by : LEA
- static const AssemblyStep Steps_T_LEA_rrd [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_SYM, STEP_IMM_W8, STEP_OPCODE, STEP_DONE
- };
- // used by : LEA
- static const AssemblyStep Steps_T_LEA_rspd [] =
- {
- STEP_REG, 8, STEP_NEXTOPN, STEP_SYM, STEP_IMM_W8, STEP_OPCODE, STEP_DONE
- };
- // used by : MOV
- static const AssemblyStep Steps_T_ALU_dn [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3,
- STEP_OPCODE, STEP_DONE
- };
- // used by : STR
- static const AssemblyStep Steps_T_STRN_rcr [] =
- {
- STEP_BASED, STEP_BASEREG, 3, STEP_IMM, 6, STEP_STRI, STEP_NEXTOPN, STEP_REG, 0,
- STEP_OPCODE, STEP_DONE
- };
- // used by : STR
- static const AssemblyStep Steps_T_STRN_rcr_custom [] =
- {
- STEP_BASEREG, 3, STEP_IMM, 6, STEP_STRI, STEP_NEXTOPN, STEP_REG, 0,
- STEP_OPCODE, STEP_DONE
- };
- // used by : STRWI
- static const AssemblyStep Steps_T_STRN_rrr [] =
- {
- STEP_INDEXED, STEP_BASEREG, 3, STEP_INDEXREG, 6, STEP_NEXTOPN, STEP_REG,
- 0, STEP_STR, STEP_OPCODE, STEP_DONE
- };
- // used by : STRWI
- static const AssemblyStep Steps_T_STRN_ri [] =
- {
- STEP_INDIR, STEP_IMM, 6, STEP_NEXTOPN, STEP_REG, 0, STEP_OPCODE,
- STEP_DONE
- };
- // used by : STR (stack)
- static const AssemblyStep Steps_T_STRN_spcr [] =
- {
- STEP_INDIR, STEP_IMM_W8, STEP_NEXTOPN, STEP_REG, 8, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 STR rxf, [rd, +#immediate12]
- // Thumb2 STR rxf, [rd, -#immediate8]
- static const AssemblyStep Steps_T2_STR_OFF [] =
- {
- STEP_BASED, STEP_BASEREG, 0,
- STEP_T2_MEMIMM_POS12_NEG8, 16, STEP_T2_MEM_TYPE,
- STEP_NEXTOPN, STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 STR rxf, [sp, #offset]
- static const AssemblyStep Steps_T2_STR_Stack [] =
- {
- STEP_INDIR, STEP_T2_IMMSTACK_POS12_NEG8, 16, STEP_T2_MEM_TYPE,
- STEP_NEXTOPN, STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 STR rxf, [rn, rm, LSL #<shift>]
- static const AssemblyStep Steps_T2_STR_RegIndir [] =
- {
- STEP_INDEXED, STEP_BASEREG, 0, STEP_INDEXREG, 16,
- STEP_SCALE_CONST, 20, STEP_T2_MEM_TYPE, STEP_NEXTOPN, STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by : MOVW,
- static const AssemblyStep Steps_T2_ALU_r_imm16 [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_CONSTANT, STEP_T2_IMM_16,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by : MOV_W, ...
- static const AssemblyStep Steps_T2_ALU_r_modc12 [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_CONSTANT, STEP_MODCONST_12,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used MVN
- // ALU rd, rm
- static const AssemblyStep Steps_T2_ALU_dm [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 16, STEP_SBIT, 4,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by some ALU instructions (ADD, ADC, ...)
- // ALU rd, rn ,modified constant 12 bit
- static const AssemblyStep Steps_T2_ALU_dn_modc12 [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN, STEP_CONSTANT,
- STEP_MODCONST_12, STEP_SBIT, 4, STEP_OPCODE, STEP_DONE
- };
- // used by : ASR
- static const AssemblyStep Steps_T_Shift_ds [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_OPEQ, STEP_NEXTOPN, STEP_REG, 3, STEP_T1_SETS_CR0,
- STEP_OPCODE, STEP_DONE
- };
- // used by : ASR
- static const AssemblyStep Steps_T_Shift_dmc [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3, STEP_NEXTOPN, STEP_CONSTANT, STEP_T1_SETS_CR0,
- STEP_UIMM5, 6, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_Shift_dmc [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 16, STEP_NEXTOPN,
- STEP_CONSTANT, STEP_T2_SHIFT_IMM_5, STEP_SBIT, 4, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_ALU_dnm [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN,
- STEP_REG, 16, STEP_SBIT, 4,
- STEP_OPCODE, STEP_DONE
- };
- // Thumbs : TEQ rn, rn LSL#1 (aka, TIOFLW)
- static const AssemblyStep Steps_T2_ALU_nn [] =
- {
- STEP_REG, 0, STEP_REG, 16, STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : TST rn, rm
- static const AssemblyStep Steps_T2_ALU_nm [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by some ALU instructions (CMN, CMP, ...)
- // ALU rd, rn, constant shift
- static const AssemblyStep Steps_T2_ALU_nm_Shift_c [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16, STEP_NEXTOPN,
- STEP_T2_CONST_SHIFT_TYPE, 20, STEP_NEXTOPN, STEP_CONSTANT, STEP_T2_SHIFT_IMM_5,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by some ALU instructions (ADD, ADC, ...)
- // ALU rd, rn, rm, constant shift
- static const AssemblyStep Steps_T2_ALU_dnm_Shift_c [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 16,
- STEP_NEXTOPN, STEP_T2_CONST_SHIFT_TYPE, 20, STEP_NEXTOPN, STEP_CONSTANT, STEP_T2_SHIFT_IMM_5,
- STEP_SBIT, 4,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_ALU_dnn [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_REG, 0, STEP_REG, 16,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 : used by : MOVW
- static const AssemblyStep Steps_T2_MOVW_reloc [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_MOVW_reloc,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_MOVT_reloc [] =
- {
- STEP_REG, 24, STEP_NEXTOPN, STEP_MOVT_reloc,
- STEP_OPCODE, STEP_DONE
- };
- // used by : TST, CMP, CMN
- static const AssemblyStep Steps_T_RR_ds [] =
- {
- STEP_REG, 0, STEP_NEXTOPN, STEP_REG, 3,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T_Dbg [] =
- {
- STEP_OPCODE, STEP_DONE,
- };
- static const AssemblyStep Steps_NOP [] =
- {
- STEP_OPCODE, STEP_DONE,
- };
- static const AssemblyStep Steps_DBL_Unary_dm [] =
- {
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- STEP_DREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_DBL_ALU_dnm [] =
- {
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- STEP_DREG, 0, 23, STEP_NEXTOPN,
- STEP_DREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_DBL_Cmp_dm [] =
- {
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- STEP_DREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FLT_FMRS_flags [] =
- {
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FLT_FMRSR_flags [] =
- {
- STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_LDRN_DBL_Am_rcr [] =
- {
- // Dn (dest of load)
- //
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- // [Rn + #offset]
- //
- STEP_BASED, STEP_IMM_S8, STEP_BASEREG, 0,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_LDRN_FLT_Am_rcr [] =
- {
- // Sn (dest of load)
- //
- STEP_SREG, 28, 06, STEP_NEXTOPN,
- // [Rn + #offset]
- //
- STEP_BASED, STEP_IMM_S8, STEP_BASEREG, 0,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_DBL_STRN_Am_rcr [] =
- {
- // [Rn + #offset]
- //
- STEP_BASED, STEP_IMM_S8, STEP_BASEREG, 0, STEP_NEXTOPN,
- // Dn (src for store)
- //
- STEP_DREG, 28, 6,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_FLT_STRN_Am_rcr [] =
- {
- // [Rn + #offset]
- //
- STEP_BASED, STEP_IMM_S8, STEP_BASEREG, 0, STEP_NEXTOPN,
- // Sn (src for store)
- //
- STEP_SREG, 28, 6,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FCVTDS_ds [] =
- {
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- STEP_SREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FCVTSD_sd [] =
- {
- STEP_SREG, 28, 6, STEP_NEXTOPN,
- STEP_DREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FITOD_ds [] =
- {
- STEP_DREG, 28, 6, STEP_NEXTOPN,
- STEP_SREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FDTOI_sd [] =
- {
- STEP_SREG, 28, 6, STEP_NEXTOPN,
- STEP_DREG, 16, 21,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FLT_FMSR_sr [] =
- {
- STEP_SREG, 0, 23, STEP_NEXTOPN,
- STEP_REG, 28,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_FLT_FMRS_rs [] =
- {
- STEP_REG, 28, STEP_NEXTOPN,
- STEP_SREG, 0, 23,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_T2_PLD_offset [] =
- {
- STEP_BASED, STEP_BASEREG, 0,
- STEP_T2_MEMIMM_POS12_NEG8, 16,
- STEP_OPCODE, STEP_DONE
- };
- // Thumb2 PLD_W [rn, rm]
- static const AssemblyStep Steps_T2_PLD_RegIndir [] =
- {
- STEP_INDEXED, STEP_BASEREG, 0,
- STEP_INDEXREG, 16,
- STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_DBL_LDM[] =
- {
- STEP_BASED, STEP_AM5, STEP_BASEREG, 0, STEP_DREGLIST,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
- static const AssemblyStep Steps_A_DBL_STM[] =
- {
- STEP_BASED, STEP_AM5, STEP_BASEREG, 0, STEP_DREGLIST,
- STEP_FIXUP, STEP_OPCODE, STEP_DONE
- };
|