Mail Archives: djgpp/1998/10/06/10:31:35
extern zadd3(unsigned int *a,unsigned int *b,unsigned int *c);
extern zadd2(unsigned int *a,unsigned int *b);
extern zadd1(unsigned int *a);
#include <stdlib.h>
#include <iostream.h>
unsigned int length=5;
unsigned int lengthpad=length+10;
unsigned int i1,i2,i3,i4,i5,i6,i7,i8;
class scalar {
public:
unsigned int *s;
scalar();
~scalar();
};
scalar::scalar() //constructor for realmp
{s = new unsigned int [lengthpad];}
scalar::~scalar() //destructor for realmp
{delete[] s;}
scalar a_ram;unsigned int *a=a_ram.s;
scalar b_ram;unsigned int *b=b_ram.s;
scalar c_ram;unsigned int *c=c_ram.s;
scalar aa_ram;unsigned int *aa=aa_ram.s;
scalar bb_ram;unsigned int *bb=bb_ram.s;
scalar cc_ram;unsigned int *cc=cc_ram.s;
unsigned int z1[20]; //I continue to forget that arrays referred to
unsigned int z2[20]; //in asm's must be declared this way.
unsigned int z3[20];
unsigned int z4[20];
#define mode1() \
__asm__ ( \
"movl $0x0,%%ecx\n\t" \
"L4:\n\t" \
"incl %%ecx\n\t" \
"addl %%ecx,_z1(,%%ecx,4)\n\t" \
"cmpl _length,%%ecx\n\t" \
"jne L4\n\t" \
: \
: \
: "eax", "ecx", "memory", "cc");
main()
{int i,qqq;
for (i=1;i<length+1;i++)
{aa[i]=i;
bb[i]=2*i;
cc[i]=3*i;
}
zadd3(aa,bb,cc);
for (i=1;i<length+1;i++) cout<<z1[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z2[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z3[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z4[i]<<" ";
cout<<'\n';
cout<<'\n';
zadd3(z1,bb,cc);
for (i=1;i<length+1;i++) cout<<z1[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z2[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z3[i]<<" ";
cout<<'\n';
for (i=1;i<length+1;i++) cout<<z4[i]<<" ";
cout<<'\n';
cout<<'\n';
zadd2(aa,bb);
for (i=1;i<length+1;i++) cout<<z1[i]<<" ";
cout<<'\n';
cout<<'\n';
zadd1(aa);
for (i=1;i<length+1;i++) cout<<z1[i]<<" ";
cout<<'\n';
cout<<'\n';
}
zadd3(unsigned int *a,unsigned int *b,unsigned int *c)
{int i;
length=abs(length);
for (i=1;i<length+1;i++)
{z1[i]=a[i]+b[i]+c[i];
z2[i]=a[i]+2*b[i]+c[i];
z3[i]=a[i]+b[i]+2*c[i];
z4[i]=2*a[i]+b[i]+c[i];
}
mode1();
return 0;
}
zadd2(unsigned int *a,unsigned int *b)
{int i;
for (i=1;i<length+1;i++) z1[i]=a[i]+b[i];
return 0;
}
zadd1(unsigned int *a)
{int i;
for (i=1;i<length+1;i++) z1[i]=a[i];
return 0;
}
- Raw text -