[fpc-pascal] fast integer multiplication

Florian Klaempfl F.Klaempfl at gmx.de
Fri Jul 22 22:59:15 CEST 2005


Vincent Snijders wrote:

> Hi,
> 
> Suppose I have the following code:
> 
> var
>   a,b: dword;
>   c: qword;
> 
> begin
>   a := 10000000;
>   b := 20000000;
>   c := a * b;
>   writeln(c);
> end.
> 
> Now, although c is large enough to contain the result only the lower
> dword is filled. I can force correct results by using c := qword(a) * b,
> but the slow fpc_mul_qword is used.
> 
> The code generated for the above sample is:
> # [16] c:=a*b;
>     movl    U_P$PROJECT1_A,%edx
>     movl    U_P$PROJECT1_B,%eax
>     mull    %edx
>     movl    $0,%edx
>     movl    %eax,U_P$PROJECT1_C
>     movl    %edx,U_P$PROJECT1_C+4
> 
> What I want is the above code, but without the "movl $0,%edx"
> instruction. Is there a way to do this (wihtout using fpc_mul_qword).

Only assembler for now. Any suggestions how the compiler could be told
to generate such code?




More information about the fpc-pascal mailing list