1/*********************************************************************/ 2/* */ 3/* Optimized BLAS libraries */ 4/* By Kazushige Goto <kgoto@tacc.utexas.edu> */ 5/* */ 6/* Copyright (c) The University of Texas, 2009. All rights reserved. */ 7/* UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING */ 8/* THIS SOFTWARE AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF */ 9/* MERCHANTABILITY, FITNESS FOR ANY PARTICULAR PURPOSE, */ 10/* NON-INFRINGEMENT AND WARRANTIES OF PERFORMANCE, AND ANY WARRANTY */ 11/* THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF */ 12/* TRADE. NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO */ 13/* THE USE OF THE SOFTWARE OR DOCUMENTATION. */ 14/* Under no circumstances shall University be liable for incidental, */ 15/* special, indirect, direct or consequential damages or loss of */ 16/* profits, interruption of business, or related expenses which may */ 17/* arise from use of Software or Documentation, including but not */ 18/* limited to those resulting from defects in Software and/or */ 19/* Documentation, or loss or inaccuracy of data of any kind. */ 20/*********************************************************************/ 21 22#define ASSEMBLER 23#include "common.h" 24 25#define N r3 26#define X r4 27#define INCX r5 28 29#define PREA r8 30#define INCXM1 r9 31 32#define FZERO f1 33 34#define STACKSIZE 160 35 36 PROLOGUE 37 PROFCODE 38 39 addi SP, SP, -STACKSIZE 40 li r0, 0 41 42 stfd f14, 0(SP) 43 stfd f15, 8(SP) 44 stfd f16, 16(SP) 45 stfd f17, 24(SP) 46 47 stfd f18, 32(SP) 48 stfd f19, 40(SP) 49 stfd f20, 48(SP) 50 stfd f21, 56(SP) 51 52 stfd f22, 64(SP) 53 stfd f23, 72(SP) 54 stfd f24, 80(SP) 55 stfd f25, 88(SP) 56 57 stfd f26, 96(SP) 58 stfd f27, 104(SP) 59 stfd f28, 112(SP) 60 stfd f29, 120(SP) 61 62 stfd f30, 128(SP) 63 stfd f31, 136(SP) 64 65 stw r0, 144(SP) 66 lfs FZERO,144(SP) 67 68#ifdef F_INTERFACE 69 LDINT N, 0(N) 70 LDINT INCX, 0(INCX) 71#endif 72 73 slwi INCX, INCX, ZBASE_SHIFT 74 subi INCXM1, INCX, SIZE 75 76 li PREA, 10 * 16 * SIZE 77 78 cmpwi cr0, N, 0 79 ble- LL(9999) 80 cmpwi cr0, INCX, 0 81 ble- LL(9999) 82 83 LFD f1, 0 * SIZE(X) 84 LFD f2, 1 * SIZE(X) 85 add X, X, INCX 86 87 fabs f1, f1 88 fabs f2, f2 89 fadd f1, f1, f2 90 91 fmr f0, f1 92 fmr f2, f1 93 fmr f3, f1 94 95 subi N, N, 1 96 97 cmpwi cr0, INCX, 2 * SIZE 98 bne- cr0, LL(100) 99 100 srawi. r0, N, 3 101 mtspr CTR, r0 102 beq- cr0, LL(50) 103 .align 4 104 105 LFD f24, 0 * SIZE(X) 106 LFD f25, 1 * SIZE(X) 107 108 fabs f8, f24 109 LFD f26, 2 * SIZE(X) 110 fabs f9, f25 111 LFD f27, 3 * SIZE(X) 112 fabs f10, f26 113 LFD f28, 4 * SIZE(X) 114 fabs f11, f27 115 LFD f29, 5 * SIZE(X) 116 fabs f12, f28 117 LFD f30, 6 * SIZE(X) 118 fabs f13, f29 119 LFD f31, 7 * SIZE(X) 120 fabs f14, f30 121 nop 122 fabs f15, f31 123 bdz LL(20) 124 .align 4 125 126LL(10): 127 fadd f4, f8, f9 128 dcbt X, PREA 129 fadd f5, f10, f11 130 nop 131 fadd f6, f12, f13 132 LFD f24, 8 * SIZE(X) 133 fadd f7, f14, f15 134 LFD f25, 9 * SIZE(X) 135 136 fabs f8, f24 137 LFD f26, 10 * SIZE(X) 138 fabs f9, f25 139 LFD f27, 11 * SIZE(X) 140 fabs f10, f26 141 fabs f11, f27 142 143 fsub f16, f0, f4 144 fsub f17, f1, f5 145 fsub f18, f2, f6 146 LFD f28, 12 * SIZE(X) 147 fsub f19, f3, f7 148 LFD f29, 13 * SIZE(X) 149 150 fabs f12, f28 151 LFD f30, 14 * SIZE(X) 152 fabs f13, f29 153 LFD f31, 15 * SIZE(X) 154 fabs f14, f30 155 fabs f15, f31 156 157 fsel f0, f16, f4, f0 158 fsel f1, f17, f5, f1 159 fsel f2, f18, f6, f2 160 fsel f3, f19, f7, f3 161 162 fadd f20, f8, f9 163 fadd f21, f10, f11 164 fadd f22, f12, f13 165 LFD f24, 16 * SIZE(X) 166 fadd f23, f14, f15 167 LFD f25, 17 * SIZE(X) 168 169 fabs f8, f24 170 LFD f26, 18 * SIZE(X) 171 fabs f9, f25 172 LFD f27, 19 * SIZE(X) 173 fabs f10, f26 174 fabs f11, f27 175 176 fsub f16, f0, f20 177 fsub f17, f1, f21 178 fsub f18, f2, f22 179 LFD f28, 20 * SIZE(X) 180 fsub f19, f3, f23 181 LFD f29, 21 * SIZE(X) 182 183 fabs f12, f28 184 LFD f30, 22 * SIZE(X) 185 fabs f13, f29 186 LFD f31, 23 * SIZE(X) 187 fabs f14, f30 188 addi X, X, 16 * SIZE 189 fabs f15, f31 190 191 fsel f0, f16, f20, f0 192 fsel f1, f17, f21, f1 193 fsel f2, f18, f22, f2 194 fsel f3, f19, f23, f3 195 196 bdnz LL(10) 197 .align 4 198 199LL(20): 200 fadd f4, f8, f9 201 fadd f5, f10, f11 202 fadd f6, f12, f13 203 LFD f24, 8 * SIZE(X) 204 fadd f7, f14, f15 205 LFD f25, 9 * SIZE(X) 206 207 fabs f8, f24 208 LFD f26, 10 * SIZE(X) 209 fabs f9, f25 210 LFD f27, 11 * SIZE(X) 211 fabs f10, f26 212 fabs f11, f27 213 214 fsub f16, f0, f4 215 fsub f17, f1, f5 216 fsub f18, f2, f6 217 LFD f28, 12 * SIZE(X) 218 fsub f19, f3, f7 219 LFD f29, 13 * SIZE(X) 220 221 fabs f12, f28 222 LFD f30, 14 * SIZE(X) 223 fabs f13, f29 224 LFD f31, 15 * SIZE(X) 225 fabs f14, f30 226 fabs f15, f31 227 228 fsel f0, f16, f4, f0 229 fsel f1, f17, f5, f1 230 fsel f2, f18, f6, f2 231 fsel f3, f19, f7, f3 232 233 fadd f20, f8, f9 234 fadd f21, f10, f11 235 fadd f22, f12, f13 236 fadd f23, f14, f15 237 238 fsub f16, f0, f20 239 fsub f17, f1, f21 240 fsub f18, f2, f22 241 fsub f19, f3, f23 242 243 fsel f0, f16, f20, f0 244 fsel f1, f17, f21, f1 245 fsel f2, f18, f22, f2 246 fsel f3, f19, f23, f3 247 addi X, X, 16 * SIZE 248 249 .align 4 250 251LL(50): 252 andi. r0, N, 7 253 mtspr CTR, r0 254 beq LL(999) 255 .align 4 256 257LL(60): 258 LFD f8, 0 * SIZE(X) 259 LFD f9, 1 * SIZE(X) 260 addi X, X, 2 * SIZE 261 262 fabs f8, f8 263 fabs f9, f9 264 fadd f8, f8, f9 265 fsub f16, f1, f8 266 fsel f1, f16, f8, f1 267 bdnz LL(60) 268 b LL(999) 269 .align 4 270 271LL(100): 272 sub X, X, INCXM1 273 274 srawi. r0, N, 3 275 mtspr CTR, r0 276 beq- LL(150) 277 278 LFDX f24, X, INCXM1 279 LFDUX f25, X, INCX 280 LFDX f26, X, INCXM1 281 LFDUX f27, X, INCX 282 LFDX f28, X, INCXM1 283 LFDUX f29, X, INCX 284 LFDX f30, X, INCXM1 285 LFDUX f31, X, INCX 286 287 fabs f8, f24 288 fabs f9, f25 289 fabs f10, f26 290 fabs f11, f27 291 fabs f12, f28 292 fabs f13, f29 293 fabs f14, f30 294 fabs f15, f31 295 296 LFDX f24, X, INCXM1 297 LFDUX f25, X, INCX 298 LFDX f26, X, INCXM1 299 LFDUX f27, X, INCX 300 LFDX f28, X, INCXM1 301 LFDUX f29, X, INCX 302 LFDX f30, X, INCXM1 303 LFDUX f31, X, INCX 304 305 bdz LL(120) 306 .align 4 307 308LL(110): 309 fadd f4, f8, f9 310 fadd f5, f10, f11 311 fadd f6, f12, f13 312 fadd f7, f14, f15 313 314 fabs f8, f24 315 fabs f9, f25 316 fabs f10, f26 317 fabs f11, f27 318 319 LFDX f24, X, INCXM1 320 LFDUX f25, X, INCX 321 LFDX f26, X, INCXM1 322 LFDUX f27, X, INCX 323 324 fabs f12, f28 325 fabs f13, f29 326 fabs f14, f30 327 fabs f15, f31 328 329 LFDX f28, X, INCXM1 330 LFDUX f29, X, INCX 331 LFDX f30, X, INCXM1 332 LFDUX f31, X, INCX 333 334 fsub f16, f0, f4 335 fsub f17, f1, f5 336 fsub f18, f2, f6 337 fsub f19, f3, f7 338 339 fadd f20, f8, f9 340 fadd f21, f10, f11 341 fadd f22, f12, f13 342 fadd f23, f14, f15 343 344 fabs f8, f24 345 fabs f9, f25 346 fabs f10, f26 347 fabs f11, f27 348 349 LFDX f24, X, INCXM1 350 LFDUX f25, X, INCX 351 LFDX f26, X, INCXM1 352 LFDUX f27, X, INCX 353 354 fsel f0, f16, f4, f0 355 fsel f1, f17, f5, f1 356 fsel f2, f18, f6, f2 357 fsel f3, f19, f7, f3 358 359 fabs f12, f28 360 fabs f13, f29 361 fabs f14, f30 362 fabs f15, f31 363 364 LFDX f28, X, INCXM1 365 LFDUX f29, X, INCX 366 LFDX f30, X, INCXM1 367 LFDUX f31, X, INCX 368 369 fsub f16, f0, f20 370 fsub f17, f1, f21 371 fsub f18, f2, f22 372 fsub f19, f3, f23 373 374 fsel f0, f16, f20, f0 375 fsel f1, f17, f21, f1 376 fsel f2, f18, f22, f2 377 fsel f3, f19, f23, f3 378 bdnz LL(110) 379 .align 4 380 381LL(120): 382 fadd f4, f8, f9 383 fadd f5, f10, f11 384 fadd f6, f12, f13 385 fadd f7, f14, f15 386 387 fabs f8, f24 388 fabs f9, f25 389 fabs f10, f26 390 fabs f11, f27 391 392 fabs f12, f28 393 fabs f13, f29 394 fabs f14, f30 395 fabs f15, f31 396 397 fsub f16, f0, f4 398 fsub f17, f1, f5 399 fsub f18, f2, f6 400 fsub f19, f3, f7 401 402 fadd f20, f8, f9 403 fadd f21, f10, f11 404 fadd f22, f12, f13 405 fadd f23, f14, f15 406 407 fsel f0, f16, f4, f0 408 fsel f1, f17, f5, f1 409 fsel f2, f18, f6, f2 410 fsel f3, f19, f7, f3 411 412 fsub f16, f0, f20 413 fsub f17, f1, f21 414 fsub f18, f2, f22 415 fsub f19, f3, f23 416 417 fsel f0, f16, f20, f0 418 fsel f1, f17, f21, f1 419 fsel f2, f18, f22, f2 420 fsel f3, f19, f23, f3 421 .align 4 422 423LL(150): 424 andi. r0, N, 7 425 mtspr CTR, r0 426 beq LL(999) 427 .align 4 428 429LL(160): 430 LFDX f8, X, INCXM1 431 LFDUX f9, X, INCX 432 433 fabs f8, f8 434 fabs f9, f9 435 fadd f8, f8, f9 436 fsub f16, f1, f8 437 fsel f1, f16, f8, f1 438 bdnz LL(160) 439 .align 4 440 441LL(999): 442 fsub f8, f0, f1 443 fsub f9, f2, f3 444 445 fsel f0, f8, f1, f0 446 fsel f2, f9, f3, f2 447 fsub f8, f0, f2 448 fsel f1, f8, f2, f0 449 .align 4 450 451LL(9999): 452 lfd f14, 0(SP) 453 lfd f15, 8(SP) 454 lfd f16, 16(SP) 455 lfd f17, 24(SP) 456 457 lfd f18, 32(SP) 458 lfd f19, 40(SP) 459 lfd f20, 48(SP) 460 lfd f21, 56(SP) 461 462 lfd f22, 64(SP) 463 lfd f23, 72(SP) 464 lfd f24, 80(SP) 465 lfd f25, 88(SP) 466 467 lfd f26, 96(SP) 468 lfd f27, 104(SP) 469 lfd f28, 112(SP) 470 lfd f29, 120(SP) 471 472 lfd f30, 128(SP) 473 lfd f31, 136(SP) 474 475 addi SP, SP, STACKSIZE 476 blr 477 478 EPILOGUE 479