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