1/*********************************************************************/
2/* Copyright 2009, 2010 The University of Texas at Austin.           */
3/* All rights reserved.                                              */
4/*                                                                   */
5/* Redistribution and use in source and binary forms, with or        */
6/* without modification, are permitted provided that the following   */
7/* conditions are met:                                               */
8/*                                                                   */
9/*   1. Redistributions of source code must retain the above         */
10/*      copyright notice, this list of conditions and the following  */
11/*      disclaimer.                                                  */
12/*                                                                   */
13/*   2. Redistributions in binary form must reproduce the above      */
14/*      copyright notice, this list of conditions and the following  */
15/*      disclaimer in the documentation and/or other materials       */
16/*      provided with the distribution.                              */
17/*                                                                   */
18/*    THIS  SOFTWARE IS PROVIDED  BY THE  UNIVERSITY OF  TEXAS AT    */
19/*    AUSTIN  ``AS IS''  AND ANY  EXPRESS OR  IMPLIED WARRANTIES,    */
20/*    INCLUDING, BUT  NOT LIMITED  TO, THE IMPLIED  WARRANTIES OF    */
21/*    MERCHANTABILITY  AND FITNESS FOR  A PARTICULAR  PURPOSE ARE    */
22/*    DISCLAIMED.  IN  NO EVENT SHALL THE UNIVERSITY  OF TEXAS AT    */
23/*    AUSTIN OR CONTRIBUTORS BE  LIABLE FOR ANY DIRECT, INDIRECT,    */
24/*    INCIDENTAL,  SPECIAL, EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES    */
25/*    (INCLUDING, BUT  NOT LIMITED TO,  PROCUREMENT OF SUBSTITUTE    */
26/*    GOODS  OR  SERVICES; LOSS  OF  USE,  DATA,  OR PROFITS;  OR    */
27/*    BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON ANY THEORY OF    */
28/*    LIABILITY, WHETHER  IN CONTRACT, STRICT  LIABILITY, OR TORT    */
29/*    (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY WAY OUT    */
30/*    OF  THE  USE OF  THIS  SOFTWARE,  EVEN  IF ADVISED  OF  THE    */
31/*    POSSIBILITY OF SUCH DAMAGE.                                    */
32/*                                                                   */
33/* The views and conclusions contained in the software and           */
34/* documentation are those of the authors and should not be          */
35/* interpreted as representing official policies, either expressed   */
36/* or implied, of The University of Texas at Austin.                 */
37/*********************************************************************/
38
39#define ASSEMBLER
40#include "common.h"
41
42#define M	$4
43#define	N	$5
44#define C	$6
45#define LDC	$7
46
47#define I	$2
48#define J	$3
49
50#define CO1	$8
51
52#define a1	$f0
53#define a2	$f1
54#define a3	$f2
55#define a4	$f3
56#define b1	$f4
57#define b2	$f5
58#define b3	$f6
59#define b4	$f7
60
61#define FZERO	$f8
62#define ALPHA	$f15
63
64	PROLOGUE
65
66	LDARG	C,     0($sp)
67	MTC	$0,  FZERO
68	LDARG	LDC,   8($sp)
69
70	dsll	LDC, LDC, BASE_SHIFT
71
72	move	J, N
73	blez	J, .L999
74	nop
75	.align 3
76
77.L10:
78	move	CO1, C
79	dsra	I,  M, 3
80
81	blez	I, .L15
82	daddu	C,   C, LDC
83
84	LD	a1,  0 * SIZE(CO1)
85	LD	a2,  1 * SIZE(CO1)
86	LD	a3,  2 * SIZE(CO1)
87	LD	a4,  3 * SIZE(CO1)
88
89	MUL	b1, ALPHA, a1
90	LD	a1,  4 * SIZE(CO1)
91
92	MUL	b2, ALPHA, a2
93	daddiu	I, I, -1
94
95	blez	I, .L13
96	LD	a2,  5 * SIZE(CO1)
97	.align 3
98
99.L12:
100	MUL	b3, ALPHA, a3
101	LD	a3,  6 * SIZE(CO1)
102
103	ST	b1,  0 * SIZE(CO1)
104
105	MUL	b4, ALPHA, a4
106	LD	a4,  7 * SIZE(CO1)
107
108	ST	b2,  1 * SIZE(CO1)
109
110	MUL	b1, ALPHA, a1
111	LD	a1,  8 * SIZE(CO1)
112
113	ST	b3,  2 * SIZE(CO1)
114
115	MUL	b2, ALPHA, a2
116	LD	a2,  9 * SIZE(CO1)
117
118	ST	b4,  3 * SIZE(CO1)
119
120	MUL	b3, ALPHA, a3
121	LD	a3, 10 * SIZE(CO1)
122
123	ST	b1,  4 * SIZE(CO1)
124
125	MUL	b4, ALPHA, a4
126	LD	a4, 11 * SIZE(CO1)
127
128	ST	b2,  5 * SIZE(CO1)
129
130	MUL	b1, ALPHA, a1
131	LD	a1, 12 * SIZE(CO1)
132
133	ST	b3,  6 * SIZE(CO1)
134
135	MUL	b2, ALPHA, a2
136	LD	a2, 13 * SIZE(CO1)
137
138	ST	b4,  7 * SIZE(CO1)
139	daddiu	I, I, -1
140
141	bgtz	I, .L12
142	daddiu	CO1, CO1, 8 * SIZE
143	.align 3
144
145.L13:
146	MUL	b3, ALPHA, a3
147	LD	a3,  6 * SIZE(CO1)
148
149	ST	b1,  0 * SIZE(CO1)
150
151	MUL	b4, ALPHA, a4
152	LD	a4,  7 * SIZE(CO1)
153
154	ST	b2,  1 * SIZE(CO1)
155
156	MUL	b1, ALPHA, a1
157
158	ST	b3,  2 * SIZE(CO1)
159
160	MUL	b2, ALPHA, a2
161
162	ST	b4,  3 * SIZE(CO1)
163
164	MUL	b3, ALPHA, a3
165
166	ST	b1,  4 * SIZE(CO1)
167
168	MUL	b4, ALPHA, a4
169
170	ST	b2,  5 * SIZE(CO1)
171	ST	b3,  6 * SIZE(CO1)
172	ST	b4,  7 * SIZE(CO1)
173
174	daddiu	CO1, CO1, 8 * SIZE
175	.align 3
176
177.L15:
178	andi	I,  M, 7
179	daddiu	J, J, -1
180
181	blez	I, .L18
182	NOP
183	.align	3
184
185.L16:
186	LD	a1,  0 * SIZE(CO1)
187	daddiu	I, I, -1
188
189	MUL	b1, ALPHA, a1
190	daddiu	CO1, CO1, 1 * SIZE
191
192	bgtz	I, .L16
193	ST	b1, -1 * SIZE(CO1)
194	.align 3
195
196.L18:
197	bgtz	J, .L10
198	NOP
199	.align 3
200
201.L999:
202	j	$31
203	NOP
204
205	EPILOGUE
206