94 lines
1.5 KiB
C
94 lines
1.5 KiB
C
|
|
#define LOBYTE(x) ((unsigned char) ((x) & 0xff))
|
|
#define HIBYTE(x) ((unsigned char) ((x) >> 8 & 0xff))
|
|
|
|
|
|
void mpadd(unsigned char w[], unsigned char u[], unsigned char v[], int n)
|
|
{
|
|
int j;
|
|
unsigned short ireg=0;
|
|
|
|
for (j=n;j>=1;j--) {
|
|
ireg=u[j]+v[j]+HIBYTE(ireg);
|
|
w[j+1]=LOBYTE(ireg);
|
|
}
|
|
w[1]=HIBYTE(ireg);
|
|
}
|
|
|
|
void mpsub(int *is, unsigned char w[], unsigned char u[], unsigned char v[],
|
|
int n)
|
|
{
|
|
int j;
|
|
unsigned short ireg=256;
|
|
|
|
for (j=n;j>=1;j--) {
|
|
ireg=255+u[j]-v[j]+HIBYTE(ireg);
|
|
w[j]=LOBYTE(ireg);
|
|
}
|
|
*is=HIBYTE(ireg)-1;
|
|
}
|
|
|
|
void mpsad(unsigned char w[], unsigned char u[], int n, int iv)
|
|
{
|
|
int j;
|
|
unsigned short ireg;
|
|
|
|
ireg=256*iv;
|
|
for (j=n;j>=1;j--) {
|
|
ireg=u[j]+HIBYTE(ireg);
|
|
w[j+1]=LOBYTE(ireg);
|
|
}
|
|
w[1]=HIBYTE(ireg);
|
|
}
|
|
|
|
void mpsmu(unsigned char w[], unsigned char u[], int n, int iv)
|
|
{
|
|
int j;
|
|
unsigned short ireg=0;
|
|
|
|
for (j=n;j>=1;j--) {
|
|
ireg=u[j]*iv+HIBYTE(ireg);
|
|
w[j+1]=LOBYTE(ireg);
|
|
}
|
|
w[1]=HIBYTE(ireg);
|
|
}
|
|
|
|
void mpsdv(unsigned char w[], unsigned char u[], int n, int iv, int *ir)
|
|
{
|
|
int i,j;
|
|
|
|
*ir=0;
|
|
for (j=1;j<=n;j++) {
|
|
i=256*(*ir)+u[j];
|
|
w[j]=(unsigned char) (i/iv);
|
|
*ir=i % iv;
|
|
}
|
|
}
|
|
|
|
void mpneg(unsigned char u[], int n)
|
|
{
|
|
int j;
|
|
unsigned short ireg=256;
|
|
|
|
for (j=n;j>=1;j--) {
|
|
ireg=255-u[j]+HIBYTE(ireg);
|
|
u[j]=LOBYTE(ireg);
|
|
}
|
|
}
|
|
|
|
void mpmov(unsigned char u[], unsigned char v[], int n)
|
|
{
|
|
int j;
|
|
|
|
for (j=1;j<=n;j++) u[j]=v[j];
|
|
}
|
|
|
|
void mplsh(unsigned char u[], int n)
|
|
{
|
|
int j;
|
|
|
|
for (j=1;j<=n;j++) u[j]=u[j+1];
|
|
}
|
|
#undef LOBYTE
|
|
#undef HIBYTE
|