Lösungsvorschlag

Nickname

Zeit

Testfälle

Score

ck

11:09:56

Alle akzeptiert

413

Bemerkungen:

Code


unsigned int pmult(u,v,p) 
   unsigned int u,v,p;
{
   unsigned int u0,u1,v0,v1,w0,w1,wi,wi0,wi1,x0,x1;

   u1=u / 65536; u0=u % 65536;  
   v1=v / 65536; v0=v % 65536;  

   w0=  u0*v0; 
   wi=  u0*v1+u1*v0;
   wi1= wi / 65536; wi0= wi % 65536;
   w1=  u1*v1; 

   x0=(w0 % p + (wi0 * 65536) % p) % p;
   x1=(w1 % p + wi1 % p) % p;
   
   return (x0 + x1 * 2) % p;
}

Generierter Assemblercode


	.file	"@22854.1.c"
gcc2_compiled.:
.section	".text"
	.align 4
	.global pmult
	.type	 pmult,#function
	.proc	016
pmult:
	!#PROLOGUE# 0
	!#PROLOGUE# 1
	srl	%o0, 16, %g3
	sethi	%hi(64512), %g2
	or	%g2, 1023, %g2
	and	%o0, %g2, %o0
	srl	%o1, 16, %o4
	and	%o1, %g2, %o1
	smul	%o0, %o1, %o3
	smul	%o0, %o4, %o0
	smul	%g3, %o1, %o1
	add	%o0, %o1, %o0
	srl	%o0, 16, %o1
	and	%o0, %g2, %o0
	smul	%g3, %o4, %g3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%o3, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%o3, %g2, %o3
	sll	%o0, 16, %o0
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%o0, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%o0, %g2, %o0
	add	%o3, %o0, %o3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%o3, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%o3, %g2, %o3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%g3, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%g3, %g2, %g3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%o1, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%o1, %g2, %o1
	add	%g3, %o1, %g3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%g3, %o2, %g2
	smul	%g2, %o2, %g2
	sub	%g3, %g2, %g3
	sll	%g3, 1, %g3
	add	%o3, %g3, %o3
	wr	%g0, %g0, %y
	nop
	nop
	nop
	udiv	%o3, %o2, %o0
	smul	%o0, %o2, %o0
	retl
	sub	%o3, %o0, %o0
.LLfe1:
	.size	 pmult,.LLfe1-pmult
	.ident	"GCC: (GNU) 2.95.2 19991024 (release)"