VSMA Documentation John Strawn 7 August 1987 1. Here's how the code was developed. Assume that the scalar is in y1. The individual steps to be accomplished are: move x:(r1),x0 ; A[k] move y:(r5),a ; B[k] macr x0,y1,a move a,x:(r6) ; C[k] ;; Enumeration of all possible cases: ; A B C ; x, x, x move x:(r1),x0 ; A[k] ; main loop: move x:(r5),a ; B[k] macr x0,y1,a x:(r1),x0 move a,x:(r6) ; C[k] ; x, x, y move x:(r1),x0 move x:(r2),a ; or switch r1 and r5 ; main loop: macr x0,y1,a x:(r1),x0 move x:(r2),a a,y:(r6) ; x, y, x move x:(r5),x0 move y:(r1),a ; main loop: macr x0,y1,a x:(r5),x0 move a,x:(r6) y:(r1),a ; x, y, y move x:(r1),x0 y:(r5),a macr x0,y1,a move a,y:(r6) ; y, x, x move y:(r1),x0 ; main loop move x:(r5),a macr x0,y1,a y:(r1),x0 move a,x:(r6) ; y, x, y move y:(r5),x0 move x:(r1),a ; main loop: macr x0,y1,a y:(r5),x0 move x:(r1),a a,y:(r6) ; y, y, x move y:(r5),x0 move y:(r1),a ; main loop: macr x0,y1,a y:(r5),x0 move a,x:(r6) y:(r1),a ; y, y, y move y:(r5),a macr x0,y1,a y:(r1),x0 move a,y:(r6) ; doubling up, with two ac's: move x:(r1),x0 ; A[k] move y:(r5),a ; B[k] macr x0,y1,a move a,x:(r6) ; C[k] move x:(r1),x0 ; A[k] move y:(r5),b ; B[k] macr x0,y1,b move b,x:(r6) ; C[k] ; using that, first for screw cases: ; x, x, x ; y, y, y ; results in no savings move x:(r1),x0 ; A[k] ; main loop move x:(r5),a ; B[k] macr x0,y1,a x:(r1),x0 ; A[k] move a,x:(r6) ; C[k] move x:(r5),b ; B[k] macr x0,y1,b x:(r1),x0 move b,x:(r6) ; C[k] ; x, y, y macr x0,y1,a x:(r1),x0 b,y:(r6) move a,y:(r6) ; C[k] move y:(r5),b ; B[k] macr x0,y1,b x:(r1),x0 y:(r5),a ; y, x, x macr y0,y1,a x:(r5),b y:(r1),y0 move a,x:(r6) macr y0,y1,b x:(r5),a y:(r1),y0 move b,x:(r6) ; and the non-screw cases: ; x, x, y macr x0,y1,a x:(r5),b move x:(r1),x0 a,y:(r6) macr x0,y1,b x:(r5),a move x:(r1),x0 b,y:(r6) ; x, y, x macr x0,y1,a x:(r1),x0 y:(r5),b move a,x:(r6) macr x0,y1,b x:(r1),x0 y:(r5),a move b,x:(r6) ; y, x, y move x:(r5),a y:(r1),y0 macr y0,y1,a b,y:(r6) move x:(r5),b y:(r1),y0 macr y0,y1,b a,y:(r6) ; y, y, x move y:(r5),x0 macr x0,y1,a b,x:(r6) y:(r1),b move y:(r5),x0 macr x0,y1,b a,x:(r6) y:(r1),a ; collapsing the screw doubled-up cases: ; x, x, x ; y, y, y move x:(r1),x0 ; A[k] ; main loop move x:(r5),a ; B[k] macr x0,y1,a x:(r1),x0 ; A[k] move a,x:(r6) ; C[k] move x:(r5),b ; B[k] macr x0,y1,b x:(r1),x0 move b,x:(r6) ; C[k] ; x, y, y macr x0,y1,a x:(r1),x0 y:(r5),b move a,y:(r6) macr x0,y1,b x:(r1),x0 y:(r5),a move b,y:(r6) ; y, x, x macr y0,y1,a x:(r5),b y:(r1),y0 move a,x:(r6) macr y0,y1,b x:(r5),a y:(r1),y0 move b,x:(r6) ; sinp_a, x0, r5 ; sinp_b, a, r1 ; sout, a, r6 ;; It makes sense for a couple cases to "double up," so the ;; cnt/2 approach will be adopted. 2. Here are the addresses: ans1.............int X:000020B0 GLOBAL ans2.............int X:000020B1 GLOBAL ans3.............int X:000020B2 GLOBAL ans4.............int X:000020B3 GLOBAL ans5.............int X:000020B4 GLOBAL ans6.............int X:000020B5 GLOBAL ans7.............int X:000020B6 GLOBAL ans8.............int X:000020B7 GLOBAL ans9.............int X:000020B8 GLOBAL ans10............int X:000020B9 GLOBAL ans11............int X:000020BA GLOBAL ans12............int X:000020BB GLOBAL ans13............int X:000020BC GLOBAL ans14............int X:000020BD GLOBAL ans999...........int X:000020BE GLOBAL ax_vec...........int X:00002000 GLOBAL ay_vec...........int Y:00002018 GLOBAL bx_vec...........int X:0000200C GLOBAL by_vec...........int Y:00002024 GLOBAL ixself1_vec......int X:00002030 GLOBAL ixself2_vec......int X:00002036 GLOBAL ixself3_vec......int X:0000203C GLOBAL iyself1_vec......int Y:00002042 GLOBAL iyself2_vec......int Y:00002048 GLOBAL out1_vec.........int X:00002050 GLOBAL out2_vec.........int Y:00002057 GLOBAL out3_vec.........int X:0000205E GLOBAL out4_vec.........int Y:00002065 GLOBAL out5_vec.........int X:0000206C GLOBAL out6_vec.........int Y:00002073 GLOBAL out7_vec.........int X:0000207A GLOBAL out8_vec.........int Y:00002081 GLOBAL out9_vec.........int Y:00002088 GLOBAL out10_vec........int Y:0000208F GLOBAL out11_vec........int Y:00002096 GLOBAL sum1.............int X:000020A2 GLOBAL sum2.............int X:000020A3 GLOBAL sum3.............int X:000020A4 GLOBAL sum4.............int X:000020A5 GLOBAL sum5.............int X:000020A6 GLOBAL sum6.............int X:000020A7 GLOBAL sum7.............int X:000020A8 GLOBAL sum8.............int X:000020A9 GLOBAL sum9.............int X:000020AA GLOBAL sum10............int X:000020AB GLOBAL sum11............int X:000020AC GLOBAL sum12............int X:000020AD GLOBAL sum13............int X:000020AE GLOBAL sum14............int X:000020AF GLOBAL t1...............int P:0000004C GLOBAL t2...............int P:00000071 GLOBAL t3...............int P:00000096 GLOBAL t4...............int P:000000BB GLOBAL t5...............int P:000000DE GLOBAL t6...............int P:00000102 GLOBAL t7...............int P:00000127 GLOBAL t8...............int P:0000014C GLOBAL t9...............int P:00000171 GLOBAL t10..............int P:00000196 GLOBAL t11..............int P:000001BB GLOBAL t12..............int P:000001E0 GLOBAL t13..............int P:00000205 GLOBAL t14..............int P:0000022A GLOBAL xscal............int X:0000204E GLOBAL yscal............int Y:0000204F GLOBAL