From 03f5786acae416cc7a68be46a64559a2ee39cbe7 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 12 Jun 2011 12:14:51 +0000 Subject: [PATCH] Improving ARM support --- src/arch/arm.ins | 13 ++++++++++++- test/arm.S | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/arch/arm.ins b/src/arch/arm.ins index 833c375..179527a 100644 --- a/src/arch/arm.ins +++ b/src/arch/arm.ins @@ -74,6 +74,14 @@ #define OPDATAF (32 << AOD_SIZE) #define OP_DATA2 AO_IMMEDIATE(0, 12, 0) +/* multiply and multiply-accumulate */ +#define OPMUL(cond) (cond | (0x9 << 4)) +#define OPMULF (32 << AOD_SIZE) +#define OPMULS(cond) (cond | (0x1 << 20) | (0x9 << 4)) +#define OPMULSF (32 << AOD_SIZE) +#define OPMULA(cond) (cond | (0x1 << 21) | (0x9 << 4)) +#define OPMULAF (32 << AOD_SIZE) + /* instructions */ /* adc */ @@ -293,8 +301,11 @@ { "msrgt", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE }, { "msrle", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE }, { "msral", 0x00000000, OPNOP, OP_R, OP_R, AOT_NONE }, -{ "mul", 0x00000000, OPNOP, AOT_NONE, AOT_NONE, AOT_NONE }, #endif +/* mul */ +{ "mul", OPMUL(al), OPMULF, OP_R, OP_R, OP_R }, +/* muls */ +{ "muls", OPMULS(al), OPMULSF,OP_R, OP_R, OP_R }, /* mvn */ { "mvn", OPDATA(al,mvn), OPDATAF,OP_R, OP_R, OP_R }, { "mvneq", OPDATA(eq,mvn), OPDATAF,OP_R, OP_R, OP_R }, diff --git a/test/arm.S b/test/arm.S index a30efab..a83e645 100644 --- a/test/arm.S +++ b/test/arm.S @@ -24,6 +24,8 @@ moveq %r5, %r4, %r3 mrs %r0, %cpsr msr %r0, %cpsr + mul %r0, %r1, %r2 + muls %r0, %r1, %r2 mvn %r5, %r4, %r3 mvneq %r5, %r4, %r3 nop