MCore asm procedures

#include <stdio.h>

asm int mulword(a,b)
{
%con a %con b
lrw r2,a
lrw r3,b
mult r2,r3
%con a %reg b
lrw r2,a
mult r2,b
%reg a %con b
lrw r2,b
mult r2,a
%reg a %reg b
mov r2,a
mult r2,b
%con a %nearmem b
ld.w r2,b
lrw r3,a
mult r2,r3
%nearmem a %con b
ld.w r2,a
lrw r3,b
mult r2,r3
%nearmem a %nearmem b
ld.w r2,a
ld.w r3,b
mult r2,r3
%con a %farsprel b
lrw r2,%SPOFF(b)
addu r2,r0
ld.w r2,(r2,0)
lrw r3,a
mult r2,r3
%farsprel a %con b
lrw r2,%SPOFF(a)
addu r2,r0
ld.w r2,(r2,0)
lrw r3,b
mult r2,r3
%farsprel a %farsprel b
lrw r2,%SPOFF(a)
addu r2,r0
ld.w r2,(r2,0)
lrw r3,%SPOFF(b)
addu r3,r0
ld.w r3,(r3,0)
mult r2,r3
%farmem a %farmem b
lrw r2,a
ld.w r2,(r2,0)
lrw r3,b
ld.w r3,(r3,0)
mult r2,r3
%error
}

short x = 30;
short y = 2;
int z = 10;

func()
{
int tmp1 = x, tmp2 = y;
int ztmp = z;
return mulword(10,20) + mulword(tmp1,tmp2) + mulword(ztmp,30) +
mulword(ztmp,ztmp) + mulword(10,ztmp) + mulword(x,y);
}

func()
{
int tmp1 = x, tmp2 = y;
int ztmp = z;
return mulword(10,20) + mulword(tmp1,tmp2) + mulword(ztmp,30) +
mulword(ztmp,ztmp) + mulword(10,ztmp) + mulword(x,y);
}

func2()
{
int tmp1 = x, tmp2 = y;
int ztmp = z;
return (10*20) + (tmp1*tmp2) + (ztmp*30) +
(ztmp*ztmp) + (10*ztmp) + (x*y);
}

main()
{
if (func() != func2())
printf("ASMPROC FAIL: %d (wrong) != %d (correct)\n",func(),func2());
return 0;
}

Previous

Next



Copyright © 1999, Green Hills Software. All rights reserved.