[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