Much improved ARM support
This commit is contained in:
parent
0b81e9475d
commit
4068b60e1a
202
src/arch/arm.h
202
src/arch/arm.h
@ -40,12 +40,12 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
switch(instruction->opcode & 0x0fffffff) /* ignore condition code */
|
||||
{
|
||||
/* branch, branch with link */
|
||||
case OPB(0):
|
||||
case OPBL(0):
|
||||
case OPB(0): /* b */
|
||||
case OPBL(0): /* bl */
|
||||
opcode |= call->operands[0].value.immediate.value;
|
||||
break;
|
||||
/* branch and exchange */
|
||||
case OPBX(0):
|
||||
case OPBX(0): /* bx */
|
||||
/* first operand, Rn */
|
||||
p = call->operands[0].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
@ -54,16 +54,16 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
opcode |= ar->id;
|
||||
break;
|
||||
/* data processing */
|
||||
case OPDP(0, and):
|
||||
case OPDP(0, eor):
|
||||
case OPDP(0, sub):
|
||||
case OPDP(0, rsb):
|
||||
case OPDP(0, add):
|
||||
case OPDP(0, adc):
|
||||
case OPDP(0, sbc):
|
||||
case OPDP(0, rsc):
|
||||
case OPDP(0, orr):
|
||||
case OPDP(0, bic):
|
||||
case OPDP(0, and): /* and */
|
||||
case OPDP(0, eor): /* eor */
|
||||
case OPDP(0, sub): /* sub */
|
||||
case OPDP(0, rsb): /* rsb */
|
||||
case OPDP(0, add): /* add */
|
||||
case OPDP(0, adc): /* adc */
|
||||
case OPDP(0, sbc): /* sbc */
|
||||
case OPDP(0, rsc): /* rsc */
|
||||
case OPDP(0, orr): /* orr */
|
||||
case OPDP(0, bic): /* bic */
|
||||
case OPDPS(0, and): /* ands */
|
||||
case OPDPS(0, eor): /* eors */
|
||||
case OPDPS(0, sub): /* subs */
|
||||
@ -93,16 +93,16 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
break;
|
||||
case OPDPI(0, and):
|
||||
case OPDPI(0, eor):
|
||||
case OPDPI(0, sub):
|
||||
case OPDPI(0, rsb):
|
||||
case OPDPI(0, add):
|
||||
case OPDPI(0, adc):
|
||||
case OPDPI(0, sbc):
|
||||
case OPDPI(0, rsc):
|
||||
case OPDPI(0, orr):
|
||||
case OPDPI(0, bic):
|
||||
case OPDPI(0, and): /* and (immediate) */
|
||||
case OPDPI(0, eor): /* eor (immediate) */
|
||||
case OPDPI(0, sub): /* sub (immediate) */
|
||||
case OPDPI(0, rsb): /* rsb (immediate) */
|
||||
case OPDPI(0, add): /* add (immediate) */
|
||||
case OPDPI(0, adc): /* adc (immediate) */
|
||||
case OPDPI(0, sbc): /* sbc (immediate) */
|
||||
case OPDPI(0, rsc): /* rsc (immediate) */
|
||||
case OPDPI(0, orr): /* orr (immediate) */
|
||||
case OPDPI(0, bic): /* bic (immediate) */
|
||||
case OPDPIS(0, and): /* ands (immediate) */
|
||||
case OPDPIS(0, eor): /* eors (immediate) */
|
||||
case OPDPIS(0, sub): /* subs (immediate) */
|
||||
@ -128,10 +128,10 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
/* third operand */
|
||||
opcode |= call->operands[2].value.immediate.value;
|
||||
break;
|
||||
case OPDP(0, tst):
|
||||
case OPDP(0, teq):
|
||||
case OPDP(0, cmp):
|
||||
case OPDP(0, cmn):
|
||||
case OPDP(0, tst): /* tst */
|
||||
case OPDP(0, teq): /* teq */
|
||||
case OPDP(0, cmp): /* cmp */
|
||||
case OPDP(0, cmn): /* cmn */
|
||||
case OPDPS(0, tst): /* tsts */
|
||||
case OPDPS(0, teq): /* teqs */
|
||||
case OPDPS(0, cmp): /* cmps */
|
||||
@ -149,10 +149,10 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
break;
|
||||
case OPDPI(0, tst):
|
||||
case OPDPI(0, teq):
|
||||
case OPDPI(0, cmp):
|
||||
case OPDPI(0, cmn):
|
||||
case OPDPI(0, tst): /* tst (immediate) */
|
||||
case OPDPI(0, teq): /* teq (immediate) */
|
||||
case OPDPI(0, cmp): /* cmp (immediate) */
|
||||
case OPDPI(0, cmn): /* cmn (immediate) */
|
||||
case OPDPIS(0, tst): /* tsts (immediate) */
|
||||
case OPDPIS(0, teq): /* teqs (immediate) */
|
||||
case OPDPIS(0, cmp): /* cmps (immediate) */
|
||||
@ -166,11 +166,12 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
/* second operand */
|
||||
opcode |= call->operands[1].value.immediate.value;
|
||||
break;
|
||||
case OPDP(0, mov):
|
||||
case OPDP(0, mov): /* mov */
|
||||
case OPDPS(0, mov): /* movs */
|
||||
case OPDP(0, mvn):
|
||||
case OPDP(0, mvn): /* mvn */
|
||||
case OPDPS(0, mvn): /* mvns */
|
||||
if(call->operands_cnt == 0) /* nop */
|
||||
/* take care of nop */
|
||||
if(call->operands_cnt == 0)
|
||||
break;
|
||||
/* first operand, Rd */
|
||||
p = call->operands[0].value._register.name;
|
||||
@ -217,6 +218,139 @@ static int _arm_write(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
break;
|
||||
/* multiply and multiply-accumulate */
|
||||
case OPMUL(0): /* mul */
|
||||
case OPMULS(0): /* muls */
|
||||
case OPMULA(0): /* mla */
|
||||
case OPMULAS(0): /* mlas */
|
||||
/* first operand, Rd */
|
||||
p = call->operands[0].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 16);
|
||||
/* second operand, Rm */
|
||||
p = call->operands[1].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
/* third operand, Rs */
|
||||
p = call->operands[2].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 8);
|
||||
break;
|
||||
/* single data transfer */
|
||||
case OPSDTL(0): /* ldr */
|
||||
case OPSDTS(0): /* str */
|
||||
case OPSDTLB(0): /* ldrb */
|
||||
case OPSDTSB(0): /* strb */
|
||||
/* first operand, Rd */
|
||||
p = call->operands[0].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 12);
|
||||
/* second operand, Rn */
|
||||
p = call->operands[1].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 16);
|
||||
/* third operand, Rm */
|
||||
p = call->operands[2].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
break;
|
||||
/* block data transfer */
|
||||
case OPBDTL(0): /* ldm */
|
||||
case OPBDTS(0): /* stm */
|
||||
/* first operand, Rn */
|
||||
p = call->operands[0].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 16);
|
||||
/* second operand, register list */
|
||||
opcode |= call->operands[1].value.immediate.value;
|
||||
break;
|
||||
/* single data swap */
|
||||
case OPSDS(0):
|
||||
case OPSDSB(0):
|
||||
/* first operand, Rd */
|
||||
p = call->operands[0].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 12);
|
||||
/* second operand, Rm */
|
||||
p = call->operands[1].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= ar->id;
|
||||
/* third operand, Rn */
|
||||
p = call->operands[2].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 16);
|
||||
break;
|
||||
/* software interrupt */
|
||||
case OPSI(0):
|
||||
opcode |= call->operands[0].value.immediate.value;
|
||||
break;
|
||||
/* coprocessor data operation */
|
||||
case OPCDO(0):
|
||||
/* first operand, coprocessor number */
|
||||
opcode |= (call->operands[0].value.immediate.value
|
||||
<< 8);
|
||||
/* second operand, coprocessor operation code */
|
||||
opcode |= (call->operands[1].value.immediate.value
|
||||
<< 20);
|
||||
/* third operand, CRd */
|
||||
p = call->operands[2].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 12);
|
||||
break;
|
||||
/* coprocessor data transfers */
|
||||
case OPCDTL(0):
|
||||
case OPCDTS(0):
|
||||
/* first operand, coprocessor number */
|
||||
opcode |= (call->operands[0].value.immediate.value
|
||||
<< 8);
|
||||
/* second operand, CRd */
|
||||
p = call->operands[1].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 12);
|
||||
/* third operand, address */
|
||||
opcode |= call->operands[2].value.immediate.value;
|
||||
break;
|
||||
/* coprocessor register transfers */
|
||||
case OPCRTL(0):
|
||||
case OPCRTS(0):
|
||||
/* first operand, coprocessor number */
|
||||
opcode |= (call->operands[0].value.immediate.value
|
||||
<< 8);
|
||||
/* second operand, opcode */
|
||||
opcode |= (call->operands[1].value.immediate.value
|
||||
<< 21);
|
||||
/* third operand, Rd */
|
||||
p = call->operands[2].value._register.name;
|
||||
if((ar = helper->get_register_by_name_size(helper->arch,
|
||||
p, 32)) == NULL)
|
||||
return -1;
|
||||
opcode |= (ar->id << 12);
|
||||
/* FIXME implement */
|
||||
break;
|
||||
#if 1 /* FIXME really implement */
|
||||
default:
|
||||
break;
|
||||
|
458
src/arch/arm.ins
458
src/arch/arm.ins
@ -35,6 +35,7 @@
|
||||
|
||||
/* opcodes */
|
||||
#define OPNOP AO_IMMEDIATE(0, 32, 0)
|
||||
#define OP_DR AO_DREGISTER(0, 0, 32, 0)
|
||||
#define OP_R AO_REGISTER(0, 32, 0)
|
||||
#define OP_R_CPSR AO_REGISTER(AOF_IMPLICIT, 32, REG_cpsr_id)
|
||||
#define OP_R_SPSR AO_REGISTER(AOF_IMPLICIT, 32, REG_spsr_id)
|
||||
@ -42,6 +43,7 @@
|
||||
/* block data transfer */
|
||||
#define OPBDTL(cond) (cond | (0x4 << 25) | (0x1 << 20))
|
||||
#define OPBDTLF (32 << AOD_SIZE)
|
||||
#define OPBDT_U16 AO_IMMEDIATE(0, 16, 0)
|
||||
#define OPBDTS(cond) (cond | (0x4 << 25))
|
||||
#define OPBDTSF (32 << AOD_SIZE)
|
||||
|
||||
@ -57,17 +59,30 @@
|
||||
#define OPBX(cond) (cond | (0x12fff1 << 4))
|
||||
#define OPBXF (32 << AOD_SIZE)
|
||||
|
||||
/* coprocessor data operation */
|
||||
#define OPCDO(cond) (cond | (0xe << 24))
|
||||
#define OPCDOF (32 << AOD_SIZE)
|
||||
#define OPCDO_U4 AO_IMMEDIATE(0, 4, 0)
|
||||
|
||||
/* coprocessor data transfers */
|
||||
#define OPCDTL(cond) (cond | (0x6 << 25) | (0x1 << 20))
|
||||
#define OPCDTLF (32 << AOD_SIZE)
|
||||
#define OPCDTL_U4 AO_IMMEDIATE(0, 4, 0)
|
||||
#define OPCDTL_U8 AO_IMMEDIATE(0, 8, 0)
|
||||
#define OPCDTS(cond) (cond | (0x6 << 25))
|
||||
#define OPCDTSF (32 << AOD_SIZE)
|
||||
#define OPCDTS_U4 AO_IMMEDIATE(0, 4, 0)
|
||||
#define OPCDTS_U8 AO_IMMEDIATE(0, 8, 0)
|
||||
|
||||
/* coprocessor register transfers */
|
||||
#define OPCRTL(cond) (cond | (0xe << 24) | (0x1 << 20) | (0x1 << 4))
|
||||
#define OPCRTLF (32 << AOD_SIZE)
|
||||
#define OPCRTL_U3 AO_IMMEDIATE(0, 3, 0)
|
||||
#define OPCRTL_U4 AO_IMMEDIATE(0, 4, 0)
|
||||
#define OPCRTS(cond) (cond | (0xe << 24) | (0x1 << 4))
|
||||
#define OPCRTSF (32 << AOD_SIZE)
|
||||
#define OPCRTS_U3 AO_IMMEDIATE(0, 3, 0)
|
||||
#define OPCRTS_U4 AO_IMMEDIATE(0, 4, 0)
|
||||
|
||||
/* data processing */
|
||||
/* operations */
|
||||
@ -106,6 +121,8 @@
|
||||
#define OPMULSF (32 << AOD_SIZE)
|
||||
#define OPMULA(cond) (cond | (0x1 << 21) | (0x9 << 4))
|
||||
#define OPMULAF (32 << AOD_SIZE)
|
||||
#define OPMULAS(cond) (cond | (0x1 << 21) | (0x1 << 20) | (0x9 << 4))
|
||||
#define OPMULASF (32 << AOD_SIZE)
|
||||
|
||||
/* psr transfer */
|
||||
#define OPPT(cond) (cond | (0x2 << 23) | (0xf << 16))
|
||||
@ -114,14 +131,21 @@
|
||||
#define OPPTIF (32 << AOD_SIZE)
|
||||
|
||||
/* single data transfer */
|
||||
#define OPSDTL(cond) (cond | (0x1 << 26) | (0x1 << 20))
|
||||
#define OPSDTL(cond) (cond | (0x1 << 26) | (0x1 << 25) | (0x1 << 20))
|
||||
#define OPSDTLF (32 << AOD_SIZE)
|
||||
#define OPSDTS(cond) (cond | (0x1 << 26))
|
||||
#define OPSDTS(cond) (cond | (0x1 << 26) | (0x1 << 25))
|
||||
#define OPSDTSF (32 << AOD_SIZE)
|
||||
#define OPSDTLB(cond) (cond | (0x1 << 26) | (0x1 << 25) | (0x1 << 22) \
|
||||
| (0x1 << 20))
|
||||
#define OPSDTLBF (32 << AOD_SIZE)
|
||||
#define OPSDTSB(cond) (cond | (0x1 << 26) | (0x1 << 25) | (0x1 << 22))
|
||||
#define OPSDTSBF (32 << AOD_SIZE)
|
||||
|
||||
/* single data swap */
|
||||
#define OPSDS(cond) (cond | (0x2 << 23) | (0x9 << 4))
|
||||
#define OPSDSF (32 << AOD_SIZE)
|
||||
#define OPSDSB(cond) (cond | (0x2 << 23) | (0x1 << 22) | (0x9 << 4))
|
||||
#define OPSDSBF (32 << AOD_SIZE)
|
||||
|
||||
/* software interrupt */
|
||||
#define OPSI(cond) (cond | (0xf << 24))
|
||||
@ -340,7 +364,7 @@
|
||||
{ "bge", OPB(ge), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
{ "blt", OPB(lt), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
{ "bgt", OPB(gt), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
{ "bge", OPB(ge), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
{ "ble", OPB(le), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
{ "bal", OPB(al), OPBF, OPB_S26, AOT_NONE, AOT_NONE },
|
||||
/* bic */
|
||||
{ "bic", OPDP(al,bic), OPDPF, OP_R, OP_R, OP_R },
|
||||
@ -422,7 +446,7 @@
|
||||
{ "blge", OPBL(ge), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
{ "bllt", OPBL(lt), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
{ "blgt", OPBL(gt), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
{ "blge", OPBL(ge), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
{ "blle", OPBL(le), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
{ "blal", OPBL(al), OPBLF, OPBL_S26, AOT_NONE, AOT_NONE },
|
||||
/* bx */
|
||||
{ "bx", OPBX(al), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
@ -439,12 +463,25 @@
|
||||
{ "bxge", OPBX(ge), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
{ "bxlt", OPBX(lt), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
{ "bxgt", OPBX(gt), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
{ "bxge", OPBX(ge), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
{ "bxle", OPBX(le), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
{ "bxal", OPBX(al), OPBXF, OP_R, AOT_NONE, AOT_NONE },
|
||||
#if 1 /* FIXME implement correctly */
|
||||
/* cdp */
|
||||
{ "cdp", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||
#endif
|
||||
{ "cdp", OPCDO(al), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpeq", OPCDO(eq), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpne", OPCDO(ne), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpcs", OPCDO(cs), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpcc", OPCDO(cc), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpmi", OPCDO(mi), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdppl", OPCDO(pl), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpvs", OPCDO(vs), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpvc", OPCDO(vc), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdphi", OPCDO(hi), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpls", OPCDO(ls), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpge", OPCDO(ge), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdplt", OPCDO(lt), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpgt", OPCDO(gt), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdple", OPCDO(le), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
{ "cdpal", OPCDO(al), OPCDOF, OPCDO_U4, OPCDO_U4, OP_R },
|
||||
/* cmn */
|
||||
{ "cmn", OPDP(al,cmn), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
{ "cmneq", OPDP(eq,cmn), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
@ -641,76 +678,123 @@
|
||||
{ "eorles", OPDPIS(le,eor), OPDPISF,OP_R, OP_R, OPDPIS_U12 },
|
||||
{ "eorals", OPDPIS(al,eor), OPDPISF,OP_R, OP_R, OPDPIS_U12 },
|
||||
/* ldc */
|
||||
{ "ldc", OPCDTL(al), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldceq", OPCDTL(eq), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcne", OPCDTL(ne), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldccs", OPCDTL(cs), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldccc", OPCDTL(cc), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcmi", OPCDTL(mi), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcpl", OPCDTL(pl), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcvs", OPCDTL(vs), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcvc", OPCDTL(vc), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldchi", OPCDTL(hi), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcls", OPCDTL(ls), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcge", OPCDTL(ge), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldclt", OPCDTL(lt), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcgt", OPCDTL(gt), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcle", OPCDTL(le), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldcal", OPCDTL(al), OPCDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldc", OPCDTL(al), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldceq", OPCDTL(eq), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcne", OPCDTL(ne), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldccs", OPCDTL(cs), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldccc", OPCDTL(cc), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcmi", OPCDTL(mi), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcpl", OPCDTL(pl), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcvs", OPCDTL(vs), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcvc", OPCDTL(vc), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldchi", OPCDTL(hi), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcls", OPCDTL(ls), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcge", OPCDTL(ge), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldclt", OPCDTL(lt), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcgt", OPCDTL(gt), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcle", OPCDTL(le), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
{ "ldcal", OPCDTL(al), OPCDTLF,OPCDTL_U4,OP_R, OPCDTL_U8 },
|
||||
/* ldm */
|
||||
{ "ldm", OPBDTL(al), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmeq", OPBDTL(eq), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmne", OPBDTL(ne), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmcs", OPBDTL(cs), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmcc", OPBDTL(cc), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmmi", OPBDTL(mi), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmpl", OPBDTL(pl), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmvs", OPBDTL(vs), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmvc", OPBDTL(vc), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmhi", OPBDTL(hi), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmls", OPBDTL(ls), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmge", OPBDTL(ge), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmlt", OPBDTL(lt), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmgt", OPBDTL(gt), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmle", OPBDTL(ge), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldmal", OPBDTL(al), OPBDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldm", OPBDTL(al), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmeq", OPBDTL(eq), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmne", OPBDTL(ne), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmcs", OPBDTL(cs), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmcc", OPBDTL(cc), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmmi", OPBDTL(mi), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmpl", OPBDTL(pl), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmvs", OPBDTL(vs), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmvc", OPBDTL(vc), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmhi", OPBDTL(hi), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmls", OPBDTL(ls), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmge", OPBDTL(ge), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmlt", OPBDTL(lt), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmgt", OPBDTL(gt), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmle", OPBDTL(ge), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "ldmal", OPBDTL(al), OPBDTLF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
/* ldr */
|
||||
{ "ldr", OPSDTL(al), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldreq", OPSDTL(eq), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrne", OPSDTL(ne), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrcs", OPSDTL(cs), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrcc", OPSDTL(cc), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrmi", OPSDTL(mi), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrpl", OPSDTL(pl), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrvs", OPSDTL(vs), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrvc", OPSDTL(vc), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrhi", OPSDTL(hi), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrls", OPSDTL(ls), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrge", OPSDTL(ge), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrlt", OPSDTL(lt), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrgt", OPSDTL(gt), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldrle", OPSDTL(le), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldral", OPSDTL(al), OPSDTLF,OP_R, OP_R, OP_R },
|
||||
{ "ldr", OPSDTL(al), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldreq", OPSDTL(eq), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrne", OPSDTL(ne), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrcs", OPSDTL(cs), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrcc", OPSDTL(cc), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrmi", OPSDTL(mi), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrpl", OPSDTL(pl), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrvs", OPSDTL(vs), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrvc", OPSDTL(vc), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrhi", OPSDTL(hi), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrls", OPSDTL(ls), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrge", OPSDTL(ge), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrlt", OPSDTL(lt), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrgt", OPSDTL(gt), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrle", OPSDTL(le), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
{ "ldral", OPSDTL(al), OPSDTLF,OP_R, OP_DR, OP_R },
|
||||
/* ldrb */
|
||||
{ "ldrb", OPSDTLB(al), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldreqb", OPSDTLB(eq), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrneb", OPSDTLB(ne), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrcsb", OPSDTLB(cs), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrccb", OPSDTLB(cc), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrmib", OPSDTLB(mi), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrplb", OPSDTLB(pl), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrvsb", OPSDTLB(vs), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrvcb", OPSDTLB(vc), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrhib", OPSDTLB(hi), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrlsb", OPSDTLB(ls), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrgeb", OPSDTLB(ge), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrltb", OPSDTLB(lt), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrgtb", OPSDTLB(gt), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldrleb", OPSDTLB(le), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
{ "ldralb", OPSDTLB(al), OPSDTLBF,OP_R, OP_DR, OP_R },
|
||||
/* mcr */
|
||||
{ "mcr", OPCRTS(al), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcreq", OPCRTS(eq), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrne", OPCRTS(ne), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrcs", OPCRTS(cs), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrcc", OPCRTS(cc), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrmi", OPCRTS(mi), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrpl", OPCRTS(pl), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrvs", OPCRTS(vs), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrvc", OPCRTS(vc), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrhi", OPCRTS(hi), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrls", OPCRTS(ls), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrge", OPCRTS(ge), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrlt", OPCRTS(lt), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrgt", OPCRTS(gt), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcrle", OPCRTS(le), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
{ "mcral", OPCRTS(al), OPCRTSF,OP_R, OP_R, OP_R },
|
||||
#if 1 /* FIXME implement correctly */
|
||||
{ "mla", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||
#endif
|
||||
{ "mcr", OPCRTS(al), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcreq", OPCRTS(eq), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrne", OPCRTS(ne), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrcs", OPCRTS(cs), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrcc", OPCRTS(cc), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrmi", OPCRTS(mi), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrpl", OPCRTS(pl), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrvs", OPCRTS(vs), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrvc", OPCRTS(vc), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrhi", OPCRTS(hi), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrls", OPCRTS(ls), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrge", OPCRTS(ge), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrlt", OPCRTS(lt), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrgt", OPCRTS(gt), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcrle", OPCRTS(le), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
{ "mcral", OPCRTS(al), OPCRTSF,OPCRTS_U4,OPCRTS_U3,OP_R },
|
||||
/* mla */
|
||||
{ "mla", OPMULA(al), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlaeq", OPMULA(eq), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlane", OPMULA(ne), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlacs", OPMULA(cs), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlacc", OPMULA(cc), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlami", OPMULA(mi), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlapl", OPMULA(pl), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlavs", OPMULA(vs), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlavc", OPMULA(vc), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlahi", OPMULA(hi), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlals", OPMULA(ls), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlage", OPMULA(ge), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlalt", OPMULA(lt), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlagt", OPMULA(gt), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlale", OPMULA(le), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlaal", OPMULA(al), OPMULAF,OP_R, OP_R, OP_R },
|
||||
{ "mlas", OPMULAS(al), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlaeqs", OPMULAS(eq), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlanes", OPMULAS(ne), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlacss", OPMULAS(cs), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlaccs", OPMULAS(cc), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlamis", OPMULAS(mi), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlapls", OPMULAS(pl), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlavss", OPMULAS(vs), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlavcs", OPMULAS(vc), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlahis", OPMULAS(hi), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlalss", OPMULAS(ls), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlages", OPMULAS(ge), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlalts", OPMULAS(lt), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlagts", OPMULAS(gt), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlales", OPMULAS(le), OPMULASF,OP_R, OP_R, OP_R },
|
||||
{ "mlaals", OPMULAS(al), OPMULASF,OP_R, OP_R, OP_R },
|
||||
/* mov */
|
||||
{ "mov", OPDP(al,mov), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
{ "moveq", OPDP(eq,mov), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
@ -777,22 +861,22 @@
|
||||
{ "movles", OPDPIS(le,mov), OPDPISF,OP_R, OPDPI_U12,AOT_NONE },
|
||||
{ "movals", OPDPIS(al,mov), OPDPISF,OP_R, OPDPI_U12,AOT_NONE },
|
||||
/* mrc */
|
||||
{ "mrc", OPCRTL(al), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrceq", OPCRTL(eq), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcne", OPCRTL(ne), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrccs", OPCRTL(cs), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrccc", OPCRTL(cc), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcmi", OPCRTL(mi), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcpl", OPCRTL(pl), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcvs", OPCRTL(vs), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcvc", OPCRTL(vc), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrchi", OPCRTL(hi), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcls", OPCRTL(ls), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcge", OPCRTL(ge), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrclt", OPCRTL(lt), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcgt", OPCRTL(gt), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcle", OPCRTL(le), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrcal", OPCRTL(al), OPCRTLF,OP_R, OP_R, OP_R },
|
||||
{ "mrc", OPCRTL(al), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrceq", OPCRTL(eq), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcne", OPCRTL(ne), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrccs", OPCRTL(cs), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrccc", OPCRTL(cc), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcmi", OPCRTL(mi), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcpl", OPCRTL(pl), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcvs", OPCRTL(vs), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcvc", OPCRTL(vc), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrchi", OPCRTL(hi), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcls", OPCRTL(ls), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcge", OPCRTL(ge), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrclt", OPCRTL(lt), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcgt", OPCRTL(gt), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcle", OPCRTL(le), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
{ "mrcal", OPCRTL(al), OPCRTLF,OPCRTL_U4,OPCRTL_U3,OP_R },
|
||||
/* mrs */
|
||||
{ "mrs", OPPT(al), OPPTF, OP_R, OP_R_CPSR,AOT_NONE },
|
||||
{ "mrseq", OPPT(eq), OPPTF, OP_R, OP_R_CPSR,AOT_NONE },
|
||||
@ -861,8 +945,38 @@
|
||||
{ "msral", OPPTI(al), OPPTIF, OP_R_SPSR,OP_R, AOT_NONE },
|
||||
/* mul */
|
||||
{ "mul", OPMUL(al), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "muleq", OPMUL(eq), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulne", OPMUL(ne), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulcs", OPMUL(cs), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulcc", OPMUL(cc), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulmi", OPMUL(mi), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulpl", OPMUL(pl), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulvs", OPMUL(vs), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulvc", OPMUL(vc), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulhi", OPMUL(hi), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulls", OPMUL(ls), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulge", OPMUL(ge), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mullt", OPMUL(lt), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulgt", OPMUL(gt), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulle", OPMUL(le), OPMULF, OP_R, OP_R, OP_R },
|
||||
{ "mulal", OPMUL(al), OPMULF, OP_R, OP_R, OP_R },
|
||||
/* muls */
|
||||
{ "muls", OPMULS(al), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "muleqs", OPMULS(eq), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulnes", OPMULS(ne), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulcss", OPMULS(cs), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulccs", OPMULS(cc), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulmis", OPMULS(mi), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulpls", OPMULS(pl), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulvss", OPMULS(vs), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulvcs", OPMULS(vc), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulhis", OPMULS(hi), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mullss", OPMULS(ls), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulges", OPMULS(ge), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mullts", OPMULS(lt), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulgts", OPMULS(gt), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulles", OPMULS(le), OPMULSF,OP_R, OP_R, OP_R },
|
||||
{ "mulals", OPMULS(al), OPMULSF,OP_R, OP_R, OP_R },
|
||||
/* mvn */
|
||||
{ "mvn", OPDP(al,mvn), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
{ "mvneq", OPDP(eq,mvn), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
@ -1191,56 +1305,73 @@
|
||||
{ "sbcles", OPDPIS(le,sbc), OPDPISF,OP_R, OP_R, OPDPIS_U12 },
|
||||
{ "sbcals", OPDPIS(al,sbc), OPDPISF,OP_R, OP_R, OPDPIS_U12 },
|
||||
/* stc */
|
||||
{ "stc", OPCDTS(al), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stceq", OPCDTS(eq), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcne", OPCDTS(ne), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stccs", OPCDTS(cs), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stccc", OPCDTS(cc), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcmi", OPCDTS(mi), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcpl", OPCDTS(pl), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcvs", OPCDTS(vs), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcvc", OPCDTS(vc), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stchi", OPCDTS(hi), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcls", OPCDTS(ls), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcge", OPCDTS(ge), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stclt", OPCDTS(lt), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcgt", OPCDTS(gt), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcle", OPCDTS(le), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stcal", OPCDTS(al), OPCDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stc", OPCDTS(al), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stceq", OPCDTS(eq), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcne", OPCDTS(ne), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stccs", OPCDTS(cs), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stccc", OPCDTS(cc), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcmi", OPCDTS(mi), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcpl", OPCDTS(pl), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcvs", OPCDTS(vs), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcvc", OPCDTS(vc), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stchi", OPCDTS(hi), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcls", OPCDTS(ls), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcge", OPCDTS(ge), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stclt", OPCDTS(lt), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcgt", OPCDTS(gt), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcle", OPCDTS(le), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
{ "stcal", OPCDTS(al), OPCDTSF,OPCDTS_U4,OP_R, OPCDTS_U8 },
|
||||
/* stm */
|
||||
{ "stm", OPBDTS(al), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmeq", OPBDTS(eq), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmne", OPBDTS(ne), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmcs", OPBDTS(cs), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmcc", OPBDTS(cc), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmmi", OPBDTS(mi), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmpl", OPBDTS(pl), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmvs", OPBDTS(vs), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmvc", OPBDTS(vc), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmhi", OPBDTS(hi), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmls", OPBDTS(ls), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmge", OPBDTS(ge), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmlt", OPBDTS(lt), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmgt", OPBDTS(gt), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmle", OPBDTS(le), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stmal", OPBDTS(al), OPBDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stm", OPBDTS(al), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmeq", OPBDTS(eq), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmne", OPBDTS(ne), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmcs", OPBDTS(cs), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmcc", OPBDTS(cc), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmmi", OPBDTS(mi), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmpl", OPBDTS(pl), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmvs", OPBDTS(vs), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmvc", OPBDTS(vc), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmhi", OPBDTS(hi), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmls", OPBDTS(ls), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmge", OPBDTS(ge), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmlt", OPBDTS(lt), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmgt", OPBDTS(gt), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmle", OPBDTS(ge), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
{ "stmal", OPBDTS(al), OPBDTSF,OP_R, OPBDT_U16,AOT_NONE },
|
||||
/* str */
|
||||
{ "str", OPSDTS(al), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "streq", OPSDTS(eq), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strne", OPSDTS(ne), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strcs", OPSDTS(cs), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strcc", OPSDTS(cc), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strmi", OPSDTS(mi), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strpl", OPSDTS(pl), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strvs", OPSDTS(vs), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strvc", OPSDTS(vc), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strhi", OPSDTS(hi), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strls", OPSDTS(ls), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strge", OPSDTS(ge), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strlt", OPSDTS(lt), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strgt", OPSDTS(gt), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "strle", OPSDTS(le), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "stral", OPSDTS(al), OPSDTSF,OP_R, OP_R, OP_R },
|
||||
{ "str", OPSDTS(al), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "streq", OPSDTS(eq), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strne", OPSDTS(ne), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strcs", OPSDTS(cs), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strcc", OPSDTS(cc), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strmi", OPSDTS(mi), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strpl", OPSDTS(pl), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strvs", OPSDTS(vs), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strvc", OPSDTS(vc), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strhi", OPSDTS(hi), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strls", OPSDTS(ls), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strge", OPSDTS(ge), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strlt", OPSDTS(lt), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strgt", OPSDTS(gt), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "strle", OPSDTS(le), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
{ "stral", OPSDTS(al), OPSDTSF,OP_R, OP_DR, OP_R },
|
||||
/* strb */
|
||||
{ "strb", OPSDTSB(al), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "streqb", OPSDTSB(eq), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strneb", OPSDTSB(ne), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strcsb", OPSDTSB(cs), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strccb", OPSDTSB(cc), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strmib", OPSDTSB(mi), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strplb", OPSDTSB(pl), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strvsb", OPSDTSB(vs), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strvcb", OPSDTSB(vc), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strhib", OPSDTSB(hi), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strlsb", OPSDTSB(ls), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strgeb", OPSDTSB(ge), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strltb", OPSDTSB(lt), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strgtb", OPSDTSB(gt), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "strleb", OPSDTSB(le), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
{ "stralb", OPSDTSB(al), OPSDTSBF,OP_R, OP_DR, OP_R },
|
||||
/* sub */
|
||||
{ "sub", OPDP(al,sub), OPDPF, OP_R, OP_R, OP_R },
|
||||
{ "subeq", OPDP(eq,sub), OPDPF, OP_R, OP_R, OP_R },
|
||||
@ -1324,22 +1455,39 @@
|
||||
{ "swile", OPSI(le), OPSIF, OPSI_U24, AOT_NONE, AOT_NONE },
|
||||
{ "swial", OPSI(al), OPSIF, OPSI_U24, AOT_NONE, AOT_NONE },
|
||||
/* swp */
|
||||
{ "swp", OPSDS(al), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpeq", OPSDS(eq), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpne", OPSDS(ne), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpcs", OPSDS(cs), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpcc", OPSDS(cc), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpmi", OPSDS(mi), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swppl", OPSDS(pl), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpvs", OPSDS(vs), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpvc", OPSDS(vc), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swphi", OPSDS(hi), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpls", OPSDS(ls), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpge", OPSDS(ge), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swplt", OPSDS(lt), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpgt", OPSDS(gt), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swple", OPSDS(le), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swpal", OPSDS(al), OPSDSF, OP_R, OP_R, OP_R },
|
||||
{ "swp", OPSDS(al), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpeq", OPSDS(eq), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpne", OPSDS(ne), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpcs", OPSDS(cs), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpcc", OPSDS(cc), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpmi", OPSDS(mi), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swppl", OPSDS(pl), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpvs", OPSDS(vs), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpvc", OPSDS(vc), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swphi", OPSDS(hi), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpls", OPSDS(ls), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpge", OPSDS(ge), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swplt", OPSDS(lt), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpgt", OPSDS(gt), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swple", OPSDS(le), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
{ "swpal", OPSDS(al), OPSDSF, OP_R, OP_R, OP_DR },
|
||||
/* swpb */
|
||||
{ "swpb", OPSDSB(al), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpeqb", OPSDSB(eq), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpneb", OPSDSB(ne), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpcsb", OPSDSB(cs), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpccb", OPSDSB(cc), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpmib", OPSDSB(mi), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpplb", OPSDSB(pl), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpvsb", OPSDSB(vs), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpvcb", OPSDSB(vc), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swphib", OPSDSB(hi), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swplsb", OPSDSB(ls), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpgeb", OPSDSB(ge), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpltb", OPSDSB(lt), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpgtb", OPSDSB(gt), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpleb", OPSDSB(le), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
{ "swpalb", OPSDSB(al), OPSDSBF,OP_R, OP_R, OP_DR },
|
||||
/* teq */
|
||||
{ "teq", OPDP(al,teq), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
{ "teqeq", OPDP(eq,teq), OPDPF, OP_R, OP_R, AOT_NONE },
|
||||
|
58
test/arm.S
58
test/arm.S
@ -38,6 +38,8 @@
|
||||
bleq $0xa0
|
||||
bx %r1
|
||||
bxeq %r2
|
||||
cdp $0x1, $0xf, %r0
|
||||
cdpeq $0x2, $0xe, %r0
|
||||
cmn %r5, %r4
|
||||
cmneq %r5, %r4
|
||||
cmn %r5, $0x1
|
||||
@ -62,14 +64,20 @@
|
||||
eoreqs %r3, %r4, %r5
|
||||
eors %r3, %r4, $0x0
|
||||
eoreqs %r3, %r4, $0x1
|
||||
ldc %r0, %r0, %r0
|
||||
ldceq %r0, %r0, %r0
|
||||
ldm %r0, %r0, %r0
|
||||
ldmeq %r0, %r0, %r0
|
||||
ldr %r0, %r0, %r0
|
||||
ldreq %r0, %r0, %r0
|
||||
mcr %r0, %r0, %r0
|
||||
mcreq %r0, %r0, %r0
|
||||
ldc $0x1, %r2, $0x42
|
||||
ldceq $0x2, %r1, $0x42
|
||||
ldm %r2, $0x4442
|
||||
ldmeq %r1, $0x4341
|
||||
ldr %r4, [%r3], %r2
|
||||
ldreq %r4, [%r3], %r2
|
||||
ldrb %r4, [%r3], %r2
|
||||
ldreqb %r4, [%r3], %r2
|
||||
mcr $0x1, $0x4, %r3
|
||||
mcreq $0x2, $0x3, %r1
|
||||
mla %r3, %r1, %r2
|
||||
mlaeq %r3, %r1, %r2
|
||||
mlas %r3, %r1, %r2
|
||||
mlaeqs %r3, %r1, %r2
|
||||
mov %r4, %r0
|
||||
moveq %r5, %r1
|
||||
mov %r6, $0x1
|
||||
@ -78,8 +86,8 @@
|
||||
moveqs %r9, %r5
|
||||
movs %r10, $0x3
|
||||
moveqs %r11, $0x4
|
||||
mrc %r0, %r0, %r0
|
||||
mrceq %r0, %r0, %r0
|
||||
mrc $0x1, $0x4, %r3
|
||||
mrceq $0x2, $0x3, %r1
|
||||
mrs %r0, %cpsr
|
||||
mrseq %r1, %cpsr
|
||||
mrs %r2, %spsr
|
||||
@ -88,8 +96,10 @@
|
||||
msreq %cpsr, %r5
|
||||
msr %spsr, %r6
|
||||
msreq %spsr, %r7
|
||||
mul %r0, %r1, %r2
|
||||
muls %r0, %r1, %r2
|
||||
mul %r3, %r1, %r2
|
||||
muleq %r3, %r1, %r2
|
||||
muls %r3, %r1, %r2
|
||||
muleqs %r3, %r1, %r2
|
||||
mvn %r5, %r4
|
||||
mvneq %r5, %r4
|
||||
mvn %r5, $0x1
|
||||
@ -131,12 +141,14 @@
|
||||
sbceqs %r3, %r4, %r5
|
||||
sbcs %r3, %r4, $0x0
|
||||
sbceqs %r3, %r4, $0x1
|
||||
stc %r0, %r0, %r0
|
||||
stceq %r0, %r0, %r0
|
||||
stm %r0, %r0, %r0
|
||||
stmeq %r0, %r0, %r0
|
||||
str %r0, %r0, %r0
|
||||
streq %r0, %r0, %r0
|
||||
stc $0x1, %r2, $0x42
|
||||
stceq $0x2, %r1, $0x42
|
||||
stm %r2, $0x4442
|
||||
stmeq %r1, $0x4341
|
||||
str %r7, [%r5], %r6
|
||||
streq %r7, [%r5], %r6
|
||||
strb %r7, [%r5], %r6
|
||||
streqb %r7, [%r5], %r6
|
||||
sub %r3, %r4, %r5
|
||||
subeq %r3, %r4, %r5
|
||||
sub %r3, %r4, $0x0
|
||||
@ -145,10 +157,12 @@
|
||||
subeqs %r3, %r4, %r5
|
||||
subs %r3, %r4, $0x0
|
||||
subeqs %r3, %r4, $0x1
|
||||
swi $0x0
|
||||
swine $0x0
|
||||
swp %r5, %r4, %r3
|
||||
swpeq %r5, %r4, %r3
|
||||
swi $0x42
|
||||
swine $0x43
|
||||
swp %r5, %r4, [%r3]
|
||||
swpeq %r5, %r4, [%r3]
|
||||
swpb %r5, %r4, [%r3]
|
||||
swpeqb %r5, %r4, [%r3]
|
||||
teq %r5, %r4
|
||||
teqeq %r5, %r4
|
||||
teq %r5, $0x1
|
||||
|
Loading…
Reference in New Issue
Block a user