[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