[comp.arch] more on i860 mulitply

dgb@cs.washington.edu (David Bradlee) (03/04/90)

A couple of additional thoughts on the i860 floating point
multiplier.  I think we're clear on the fact that
double multiplies use each stage for 2 cycles.  So, using the pipelined
instructions a multiply would look like:
f8 = f4 * f6;

cycle
0	pfmul.dd f4,f6,f0
1
2	pfmul.dd f0,f0,f0
3
4	pfmul.dd f0,f0,f8


As far as the single/double and vice versa multiply transitions, looking at
it in the light of the double mult taking 2 cycles per stage makes it
a little clearer.

Let Di = double multiply, Si = single multiply

cycle	0  1  2  3  4  5  6  7  8  9  10 11
stage	-----------------------------------
  1	D1 D1 D2 D2 S1 S2 S3 D3 D3 D4 D4
  2	      D1 D1    S1 S2 S3    D3 D3
  3	            0     S1
	-----------------------------------
result	            D1 0  a  S1    b     D3
	   ^     ^              ^     ^
	   |     |              |     |
	   no instrs issued on these 4 cycles

There is no way to obtain a result from the mult pipeline.  Hence the
only questions are whether 'a' or 'b' are meaningful values.  I would
say that 'a' cannot be since D2 would need stage 2 for 2 cycles,
putting it in conflict with S1.  I would also say that 'b' cannot,
since the double mult would store the result of the stage 2.  However,
the book says, "The second previous operation is discarded (S2).  The
next pipelined multiplier operation stores the single-precision
result."  That would mean 'b' = S3.  This seems strange, but sometimes
truth is stranger than fiction.

	Dave Bradlee
	Department of Computer Science and Engineering, FR-35
	University of Washington
	Seattle, WA  98195
	dgb@cs.washington.edu