3 .include "testutils.inc"
6 // This function computes an integer 32x32 multiply,
7 // and returns the upper 32 bits of the result.
8 // If the complete 64 bit result is required, one must
9 // write the partial results as they are computed.
10 // To change this code for a fractional 32x32, one needs
11 // to adjust the shifts for magnitude of -15, and use a
12 // fractional multiply at the end for the upper word halves
13 // (instead of the integer one).
19 LSETUP ( loop1 , loop1end ) LC0 = P4;
24 // begin integer double precision routine
27 A1 = R0.H * R1.L (M), A0 = R0.L * R1.L (FU);
28 A1 += R1.H * R0.L (M,IS);
32 A0 += R0.H * R1.H (IS);
36 [ P2 ++ ] = R7; // store 32 bit output
40 R0 = [ P1 ++ ]; DBGA ( R0.H , 0xfeae ); DBGA ( R0.L , 0xab6b );
41 R0 = [ P1 ++ ]; DBGA ( R0.H , 0xfeae ); DBGA ( R0.L , 0xa627 );
42 R0 = [ P1 ++ ]; DBGA ( R0.H , 0xfeae ); DBGA ( R0.L , 0xa0e3 );
43 R0 = [ P1 ++ ]; DBGA ( R0.H , 0xfeae ); DBGA ( R0.L , 0x9b9f );