[fpc-pascal] fast integer multiplication

Vincent Snijders vsnijders at quicknet.nl
Thu Jul 21 14:51:02 CEST 2005


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).

Regards,
Vincent.




More information about the fpc-pascal mailing list