#if defined(CPU_ARM)
#define C_MULC(m,a,b) \
{ \
asm volatile( \
"ldmia %[ap], {r0,r1} \n\t" \
"ldrsh r2, [%[bp], #0] \n\t" \
"ldrsh r3, [%[bp], #2] \n\t" \
\
"smull r4, r5, r0, r2 \n\t" \
"smlal r4, r5, r1, r3 \n\t" \
"mov r4, r4, lsr #15 \n\t" \
"orr r5, r4, r5, lsl #17 \n\t" \
\
"smull r4, r6, r1, r2 \n\t" \
"rsb r3, r3, #0 \n\t" \
"smlal r4, r6, r0, r3 \n\t" \
"mov r4, r4, lsr #15 \n\t" \
"orr r6, r4, r6, lsl #17 \n\t" \
\
"stmia %[mp], {r5,r6} \n\t" \
: \
: [mp] "r" (&m), [ap] "r" (&a), [bp] "r" (&b) \
: "r0", "r1", "r2", "r3", "r4", "r5", "r6"); \
}
#else
# define C_MULC(m,a,b) \
do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
(m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0)
#endif