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 >
Text File  |  1989-03-16  |  3KB  |  208 lines

  1. Figure 1
  2.  
  3. rmvmul(y, A, x, ncA, nrA)
  4.  
  5. float y[], A[], x[];
  6. int   ncA, nrA;
  7. {
  8.     int   i,j;
  9.     float sum;
  10.     int   inca;
  11.  
  12.     /* Check for errors on dimensions. */
  13.     if (ncA <= 0 || nrA <= 0)
  14.        return(-1);
  15.  
  16.     for (i = 0; i < nrA; i++)    /* Step down a column. */
  17.     {
  18.         inca = i * ncA;
  19.         sum  = 0.0;
  20.         for (j = 0; j < ncA; j++) /* Step across a row. */
  21.             sum += A[inca + j] * x[j];
  22.         y[i] = sum;
  23.     }
  24.     return(0);
  25. }
  26.  
  27.  
  28. Figure 2
  29.  
  30.  
  31.  
  32. /* Check for errors on dimensions. */
  33. if (ncA <= 0 || nrA <= 0)
  34.    return(-1);
  35.    {
  36.    /* computations */
  37.    }
  38. return(0);
  39.  
  40.  
  41. Figure 3
  42.  
  43.  
  44. _rmvmul: LDI     *-FP(5),R0     ;R0 = ncA
  45.          BLE     LL3
  46.          LDI     *-FP(6),R1     ;R1 = nrA
  47.          BGT     L1
  48. LL3:     LDI     -1,R0          ;return(-1)
  49.          B       EPI0_2
  50. L1:
  51.     ; /* computations */
  52. L3:      LDI     0,R0           ;return(0)
  53. EPI0_2:  SUBI    4,SP
  54.          POP     FP
  55.          RETS
  56.  
  57.  
  58. Figure 4
  59.  
  60.  
  61.  
  62.  
  63. LDI     *-FP(3),R1       ;*-FP(3) = A[]
  64. ADDI    *+FP(4),R1       ;*+FP(4) = inca
  65. ADDI    R0,R1,AR0        ;R0 = j
  66. ADDI    *-FP(4),R0       ;*-FP(4) = x[]
  67. LDI     R0,AR1
  68. MPYF    *AR1,*AR0,R0     ;R0 = A[inca + j] * x[j]
  69. ADDF    *+FP(3),R0       ;R0 += sum
  70. STF     R0,*+FP(3)       ;*+FP(3) = sum
  71.  
  72.  
  73.  
  74. Figure 5
  75.  
  76.  
  77. rmvmul(y, A, x, ncA, nrA)
  78.  
  79. register float y[], A[], x[];
  80. int ncA, nrA;
  81. {
  82.     register int i,j;
  83.     register float sum;
  84.     int inca;
  85.     {
  86.     /* Error checking and computations */
  87.     }
  88. }
  89.  
  90.  
  91.  
  92. Figure 6
  93.  
  94.  
  95.  
  96. LDI     *+FP(1),R0     ;*+FP(1) = inca
  97. ADDI    R0,AR5,R1      ;AR5 = A[]
  98. ADDI    R5,R1,AR0      ;R5 = j
  99. ADDI    R5,AR6,AR1     ;AR6 = x[]
  100. MPYF    *AR1,*AR0,R1   ;R1 = A[inca + j] * x[j]
  101. ADDF    R1,R6          ;R6 = sum
  102.  
  103.  
  104.  
  105. Figure 7
  106.  
  107.  
  108. ; Initialization
  109. _dotpr: PUSH    FP           ; Save the old FP.
  110.         LDI     SP,FP        ; Point to the top of the stack.
  111.      LDI     *-FP(2), AR0 ; AR0 = x
  112.     LDI     *-FP(3), AR1 ; AR1 = y
  113.     LDI     *-FP(4), RC  ; RC = n
  114.     SUBI    1, RC        ; RC = n-1
  115.     LDF    0.0, R0      ; R0 = 0
  116.      LDF     0.0, R2      ; R2 = 0
  117. ; Dot product
  118.     RPTS    RC
  119.     MPYF    *AR0++, *AR1++, RO   ; R0 = x[1++] * y[j++]
  120. ||    ADDF    R0, R2               ; R2 = sum' = sum +R0
  121.     ADDF    R0, R2               ; Last product.
  122. ; Return
  123.     LDF     R2, R0       ; Put the results in R0.
  124.     POP     FP           ; Pop the old frame pointer.
  125.     RETS
  126.  
  127.  
  128. Figure 8
  129.  
  130.  
  131.  
  132.  
  133. rmvmul(y, A, x, ncA, nrA)
  134.  
  135. register float y[], A[], x[];
  136. register int ncA;
  137. int nrA;
  138. {
  139.     register int i;
  140.     float dotpr();
  141.  
  142.     /* Check for errors on dimensions. */
  143.     if (ncA <= 0 || nrA <= 0)
  144.        return(-1);
  145.  
  146.     for (i = 0; i < nrA; i++)  /* Step down a column. */ 
  147.        y[i] = dotpr(x, &A[i * ncA], ncA);
  148.  
  149. return(0);
  150. }
  151.  
  152.  
  153.  
  154.  
  155. Figure 9a
  156.  
  157.  
  158. main()
  159. {
  160. register float *x, *y;
  161. register float sum;
  162. register int i, N;
  163.  
  164. sum = 0.0;
  165.  
  166. for (i = 0; i < N; i++)
  167.     sum += *x++ * *y++;
  168. }
  169.  
  170.  
  171.  
  172.  
  173. Figure 9b
  174.  
  175.  
  176.  
  177. main()
  178. {
  179. register float *x, *y;
  180. register float sum;
  181. register float delta;
  182. register int i, N;
  183.  
  184. sum = 0.0;
  185.  
  186. for (i = 0; i < N; i++)
  187.     {
  188.     delta = *x++ - *y++;
  189.     sum += delta * delta;
  190.     }
  191. }
  192.  
  193.  
  194.  
  195.  
  196. Figure 9c
  197.  
  198.  
  199. main()
  200. {
  201. register float *x, *y, *z;
  202. register int i, N;
  203.  
  204. for (i = 0; i < N; i++)
  205.     *z++ = *x++ * *y++;
  206. }
  207.  
  208.