On 20/02/2012 13:31, Miloslav Semler wrote:
> Thank you,
> my mistake as I have not read specifications in detail. I did some
> solution in assembly (inline function mul16 which multiplies two 16bit
> integers and returns 32bit integer and uses hw multiplier).
>

Did you check the generated assembly when using C properly?

With gcc 4.4.5 (not the latest version, but the one I have handy), I get 
optimal assembly code:

int32_t multTest(int16_t a, int16_t b) {
        return ((int32_t) a) * b;
}

   56                   multTest:
   57                           /* prologue ends here (frame size = 0) */
   58                   .L__FrameSize_multTest=0x0
GAS LISTING e:\temp\ccI7v7Wb.s                         page 2


   59                   .L__FrameOffset_multTest=0x0
   60 0000 0212                 push    r2
   61 0002 32C2                 dint
   62 0004 0343                 nop
   63 0006 824E 3201            mov     r14, &__MPYS     ;  b
   64 000a 824F 3801            mov     r15, &__OP2      ;  a
   65 000e 1E42 3A01            mov     &__RESLO, r14    ;
   66 0012 1F42 3C01            mov     &__RESHI, r15    ;
   67 0016 3241                 pop     r2
   68                   
   69                           /* epilogue: not required */
   70 0018 3041                 ret


Don't use inline assembly unless you cannot get the appropriate code 
from the compiler - and even then, only if the function is so 
time-critical that it is worth using assembly.

mvh.,

David




> -- Miloslav
>> On 02/19/2012 01:43 PM, Miloslav Semler wrote:
>>
>>> Which is wrong for me as it discards high word from result (RESHI is not
>>> copied, instead it is used an sign extension). Routine div32768 accepts
>>> 32bit signed integer.
>>>
>>>
>> You seem to be complaining that a 16X16 multiply returns only a 16 bit
>> result. This is standard across all C compilers.
>>
>>
>> If you need a 32 bit result you have two options:
>>
>> 1) Promote one or both arguments to 32 bits to force a 32X32 multiply
>> with a 32 bit result.
>> 2) Roll your own code if you need something faster.
>>
>> It is possible that buried somewhere in the standard library is a
>> function that does this but I have never seen one.
>>
>>
>>
>
>
> ------------------------------------------------------------------------------
> Try before you buy = See our experts in action!
> The most comprehensive online learning library for Microsoft developers
> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
> Metro Style Apps, more. Free future releases when you subscribe now!
> http://p.sf.net/sfu/learndevnow-dev2


------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to