#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