Appendix A. A Sample program for Matrix Multiplication /* Data Definition */ R: .BLOCK 64 0; X: .BLOCK 8 8; .BLOCK 8 16; .BLOCK 8 32; .BLOCK 8 64; .BLOCK 8 128; .BLOCK 8 256; .BLOCK 8 512; .BLOCK 8 1024; Y: .BLOCK 8 1; .BLOCK 8 2; .BLOCK 8 3; .BLOCK 8 4; .BLOCK 8 5; .BLOCK 8 6; .BLOCK 8 7; .BLOCK 8 8; /* Subroutines */ BOOTH: XOR 0,0,0; MOVIWS 2,2; MOVIWS 3,3; MOVIWS 32,4; RSL 6,1,5; LOOP: AND 5,3,5; BZ SHIFT; CMP 5,3; BZ SHIFT; CMP 5,2; BZ MINUS; ADD 0,7,0; BR SHIFT; MINUS: SUB 0,7,0; SHIFT: SHR 0,1,0; RSR 6,1,6; MOVSIS 6,0,5; SUB 4,1,4; BNZ LOOP; POP 8; RET 8; XMUL: MOVIWS 8,12; XOR 13,13,13; X1: MOVLS 9,0,6; MOVLS 10,0,7; CALLS BOOTH; ADD 13,6,13; ADD 9,1,9; ADD 10,1,10; SUB 12,1,12; BNZ X1; POP 14; RET 14; LINE: MOVIWS 8,15; MOVIWS 1,1; L1: MOVSIS 16,0,9; MOVSIS 17,0,10; CALLS XMUL; MOVSIL 9,0,18; ADD 17,1,17; ADD 18,1,18; SUB 15,1,15; BNZ L1; POP 19; RET 19; /* Main Program */ START: XOR 0,0,0; SETEP 0; MOVIWS 8,20; MOVIWS 2,200; MOVLWS R,21; MOVLWS X,22; MOVLWS Y,23; BACK: ADD 21,20,24; ADD 24,20,27; ADD 27,20,30; ADD 22,20,25; SPLITS S1; ADD 25,20,28; SPLITS S2; ADD 28,20,31; SPLITS S3; MOVSIS 21,0,18; MOVSIS 22,0,16; MOVSIS 23,0,17; MOVIWS 450,0; SETSP 0; CALLS LINE; MERGE S3; BR MS3; S3: MOVSIS 30,0,148; MOVSIS 31,0,146; MOVSIS 23,0,147; MOVIWS 540,32; SETSP 32; MOVIWS 130,32; SETEP 32; CALLS LINE; MERGE S3; MS3: MERGE S2; BR MS2; S2: MOVSIS 27,0,168; MOVSIS 28,0,166; MOVSIS 23,0,167; MOVIWS 550,29; SETSP 29; MOVIWS 150,29; SETEP 29; CALLS LINE; MERGE S2; MS2: MERGE S1; BR MS1; S1: MOVSIS 24,0,188; MOVSIS 25,0,186; MOVSIS 23,0,187; MOVIWS 560,26; SETSP 26; MOVIWS 170,26; SETEP 26; CALLS LINE; MERGE S1; MS1: XOR 0,0,0; SETEP 0; ADD 30,20,21; ADD 31,20,22; ADD 32,20,23; SUB 200,1,200; BNZ BACK; HLT; END START