home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_07_04
/
v7n4070a.txt
< prev
next >
Wrap
Text File
|
1989-03-16
|
3KB
|
208 lines
Figure 1
rmvmul(y, A, x, ncA, nrA)
float y[], A[], x[];
int ncA, nrA;
{
int i,j;
float sum;
int inca;
/* Check for errors on dimensions. */
if (ncA <= 0 || nrA <= 0)
return(-1);
for (i = 0; i < nrA; i++) /* Step down a column. */
{
inca = i * ncA;
sum = 0.0;
for (j = 0; j < ncA; j++) /* Step across a row. */
sum += A[inca + j] * x[j];
y[i] = sum;
}
return(0);
}
Figure 2
/* Check for errors on dimensions. */
if (ncA <= 0 || nrA <= 0)
return(-1);
{
/* computations */
}
return(0);
Figure 3
_rmvmul: LDI *-FP(5),R0 ;R0 = ncA
BLE LL3
LDI *-FP(6),R1 ;R1 = nrA
BGT L1
LL3: LDI -1,R0 ;return(-1)
B EPI0_2
L1:
; /* computations */
L3: LDI 0,R0 ;return(0)
EPI0_2: SUBI 4,SP
POP FP
RETS
Figure 4
LDI *-FP(3),R1 ;*-FP(3) = A[]
ADDI *+FP(4),R1 ;*+FP(4) = inca
ADDI R0,R1,AR0 ;R0 = j
ADDI *-FP(4),R0 ;*-FP(4) = x[]
LDI R0,AR1
MPYF *AR1,*AR0,R0 ;R0 = A[inca + j] * x[j]
ADDF *+FP(3),R0 ;R0 += sum
STF R0,*+FP(3) ;*+FP(3) = sum
Figure 5
rmvmul(y, A, x, ncA, nrA)
register float y[], A[], x[];
int ncA, nrA;
{
register int i,j;
register float sum;
int inca;
{
/* Error checking and computations */
}
}
Figure 6
LDI *+FP(1),R0 ;*+FP(1) = inca
ADDI R0,AR5,R1 ;AR5 = A[]
ADDI R5,R1,AR0 ;R5 = j
ADDI R5,AR6,AR1 ;AR6 = x[]
MPYF *AR1,*AR0,R1 ;R1 = A[inca + j] * x[j]
ADDF R1,R6 ;R6 = sum
Figure 7
; Initialization
_dotpr: PUSH FP ; Save the old FP.
LDI SP,FP ; Point to the top of the stack.
LDI *-FP(2), AR0 ; AR0 = x
LDI *-FP(3), AR1 ; AR1 = y
LDI *-FP(4), RC ; RC = n
SUBI 1, RC ; RC = n-1
LDF 0.0, R0 ; R0 = 0
LDF 0.0, R2 ; R2 = 0
; Dot product
RPTS RC
MPYF *AR0++, *AR1++, RO ; R0 = x[1++] * y[j++]
|| ADDF R0, R2 ; R2 = sum' = sum +R0
ADDF R0, R2 ; Last product.
; Return
LDF R2, R0 ; Put the results in R0.
POP FP ; Pop the old frame pointer.
RETS
Figure 8
rmvmul(y, A, x, ncA, nrA)
register float y[], A[], x[];
register int ncA;
int nrA;
{
register int i;
float dotpr();
/* Check for errors on dimensions. */
if (ncA <= 0 || nrA <= 0)
return(-1);
for (i = 0; i < nrA; i++) /* Step down a column. */
y[i] = dotpr(x, &A[i * ncA], ncA);
return(0);
}
Figure 9a
main()
{
register float *x, *y;
register float sum;
register int i, N;
sum = 0.0;
for (i = 0; i < N; i++)
sum += *x++ * *y++;
}
Figure 9b
main()
{
register float *x, *y;
register float sum;
register float delta;
register int i, N;
sum = 0.0;
for (i = 0; i < N; i++)
{
delta = *x++ - *y++;
sum += delta * delta;
}
}
Figure 9c
main()
{
register float *x, *y, *z;
register int i, N;
for (i = 0; i < N; i++)
*z++ = *x++ * *y++;
}