On Sat, 31 Jul 1999, Philip Blundell wrote:

> >Any ideas how to trigger a smull from C code?
> 
> Something like this:
> 
> long long foo(long a, long b)
> {
>   return (long long)a*(long long)b;
> }
> 
> foo:
>         @ args = 0, pretend = 0, frame = 0
>         @ frame_needed = 0, current_function_anonymous_args = 0
>         smull   r2, r3, r0, r1
>         mov     r1, r3
>         mov     r0, r2
>         mov     pc, lr

Unfortunately, I can't get better than this with the code above:

foo:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, current_function_anonymous_args = 0
        stmfd   sp!, {r4, r5, lr}
        mov     r2, r1
        mov     r3, r2, asr #31
        mov     r4, r0
        mov     r5, r4, asr #31
        mov     r1, r5
        mov     r0, r4
        ldmfd   sp!, {r4, r5, lr}
        b       __muldi3

a and b are always promoted to long long before the multiplication takes
place...  Any idea?


Nicolas Pitre, B. ing.
[EMAIL PROTECTED]


unsubscribe: body of `unsubscribe linux-arm' to [EMAIL PROTECTED]

Reply via email to