Intel i86W Manual page 178

Table of Contents

Advertisement

PROGRAMMING EXAMPLES
II
MATRIX MULTIPLY, C = A
*
8, CACHED LOADS ONLY
II
Registers loaded by calling routine
A=r16
II
pointer into A, stored in memory by rows
8=r17
II
pointer into 8, stored in memory by columns
C=r18
II
pointer into C, stored in memory by rows
L=r19
II
the number of rows in A
M=r20
II
the number of columns in A and rows in 8
N=r21
II
the number of columns in 8
II
Registers used locally
RC=r28
II
rowlcolumn counter decremented by bla for loop control
DEC=r27
II
decrementor for rowlcolumn pointers
Ar=r26
II
counter of rows in A
8c=r25
II
counter of columns in 8
8p=r24
II
temporary pointer into 8
SIZ=r23
II
number of bytes in row of A or column of 8
A1=f4; A2=f5; A3=f6; A4=f7; A5=f8; A6=f9; A7=f10;A8=f11
81=f12;82=f13;83=f14;84=f15;85=f16;86=f17;87=f18;88=f19
II
matrix A row values
II
matrx 8 column vals
II
temporary results
T1=f20;T2=f21;T3=f22
shl
2,
adds
-8,
adds
-8,
adds
-4,
d.fiadd.dd
f0,
adds
-1,
d.fnop
M,
r0,
M,
C,
f0,
L,
SIZ
DEC
RC
C
f0
Ar
bla
d.fnop
subs
start_row::
d.pfmul.ss
mov
d.pfmul.ss
adds
d.pfmul.ss
fld.q
d.pfadd.ss
fld.q
d.pfadd.ss
adds
d.pfadd.ss
fld.q
DEC, RC, start_row
A,
SIZ, A
f0,
f0,
8,
8p
f0,
f0,
SIZ, A,
f0,
f0,
16(8p) ,
f0,
f0,
16 (A) ,
f0,
f0,
-1,
N,
f0,
f0,
0(A),
f0
f0
A
f0
85
f0
A5
f0
8c
f0
A1
II
Number of bytes in M entries
II
Set decrementor for bla
II
Initialize rowlcolumn counter
II
Start C index one entry low
II
Initiate dual-instruction mode
II
Make row counter zero relative
II
First dual-mode pair
II
Initialize LCC
II
II
II
II
II
II
II
II
II
II
II
II
II
II
II
Start pointer to A one row low
Executed once per row of A
Point to first col of 8
Point to next row of A
Load
entries of 8
Load
entries of A
Initialize column counter
Load 4 entries of A
Example 9-13. Matiix Multiply, Cached Loads Only (Sheet 1 of 2)
9-16

Advertisement

Table of Contents
loading

Table of Contents