Improving ARM support
This commit is contained in:
parent
03f5786aca
commit
2b85e9fddc
@ -82,6 +82,12 @@
|
|||||||
#define OPMULA(cond) (cond | (0x1 << 21) | (0x9 << 4))
|
#define OPMULA(cond) (cond | (0x1 << 21) | (0x9 << 4))
|
||||||
#define OPMULAF (32 << AOD_SIZE)
|
#define OPMULAF (32 << AOD_SIZE)
|
||||||
|
|
||||||
|
/* single data transfer */
|
||||||
|
#define OPSDTL(cond) (cond | (0x1 << 26) | (0x1 << 20))
|
||||||
|
#define OPSDTLF (32 << AOD_SIZE)
|
||||||
|
#define OPSDTS(cond) (cond | (0x1 << 26))
|
||||||
|
#define OPSDTSF (32 << AOD_SIZE)
|
||||||
|
|
||||||
|
|
||||||
/* instructions */
|
/* instructions */
|
||||||
/* adc */
|
/* adc */
|
||||||
@ -261,7 +267,25 @@
|
|||||||
#if 1 /* FIXME implement correctly */
|
#if 1 /* FIXME implement correctly */
|
||||||
{ "ldc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "ldc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
{ "ldm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "ldm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
{ "ldr", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
#endif
|
||||||
|
/* 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 },
|
||||||
|
#if 1 /* FIXME implement correctly */
|
||||||
{ "mla", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "mla", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
#endif
|
#endif
|
||||||
/* mov */
|
/* mov */
|
||||||
@ -395,8 +419,23 @@
|
|||||||
#if 1 /* FIXME implement correctly */
|
#if 1 /* FIXME implement correctly */
|
||||||
{ "stc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "stc", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
{ "stm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "stm", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
{ "str", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE },
|
|
||||||
#endif
|
#endif
|
||||||
|
{ "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 },
|
||||||
/* sub */
|
/* sub */
|
||||||
{ "sub", OPDATA(al,sub), OPDATAF,OP_R, OP_R, OP_R },
|
{ "sub", OPDATA(al,sub), OPDATAF,OP_R, OP_R, OP_R },
|
||||||
{ "subeq", OPDATA(eq,sub), OPDATAF,OP_R, OP_R, OP_R },
|
{ "subeq", OPDATA(eq,sub), OPDATAF,OP_R, OP_R, OP_R },
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
cmpeq %r5, %r4, %r3
|
cmpeq %r5, %r4, %r3
|
||||||
eor %r5, %r4, %r3
|
eor %r5, %r4, %r3
|
||||||
eoreq %r5, %r4, %r3
|
eoreq %r5, %r4, %r3
|
||||||
|
ldr %r0, %r0, %r0
|
||||||
|
ldreq %r0, %r0, %r0
|
||||||
mov %r5, %r4, %r3
|
mov %r5, %r4, %r3
|
||||||
moveq %r5, %r4, %r3
|
moveq %r5, %r4, %r3
|
||||||
mrs %r0, %cpsr
|
mrs %r0, %cpsr
|
||||||
@ -37,5 +39,7 @@
|
|||||||
rsceq %r5, %r4, %r3
|
rsceq %r5, %r4, %r3
|
||||||
sbc %r5, %r4, %r3
|
sbc %r5, %r4, %r3
|
||||||
sbceq %r5, %r4, %r3
|
sbceq %r5, %r4, %r3
|
||||||
|
str %r0, %r0, %r0
|
||||||
|
streq %r0, %r0, %r0
|
||||||
sub %r5, %r4, %r3
|
sub %r5, %r4, %r3
|
||||||
subeq %r5, %r4, %r3
|
subeq %r5, %r4, %r3
|
||||||
|
Loading…
Reference in New Issue
Block a user