1/**********************************Zero Vectors**************************************************/ 2 3.macro ZERO_CVEC_8x4 4 vzero %v16 5 vzero %v17 6 vzero %v18 7 vzero %v19 8 vzero %v20 9 vzero %v21 10 vzero %v22 11 vzero %v23 12 vzero %v24 13 vzero %v25 14 vzero %v26 15 vzero %v27 16 vzero %v28 17 vzero %v29 18 vzero %v30 19 vzero %v31 20.endm 21 22 23.macro ZERO_CVEC_8x2 24 vzero %v16 25 vzero %v17 26 vzero %v18 27 vzero %v19 28 vzero %v20 29 vzero %v21 30 vzero %v22 31 vzero %v23 32 33.endm 34 35.macro ZERO_CVEC_8x1 36 vzero %v16 37 vzero %v17 38 vzero %v18 39 vzero %v19 40.endm 41 42.macro ZERO_CVEC_4x4 43 vzero %v16 44 vzero %v17 45 vzero %v20 46 vzero %v21 47 vzero %v24 48 vzero %v25 49 vzero %v28 50 vzero %v29 51.endm 52 53.macro ZERO_CVEC_4x2 54 vzero %v16 55 vzero %v17 56 vzero %v20 57 vzero %v21 58 59.endm 60 61.macro ZERO_CVEC_4x1 62 lzer %f1 63 lzer %f2 64 lzer %f3 65 lzer %f4 66.endm 67 68.macro ZERO_CVEC_2x4 69 vzero %v16 70 vzero %v17 71 vzero %v20 72 vzero %v21 73 74.endm 75 76.macro ZERO_CVEC_2x2 77 vzero %v16 78 vzero %v20 79 80.endm 81 82.macro ZERO_CVEC_2x1 83 lzer %f1 84 lzer %f2 85.endm 86 87.macro ZERO_CVEC_1x4 88 lzer %f1 89 lzer %f2 90 lzer %f3 91 lzer %f4 92.endm 93 94.macro ZERO_CVEC_1x2 95 lzer %f1 96 lzer %f2 97.endm 98 99.macro ZERO_CVEC_1x1 100 lzer %f1 101.endm 102 103 104/***********************************Helper Calculations*************************************/ 105#define unit_size 4 106#define DISP(ind,stride,disp) (ind*stride+disp) 107#define DISP8(ind,disp) (ind*unit_size*8+disp) 108#define DISP4(ind,disp) (ind*unit_size*4+disp) 109#define DISP2(ind,disp) (ind*unit_size*2+disp) 110#define DISP1(ind,disp) (ind*unit_size+disp) 111#define N8 (8*unit_size) 112#define N4 (4*unit_size) 113#define N2 (2*unit_size) 114#define N1 (1*unit_size) 115 116.macro Calculate_8x4_I PTR_A_REG,PTR_B_REG,Index,IsLast 117 vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG) 118 vmrhf %v3,%v1,%v1 119 vmrhf %v5,%v2,%v2 120 vmrlf %v4,%v1,%v1 121 vmrlf %v6,%v2,%v2 122 vldeb %v3, %v3 123 vldeb %v4, %v4 124 vldeb %v5, %v5 125 vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG) 126 vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG) 127 vldeb %v6, %v6 128 vldeb %v7, %v7 129 vldeb %v1, %v1 130 131 132 vfmadb %v16,%v3,%v7,%v16 133 vfmadb %v17,%v4,%v7,%v17 134 vfmadb %v18,%v5,%v7,%v18 135 vfmadb %v19,%v6,%v7,%v19 136 vfmadb %v20,%v3,%v1,%v20 137 vfmadb %v21,%v4,%v1,%v21 138 vfmadb %v22,%v5,%v1,%v22 139 vfmadb %v23,%v6,%v1,%v23 140 vlrepf %v2, DISP4(\Index ,8)(\PTR_B_REG) 141 vlrepf %v7, DISP4(\Index ,12)(\PTR_B_REG) 142 vldeb %v2, %v2 143 vldeb %v7, %v7 144 .if \IsLast==1 145 la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG) 146 .endif 147 vfmadb %v24,%v3,%v2,%v24 148 vfmadb %v25,%v4,%v2,%v25 149 vfmadb %v26,%v5,%v2,%v26 150 vfmadb %v27,%v6,%v2,%v27 151 vfmadb %v28,%v3,%v7,%v28 152 vfmadb %v29,%v4,%v7,%v29 153 vfmadb %v30,%v5,%v7,%v30 154 vfmadb %v31,%v6,%v7,%v31 155 .if \IsLast==1 156 la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG) 157 .endif 158.endm 159 160.macro Calculate_8x2_I PTR_A_REG,PTR_B_REG,Index,IsLast 161 vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG) 162 vmrhf %v3,%v1,%v1 163 vmrhf %v5,%v2,%v2 164 vmrlf %v4,%v1,%v1 165 vmrlf %v6,%v2,%v2 166 vldeb %v3, %v3 167 vldeb %v4, %v4 168 vldeb %v5, %v5 169 vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG) 170 vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG) 171 vldeb %v6, %v6 172 vldeb %v7, %v7 173 vldeb %v1, %v1 174 vfmadb %v16,%v3,%v7,%v16 175 vfmadb %v17,%v4,%v7,%v17 176 vfmadb %v18,%v5,%v7,%v18 177 vfmadb %v19,%v6,%v7,%v19 178 vfmadb %v20,%v3,%v1,%v20 179 vfmadb %v21,%v4,%v1,%v21 180 .if \IsLast==1 181 la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG) 182 .endif 183 vfmadb %v22,%v5,%v1,%v22 184 vfmadb %v23,%v6,%v1,%v23 185 .if \IsLast==1 186 la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG) 187 .endif 188.endm 189 190.macro Calculate_8x1_I PTR_A_REG,PTR_B_REG,Index,IsLast 191 vlm %v1,%v2, DISP8(\Index , 0)(\PTR_A_REG) 192 vmrhf %v3,%v1,%v1 193 vmrhf %v5,%v2,%v2 194 vmrlf %v4,%v1,%v1 195 vmrlf %v6,%v2,%v2 196 vldeb %v3, %v3 197 vldeb %v4, %v4 198 vldeb %v5, %v5 199 vlrepf %v7, DISP1(\Index ,0)(\PTR_B_REG) 200 vldeb %v6, %v6 201 vldeb %v7, %v7 202 vfmadb %v16,%v3,%v7,%v16 203 .if \IsLast==1 204 la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG) 205 .endif 206 207 vfmadb %v17,%v4,%v7,%v17 208 vfmadb %v18,%v5,%v7,%v18 209 vfmadb %v19,%v6,%v7,%v19 210 .if \IsLast==1 211 la \PTR_A_REG, DISP8(\Index ,N8)(\PTR_A_REG) 212 .endif 213.endm 214 215.macro Calculate_4x4_I PTR_A_REG,PTR_B_REG,Index,IsLast 216 vl %v5, DISP4(\Index , 0)(\PTR_A_REG) 217 vlrepf %v7, DISP4(\Index ,0)(\PTR_B_REG) 218 vlrepf %v1, DISP4(\Index ,4)(\PTR_B_REG) 219 vmrhf %v2,%v5,%v5 220 vmrlf %v3,%v5,%v5 221 vldeb %v2, %v2 222 vldeb %v3, %v3 223 vldeb %v7, %v7 224 vldeb %v1, %v1 225 vfmadb %v16,%v2,%v7,%v16 226 vfmadb %v17,%v3,%v7,%v17 227 vfmadb %v20,%v2,%v1,%v20 228 vfmadb %v21,%v3,%v1,%v21 229 vlrepf %v7, DISP4(\Index ,8)(\PTR_B_REG) 230 vlrepf %v1, DISP4(\Index ,12)(\PTR_B_REG) 231 vldeb %v7, %v7 232 vldeb %v1, %v1 233 .if \IsLast==1 234 la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG) 235 .endif 236 vfmadb %v24,%v2,%v7,%v24 237 vfmadb %v25,%v3,%v7,%v25 238 vfmadb %v28,%v2,%v1,%v28 239 vfmadb %v29,%v3,%v1,%v29 240 .if \IsLast==1 241 la \PTR_B_REG, DISP4(\Index ,N4)(\PTR_B_REG) 242 .endif 243.endm 244 245.macro Calculate_4x2_I PTR_A_REG,PTR_B_REG,Index,IsLast 246 vl %v5, DISP4(\Index , 0)(\PTR_A_REG) 247 vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG) 248 vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG) 249 vmrhf %v2,%v5,%v5 250 vmrlf %v3,%v5,%v5 251 vldeb %v2, %v2 252 vldeb %v3, %v3 253 vldeb %v7, %v7 254 vldeb %v1, %v1 255 vfmadb %v16,%v2,%v7,%v16 256 vfmadb %v17,%v3,%v7,%v17 257 .if \IsLast==1 258 la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG) 259 .endif 260 vfmadb %v20,%v2,%v1,%v20 261 vfmadb %v21,%v3,%v1,%v21 262 .if \IsLast==1 263 la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG) 264 .endif 265.endm 266 267.macro Calculate_4x1_I PTR_A_REG,PTR_B_REG,Index,IsLast 268 le %f5,DISP1(\Index ,0)(\PTR_B_REG) 269 maeb %f1,%f5,DISP4(\Index ,0)(\PTR_A_REG) 270 maeb %f2,%f5,DISP4(\Index ,4)(\PTR_A_REG) 271 .if \IsLast==1 272 la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG) 273 .endif 274 maeb %f3,%f5,DISP4(\Index ,8)(\PTR_A_REG) 275 maeb %f4,%f5,DISP4(\Index ,12)(\PTR_A_REG) 276 .if \IsLast==1 277 la \PTR_A_REG, DISP4(\Index ,N4)(\PTR_A_REG) 278 .endif 279.endm 280 281.macro Calculate_2x2_I PTR_A_REG,PTR_B_REG,Index,IsLast 282 vlrepf %v7, DISP2(\Index ,0)(\PTR_B_REG) 283 vlrepf %v1, DISP2(\Index ,4)(\PTR_B_REG) 284 vlef %v2, DISP2(\Index ,0)(\PTR_A_REG) ,0 285 vlef %v2, DISP2(\Index ,4)(\PTR_A_REG) ,2 286 vldeb %v7, %v7 287 vldeb %v2,%v2 288 vldeb %v1, %v1 289 290 vfmadb %v16,%v2,%v7,%v16 291 .if \IsLast==1 292 la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG) 293 .endif 294 vfmadb %v20,%v2,%v1,%v20 295 .if \IsLast==1 296 la \PTR_B_REG, DISP2(\Index ,N2)(\PTR_B_REG) 297 .endif 298.endm 299 300 301 302.macro Calculate_2x1_I PTR_A_REG,PTR_B_REG,Index,IsLast 303 304 le %f3,DISP1(\Index ,0)(\PTR_B_REG) 305 maeb %f1,%f3,DISP2(\Index ,0)(\PTR_A_REG) 306 .if \IsLast==1 307 la \PTR_B_REG, DISP1(\Index ,N1)(\PTR_B_REG) 308 .endif 309 maeb %f2, %f3,DISP2(\Index ,4)(\PTR_A_REG) 310 .if \IsLast==1 311 la \PTR_A_REG, DISP2(\Index ,N2)(\PTR_A_REG) 312 .endif 313.endm 314 315.macro Calculate_1x1_I PTR_A_REG,PTR_B_REG,Index,IsLast 316 le %f2,DISP1(\Index ,0)(\PTR_A_REG) /**a*/ 317 .if \IsLast==1 318 la \PTR_A_REG,DISP1(\Index ,N1)(\PTR_A_REG) 319 .endif 320 maeb %f1,%f2,DISP1(\Index ,0)(\PTR_B_REG) 321 .if \IsLast==1 322 la \PTR_B_REG,DISP1(\Index ,N1)(\PTR_B_REG) 323 .endif 324.endm 325 326.macro CALC_8x4 PTR_A_REG,PTR_B_REG 327 Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,0,1 328.endm 329 330.macro CALC_8x4_4 PTR_A_REG,PTR_B_REG 331 Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,0,0 332 Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,1,0 333 Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,2,0 334 Calculate_8x4_I \PTR_A_REG,\PTR_B_REG,3,1 335.endm 336 337.macro CALC_8x2 PTR_A_REG,PTR_B_REG 338 Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,0,1 339.endm 340 341.macro CALC_8x2_4 PTR_A_REG,PTR_B_REG 342 Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,0,0 343 Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,1,0 344 Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,2,0 345 Calculate_8x2_I \PTR_A_REG,\PTR_B_REG,3,1 346.endm 347 348.macro CALC_8x1 PTR_A_REG,PTR_B_REG 349 Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,0,1 350.endm 351 352.macro CALC_8x1_4 PTR_A_REG,PTR_B_REG 353 Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,0,0 354 Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,1,0 355 Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,2,0 356 Calculate_8x1_I \PTR_A_REG,\PTR_B_REG,3,1 357.endm 358 359.macro CALC_4x4 PTR_A_REG,PTR_B_REG 360 Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,0,1 361.endm 362 363.macro CALC_4x4_4 PTR_A_REG,PTR_B_REG 364 Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,0,0 365 Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,1,0 366 Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,2,0 367 Calculate_4x4_I \PTR_A_REG,\PTR_B_REG,3,1 368.endm 369 370.macro CALC_4x2 PTR_A_REG,PTR_B_REG 371 Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,0,1 372.endm 373 374.macro CALC_4x2_4 PTR_A_REG,PTR_B_REG 375 Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,0,0 376 Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,1,0 377 Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,2,0 378 Calculate_4x2_I \PTR_A_REG,\PTR_B_REG,3,1 379.endm 380 381.macro CALC_4x1 PTR_A_REG,PTR_B_REG 382 Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,0,1 383.endm 384 385.macro CALC_4x1_4 PTR_A_REG,PTR_B_REG 386 Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,0,0 387 Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,1,0 388 Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,2,0 389 Calculate_4x1_I \PTR_A_REG,\PTR_B_REG,3,1 390.endm 391 392.macro CALC_2x4 PTR_A_REG,PTR_B_REG 393 Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,0,1 394.endm 395 396.macro CALC_2x4_4 PTR_A_REG,PTR_B_REG 397 Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,0,0 398 Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,1,0 399 Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,2,0 400 Calculate_4x2_I \PTR_B_REG,\PTR_A_REG,3,1 401.endm 402 403.macro CALC_2x2 PTR_A_REG,PTR_B_REG 404 Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,0,1 405.endm 406 407.macro CALC_2x2_4 PTR_A_REG,PTR_B_REG 408 Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,0,0 409 Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,1,0 410 Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,2,0 411 Calculate_2x2_I \PTR_A_REG,\PTR_B_REG,3,1 412.endm 413 414.macro CALC_2x1 PTR_A_REG,PTR_B_REG 415 Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,0,1 416.endm 417 418.macro CALC_2x1_4 PTR_A_REG,PTR_B_REG 419 Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,0,0 420 Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,1,0 421 Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,2,0 422 Calculate_2x1_I \PTR_A_REG,\PTR_B_REG,3,1 423.endm 424 425.macro CALC_1x4 PTR_A_REG,PTR_B_REG 426 Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,0,1 427.endm 428 429.macro CALC_1x4_4 PTR_A_REG,PTR_B_REG 430 Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,0,0 431 Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,1,0 432 Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,2,0 433 Calculate_4x1_I \PTR_B_REG,\PTR_A_REG,3,1 434.endm 435 436.macro CALC_1x2 PTR_A_REG,PTR_B_REG 437 Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,0,1 438.endm 439 440.macro CALC_1x2_4 PTR_A_REG,PTR_B_REG 441 Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,0,0 442 Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,1,0 443 Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,2,0 444 Calculate_2x1_I \PTR_B_REG,\PTR_A_REG,3,1 445.endm 446 447.macro CALC_1x1 PTR_A_REG,PTR_B_REG 448 Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,0,1 449.endm 450 451.macro CALC_1x1_4 PTR_A_REG,PTR_B_REG 452 Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,0,0 453 Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,1,0 454 Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,2,0 455 Calculate_1x1_I \PTR_A_REG,\PTR_B_REG,3,1 456.endm 457 458 459/**************************************STORAGE*************************************************/ 460 461 462.macro Multiply_8x1 vr1,vr2,vr3,vr4,va1,va2,va3,va4,vb1 463 #if defined(TRMMKERNEL) 464 vfmdb \vr1,\va1,\vb1 465 vfmdb \vr2,\va2,\vb1 466 vfmdb \vr3,\va3,\vb1 467 vfmdb \vr4,\va4,\vb1 468 #else 469 vfmadb \vr1,\va1,\vb1,\vr1 470 vfmadb \vr2,\va2,\vb1,\vr2 471 vfmadb \vr3,\va3,\vb1,\vr3 472 vfmadb \vr4,\va4,\vb1,\vr4 473 #endif 474.endm 475 476.macro Multiply_4x1 vr1,vr2, va1,va2, vb1 477 #if defined(TRMMKERNEL) 478 vfmdb \vr1,\va1,\vb1 479 vfmdb \vr2,\va2,\vb1 480 #else 481 vfmadb \vr1,\va1,\vb1,\vr1 482 vfmadb \vr2,\va2,\vb1,\vr2 483 #endif 484.endm 485 486.macro Multiply_2x1 vr1, va1,vb1 487 #if defined(TRMMKERNEL) 488 vfmdb \vr1,\va1,\vb1 489 #else 490 vfmadb \vr1,\va1,\vb1,\vr1 491 #endif 492.endm 493 494 495.macro STORE_8x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2 496 la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL) 497#if !defined(TRMMKERNEL) 498 vl %v5, 0(\CIJ_REG) 499 vl %v1 , 16(\CIJ_REG) 500 vmrhf %v2,%v5,%v5 501 vmrhf %v4,%v1,%v1 502 vmrlf %v3,%v5,%v5 503 vldeb %v2, %v2 504 vldeb %v3, %v3 505 vldeb %v4, %v4 506 vmrlf %v5,%v1,%v1 507 vldeb %v5, %v5 508#endif 509 Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG 510 vledb %v2, %v2,0,0 511 vledb %v3, %v3,0,0 512 vledb %v4, %v4,0,0 513 vledb %v5, %v5,0,0 514 vstef %v2, 0(\CIJ_REG),0 515 vstef %v2, 4(\CIJ_REG),2 516 vstef %v3, 8(\CIJ_REG),0 517 vstef %v3, 12(\CIJ_REG),2 518 vstef %v4, 16(\CIJ_REG),0 519 vstef %v4, 20(\CIJ_REG),2 520 vstef %v5, 24(\CIJ_REG),0 521 vstef %v5, 28(\CIJ_REG),2 522 523 524 la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL ) 525#if !defined(TRMMKERNEL) 526 vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 527 vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL) 528 vmrhf %v2,%v16,%v16 529 vmrhf %v4,%v17,%v17 530 vmrlf %v3,%v16,%v16 531 vldeb %v2, %v2 532 vldeb %v3, %v3 533 vldeb %v4, %v4 534 vmrlf %v5,%v17,%v17 535 vldeb %v5, %v5 536#endif 537 Multiply_8x1 %v2,%v3,%v4,%v5, %v20,%v21,%v22,%v23 ,\ALPHA_VECREG 538 vledb %v2, %v2,0,0 539 vledb %v3, %v3,0,0 540 vledb %v4, %v4,0,0 541 vledb %v5, %v5,0,0 542 vstef %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 543 vstef %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 544 vstef %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 545 vstef %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 546 vstef %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 547 vstef %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 548 vstef %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 549 vstef %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 550 551 #if !defined(TRMMKERNEL) 552 vl %v17,0(\CIJ_REG,\LV1) 553 vl %v18,16(\CIJ_REG,\LV1) 554 vmrhf %v2,%v17,%v17 555 vmrhf %v4,%v18,%v18 556 vmrlf %v3,%v17,%v17 557 vldeb %v2, %v2 558 vldeb %v3, %v3 559 vldeb %v4, %v4 560 vmrlf %v5,%v18,%v18 561 vldeb %v5, %v5 562#endif 563 Multiply_8x1 %v2,%v3,%v4,%v5, %v24,%v25,%v26,%v27 ,\ALPHA_VECREG 564 vledb %v2, %v2,0,0 565 vledb %v3, %v3,0,0 566 vledb %v4, %v4,0,0 567 vledb %v5, %v5,0,0 568 vstef %v2, 0(\CIJ_REG,\LV1),0 569 vstef %v2, 4(\CIJ_REG,\LV1),2 570 vstef %v3, 8(\CIJ_REG,\LV1),0 571 vstef %v3, 12(\CIJ_REG,\LV1),2 572 vstef %v4, 16(\CIJ_REG,\LV1),0 573 vstef %v4, 20(\CIJ_REG,\LV1),2 574 vstef %v5, 24(\CIJ_REG,\LV1),0 575 vstef %v5, 28(\CIJ_REG,\LV1),2 576 577#if !defined(TRMMKERNEL) 578 vl %v16,0(\CIJ_REG,\LV2) 579 vl %v17,16(\CIJ_REG,\LV2) 580 vmrhf %v2,%v16,%v16 581 vmrhf %v4,%v17,%v17 582 vmrlf %v3,%v16,%v16 583 vldeb %v2, %v2 584 vldeb %v3, %v3 585 vldeb %v4, %v4 586 vmrlf %v5,%v17,%v17 587 vldeb %v5, %v5 588#endif 589 Multiply_8x1 %v2,%v3,%v4,%v5, %v28,%v29,%v30,%v31 ,\ALPHA_VECREG 590 vledb %v2, %v2,0,0 591 vledb %v3, %v3,0,0 592 vledb %v4, %v4,0,0 593 vledb %v5, %v5,0,0 594 vstef %v2, 0(\CIJ_REG,\LV2),0 595 vstef %v2, 4(\CIJ_REG,\LV2),2 596 vstef %v3, 8(\CIJ_REG,\LV2),0 597 vstef %v3, 12(\CIJ_REG,\LV2),2 598 vstef %v4, 16(\CIJ_REG,\LV2),0 599 vstef %v4, 20(\CIJ_REG,\LV2),2 600 vstef %v5, 24(\CIJ_REG,\LV2),0 601 vstef %v5, 28(\CIJ_REG,\LV2),2 602 603 la \CIJ_REG,N8(\CIJ_REG) 604 605.endm 606 607.macro STORE_8x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL 608#if !defined(TRMMKERNEL) 609 vl %v5, 0(\CIJ_REG) 610 vl %v1 , 16(\CIJ_REG) 611 vmrhf %v2,%v5,%v5 612 vmrhf %v4,%v1,%v1 613 vmrlf %v3,%v5,%v5 614 vldeb %v2, %v2 615 vldeb %v3, %v3 616 vldeb %v4, %v4 617 vmrlf %v5,%v1,%v1 618 vldeb %v5, %v5 619#endif 620 Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG 621 vledb %v2, %v2,0,0 622 vledb %v3, %v3,0,0 623 vledb %v4, %v4,0,0 624 vledb %v5, %v5,0,0 625 vstef %v2, 0(\CIJ_REG),0 626 vstef %v2, 4(\CIJ_REG),2 627 vstef %v3, 8(\CIJ_REG),0 628 vstef %v3, 12(\CIJ_REG),2 629 vstef %v4, 16(\CIJ_REG),0 630 vstef %v4, 20(\CIJ_REG),2 631 vstef %v5, 24(\CIJ_REG),0 632 vstef %v5, 28(\CIJ_REG),2 633 634#if !defined(TRMMKERNEL) 635 vl %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 636 vl %v17,16(\CIJ_REG,\LDC_BYTE_ORIGINAL) 637 vmrhf %v2,%v16,%v16 638 vmrhf %v4,%v17,%v17 639 vmrlf %v3,%v16,%v16 640 vldeb %v2, %v2 641 vldeb %v3, %v3 642 vldeb %v4, %v4 643 vmrlf %v5,%v17,%v17 644 vldeb %v5, %v5 645#endif 646 Multiply_8x1 %v2,%v3,%v4,%v5, %v20,%v21,%v22,%v23 ,\ALPHA_VECREG 647 vledb %v2, %v2,0,0 648 vledb %v3, %v3,0,0 649 vledb %v4, %v4,0,0 650 vledb %v5, %v5,0,0 651 vstef %v2, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 652 vstef %v2, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 653 vstef %v3, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 654 vstef %v3, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 655 vstef %v4, 16(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 656 vstef %v4, 20(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 657 vstef %v5, 24(\CIJ_REG,\LDC_BYTE_ORIGINAL),0 658 vstef %v5, 28(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 659 660 la \CIJ_REG,N8(\CIJ_REG) 661 662.endm 663 664.macro STORE_8x1 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL 665 666#if !defined(TRMMKERNEL) 667 vl %v5, 0(\CIJ_REG) 668 vl %v1 , 16(\CIJ_REG) 669 vmrhf %v2,%v5,%v5 670 vmrhf %v4,%v1,%v1 671 vmrlf %v3,%v5,%v5 672 vldeb %v2, %v2 673 vldeb %v3, %v3 674 vldeb %v4, %v4 675 vmrlf %v5,%v1,%v1 676 vldeb %v5, %v5 677#endif 678 Multiply_8x1 %v2,%v3,%v4,%v5, %v16,%v17,%v18,%v19 ,\ALPHA_VECREG 679 vledb %v2, %v2,0,0 680 vledb %v3, %v3,0,0 681 vledb %v4, %v4,0,0 682 vledb %v5, %v5,0,0 683 vstef %v2, 0(\CIJ_REG),0 684 vstef %v2, 4(\CIJ_REG),2 685 vstef %v3, 8(\CIJ_REG),0 686 vstef %v3, 12(\CIJ_REG),2 687 vstef %v4, 16(\CIJ_REG),0 688 vstef %v4, 20(\CIJ_REG),2 689 vstef %v5, 24(\CIJ_REG),0 690 vstef %v5, 28(\CIJ_REG),2 691 692 la \CIJ_REG,N8(\CIJ_REG) 693.endm 694 695 696.macro STORE_4x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL, LV1 ,LV2 697 la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL) 698#if !defined(TRMMKERNEL) 699 vl %v5, 0(\CIJ_REG) 700 vmrhf %v1,%v5,%v5 701 vmrlf %v2,%v5,%v5 702 vldeb %v1, %v1 703 vldeb %v2, %v2 704 705#endif 706 Multiply_4x1 %v1,%v2 , %v16,%v17 ,\ALPHA_VECREG 707 vledb %v1, %v1,0,0 708 vledb %v2, %v2,0,0 709 vstef %v1, 0(\CIJ_REG),0 710 vstef %v1, 4(\CIJ_REG),2 711 vstef %v2, 8(\CIJ_REG),0 712 vstef %v2, 12(\CIJ_REG),2 713 714 la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL ) 715#if !defined(TRMMKERNEL) 716 vl %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ) 717 vmrhf %v16,%v5,%v5 718 vmrlf %v17,%v5,%v5 719 vldeb %v16, %v16 720 vldeb %v17, %v17 721#endif 722 Multiply_4x1 %v16,%v17 , %v20,%v21 ,\ALPHA_VECREG 723 vledb %v1, %v16,0,0 724 vledb %v2, %v17,0,0 725 vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0 726 vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 727 vstef %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0 728 vstef %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 729 730 #if !defined(TRMMKERNEL) 731 vl %v5, 0(\CIJ_REG,\LV1 ) 732 vmrhf %v16,%v5,%v5 733 vmrlf %v17,%v5,%v5 734 vldeb %v16, %v16 735 vldeb %v17, %v17 736#endif 737 Multiply_4x1 %v16,%v17 , %v24,%v25 ,\ALPHA_VECREG 738 vledb %v1, %v16,0,0 739 vledb %v2, %v17,0,0 740 vstef %v1, 0(\CIJ_REG,\LV1 ),0 741 vstef %v1, 4(\CIJ_REG,\LV1 ),2 742 vstef %v2, 8(\CIJ_REG,\LV1 ),0 743 vstef %v2, 12(\CIJ_REG,\LV1 ),2 744 745#if !defined(TRMMKERNEL) 746 vl %v5, 0(\CIJ_REG,\LV2 ) 747 vmrhf %v16,%v5,%v5 748 vmrlf %v17,%v5,%v5 749 vldeb %v16, %v16 750 vldeb %v17, %v17 751#endif 752 Multiply_4x1 %v16,%v17, %v28,%v29 ,\ALPHA_VECREG 753 vledb %v1, %v16,0,0 754 vledb %v2, %v17,0,0 755 vstef %v1, 0(\CIJ_REG,\LV2 ),0 756 vstef %v1, 4(\CIJ_REG,\LV2 ),2 757 vstef %v2, 8(\CIJ_REG,\LV2 ),0 758 vstef %v2, 12(\CIJ_REG,\LV2 ),2 759 760 la \CIJ_REG,N4(\CIJ_REG) 761 762.endm 763 764 765.macro STORE_4x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL 766 767#if !defined(TRMMKERNEL) 768 vl %v5, 0(\CIJ_REG) 769 vmrhf %v1,%v5,%v5 770 vmrlf %v2,%v5,%v5 771 vldeb %v1, %v1 772 vldeb %v2, %v2 773 774#endif 775 Multiply_4x1 %v1,%v2 , %v16,%v17 ,\ALPHA_VECREG 776 vledb %v1, %v1,0,0 777 vledb %v2, %v2,0,0 778 vstef %v1, 0(\CIJ_REG),0 779 vstef %v1, 4(\CIJ_REG),2 780 vstef %v2, 8(\CIJ_REG),0 781 vstef %v2, 12(\CIJ_REG),2 782 783#if !defined(TRMMKERNEL) 784 vl %v5, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ) 785 vmrhf %v16,%v5,%v5 786 vmrlf %v17,%v5,%v5 787 vldeb %v16, %v16 788 vldeb %v17, %v17 789#endif 790 Multiply_4x1 %v16,%v17 , %v20,%v21 ,\ALPHA_VECREG 791 vledb %v1, %v16,0,0 792 vledb %v2, %v17,0,0 793 vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0 794 vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 795 vstef %v2, 8(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0 796 vstef %v2, 12(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 797 798 799 la \CIJ_REG,N4(\CIJ_REG) 800 801.endm 802 803.macro STORE_4x1 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL 804 ledbr %f7,\ALPHA_FLOAT 805#if defined(TRMMKERNEL) 806 meebr %f1,%f7 807 meebr %f2,%f7 808 meebr %f3,%f7 809 meebr %f4,%f7 810 ste %f1,0(\CIJ_REG) 811 ste %f2,4(\CIJ_REG ) 812 ste %f3,8(\CIJ_REG ) 813 ste %f4,12(\CIJ_REG) 814#else 815 le %f5,0(\CIJ_REG) 816 maebr %f5,%f1,%f7 817 ste %f5,0(\CIJ_REG) 818 819 820 le %f6,4(\CIJ_REG ) 821 maebr %f6,%f2,%f7 822 ste %f6,4(\CIJ_REG ) 823 824 le %f5,8(\CIJ_REG) 825 maebr %f5,%f3,%f7 826 ste %f5,8(\CIJ_REG) 827 828 le %f6,12(\CIJ_REG) 829 maebr %f6,%f4,%f7 830 ste %f6,12(\CIJ_REG) 831#endif 832 833 la \CIJ_REG,N4(\CIJ_REG) 834 835.endm 836 837.macro STORE_2x2 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL 838 839#if !defined(TRMMKERNEL) 840 vlef %v1,0(\CIJ_REG) ,0 841 vlef %v1,4(\CIJ_REG) ,2 842 vldeb %v1,%v1 843 844#endif 845 Multiply_2x1 %v1, %v16,\ALPHA_VECREG 846 vledb %v1, %v1,0,0 847 vstef %v1, 0(\CIJ_REG),0 848 vstef %v1, 4(\CIJ_REG),2 849 850#if !defined(TRMMKERNEL) 851 vlef %v16,0(\CIJ_REG,\LDC_BYTE_ORIGINAL ) ,0 852 vlef %v16,4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 853 vldeb %v16,%v16 854#endif 855 Multiply_2x1 %v16, %v20,\ALPHA_VECREG 856 vledb %v1, %v16,0,0 857 vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL ),0 858 vstef %v1, 4(\CIJ_REG,\LDC_BYTE_ORIGINAL ),2 859 860 la \CIJ_REG,N2(\CIJ_REG) 861 862.endm 863 864 865.macro STORE_2x1 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL 866 ledbr %f3,\ALPHA_FLOAT 867#if defined(TRMMKERNEL) 868 meebr %f1,%f3 869 meebr %f2,%f3 870 ste %f1,0(\CIJ_REG) 871 ste %f2,4(\CIJ_REG) 872#else 873 le %f4,0(\CIJ_REG) 874 le %f5,4(\CIJ_REG) 875 maebr %f4,%f1,%f3 876 maebr %f5,%f2,%f3 877 ste %f4,0(\CIJ_REG) 878 ste %f5,4(\CIJ_REG) 879#endif 880 881 la \CIJ_REG,N2(\CIJ_REG) 882.endm 883 884 885/*STORE C1X1*/ 886.macro STORE_1x1 ALPHA_FLOAT,CIJ_REG,LDC_BYTE_ORIGINAL 887 ledbr %f3,\ALPHA_FLOAT 888#if defined(TRMMKERNEL) 889 meebr %f1,%f3 890 ste %f1,0(\CIJ_REG) 891#else 892 le %f2,0(\CIJ_REG) 893 maebr %f2,%f1,%f3 894 ste %f2,0(\CIJ_REG) 895#endif 896 la \CIJ_REG,N1(\CIJ_REG) 897.endm 898 899/*reversed ones*/ 900 901.macro STORE_2x4 ALPHA_VECREG,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2 902#if !defined(TRMMKERNEL) 903 vlef %v1,0(\CIJ_REG) ,0 904 vlef %v1,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2 905 vldeb %v1,%v1 906#endif 907 la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL) 908 Multiply_2x1 %v1, %v16 ,\ALPHA_VECREG 909 910 la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL ) 911 vledb %v1, %v1,0,0 912 vstef %v1, 0(\CIJ_REG),0 913 vstef %v1, 0(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 914 915#if !defined(TRMMKERNEL) 916 vlef %v16,0(\CIJ_REG,\LV1 ) ,0 917 vlef %v16,0(\CIJ_REG,\LV2 ),2 918 vldeb %v16,%v16 919#endif 920 Multiply_2x1 %v16, %v17,\ALPHA_VECREG 921 vledb %v1, %v16,0,0 922 vstef %v1, 0(\CIJ_REG ,\LV1 ),0 923 vstef %v1, 0(\CIJ_REG,\LV2 ),2 924/*2nd*/ 925#if !defined(TRMMKERNEL) 926 vlef %v1,4(\CIJ_REG) ,0 927 vlef %v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL) ,2 928 vldeb %v1,%v1 929 930#endif 931 Multiply_2x1 %v1, %v20 ,\ALPHA_VECREG 932 vledb %v1, %v1,0,0 933 vstef %v1, 4(\CIJ_REG),0 934 vstef %v1,4(\CIJ_REG,\LDC_BYTE_ORIGINAL),2 935 936#if !defined(TRMMKERNEL) 937 vlef %v16,4(\CIJ_REG,\LV1 ) ,0 938 vlef %v16,4(\CIJ_REG,\LV2 ),2 939 vldeb %v16,%v16 940#endif 941 Multiply_2x1 %v16, %v21,\ALPHA_VECREG 942 vledb %v1, %v16,0,0 943 vstef %v1, 4(\CIJ_REG ,\LV1 ),0 944 vstef %v1, 4(\CIJ_REG,\LV2 ),2 945 946 la \CIJ_REG,N2(\CIJ_REG) 947 948.endm 949 950.macro STORE_1x4 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL , LV1 ,LV2 951 952 la \LV1,0(\LDC_BYTE_ORIGINAL, \LDC_BYTE_ORIGINAL) 953 ledbr %f7,\ALPHA_FLOAT 954 la \LV2,0(\LV1,\LDC_BYTE_ORIGINAL ) 955#if defined(TRMMKERNEL) 956 meebr %f1,%f7 957 meebr %f2,%f7 958 meebr %f3,%f7 959 meebr %f4,%f7 960 ste %f1,0(\CIJ_REG) 961 ste %f2,0(\CIJ_REG, \LDC_BYTE_ORIGINAL) 962 ste %f3,0(\CIJ_REG, \LV1) 963 ste %f4,0(\CIJ_REG, \LV2) 964#else 965 le %f5,0(\CIJ_REG) 966 maebr %f5,%f1,%f7 967 ste %f5,0(\CIJ_REG) 968 969 le %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 970 maebr %f6,%f2,%f7 971 ste %f6,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 972 973 le %f5,0(\CIJ_REG, \LV1) 974 maebr %f5,%f3,%f7 975 ste %f5,0(\CIJ_REG, \LV1) 976 977 le %f6,0(\CIJ_REG, \LV2) 978 maebr %f6,%f4,%f7 979 ste %f6,0(\CIJ_REG, \LV2) 980#endif 981 982 la \CIJ_REG,N1(\CIJ_REG) 983 984.endm 985 986 .macro STORE_1x2 ALPHA_FLOAT,CIJ_REG , LDC_BYTE_ORIGINAL 987 ledbr %f3,\ALPHA_FLOAT 988#if defined(TRMMKERNEL) 989 meebr %f1,%f3 990 meebr %f2,%f3 991 ste %f1,0(\CIJ_REG) 992 ste %f2,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 993#else 994 le %f4,0(\CIJ_REG) 995 maebr %f4,%f1,%f3 996 ste %f4,0(\CIJ_REG) 997 998 le %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 999 maebr %f5,%f2,%f3 1000 ste %f5,0(\CIJ_REG,\LDC_BYTE_ORIGINAL) 1001#endif 1002 1003 1004 la \CIJ_REG,N1(\CIJ_REG) 1005 1006.endm 1007 1008 1009 1010 1011/****************************TRMM POINTER REFRESH MACROSES*************************/ 1012 1013.macro RefreshPointers PTR_A,PTR_B,OFF_VAL,B_VAL,C_A,C_B 1014 #if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA)) 1015 /* ptrbb = bb;*/ 1016 lgr \PTR_B,\B_VAL /*refresh BPOINT*/ 1017 1018 #else 1019 /* ptrba =ptrba+ off*C_A; 1020 ptrbb = bb + off*C_B;*/ 1021.if \C_B==4 1022 .if \C_A==8 1023 sllg \PTR_B, \OFF_VAL,4 1024 la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*4*/ 1025 agr \PTR_A,\PTR_B /*ptrba+off*4**/ 1026 la \PTR_B,0(\B_VAL,\PTR_B) 1027 .elseif \C_A==4 1028 sllg \PTR_B, \OFF_VAL,4 1029 agr \PTR_A,\PTR_B /*ptrba+off*4**/ 1030 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1031 .elseif \C_A==2 1032 sllg \PTR_B, \OFF_VAL,3 1033 la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/ 1034 agr \PTR_B, \PTR_B 1035 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1036 1037 .elseif \C_A==1 1038 sllg \PTR_B, \OFF_VAL,2 1039 agr \PTR_A,\PTR_B /*ptrba+off*4**/ 1040 sllg \PTR_B, \OFF_VAL,4 1041 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1042 .endif 1043 1044.elseif \C_B==2 1045 .if \C_A==8 1046 sllg \PTR_B, \OFF_VAL,5 1047 agr \PTR_A,\PTR_B /*ptrba+off*8**/ 1048 sllg \PTR_B, \OFF_VAL,3 1049 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1050 .elseif \C_A==4 1051 sllg \PTR_B, \OFF_VAL,3 1052 la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*2**/ 1053 agr \PTR_A,\PTR_B /*ptrba+off*2**/ 1054 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1055 .elseif \C_A==2 1056 sllg \PTR_B, \OFF_VAL,3 1057 agr \PTR_A,\PTR_B /*ptrba+off*2**/ 1058 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1059 .elseif \C_A==1 1060 sllg \PTR_B, \OFF_VAL,2 1061 la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/ 1062 agr \PTR_B,\PTR_B /* off+off**/ 1063 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1064 .endif 1065 1066.elseif \C_B==1 1067 .if \C_A==8 1068 sllg \PTR_B, \OFF_VAL,5 1069 agr \PTR_A,\PTR_B /*ptrba+off*8**/ 1070 sllg \PTR_B, \OFF_VAL,2 1071 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1072 .elseif \C_A==4 1073 sllg \PTR_B, \OFF_VAL,4 1074 agr \PTR_A,\PTR_B /*ptrba+off*4**/ 1075 sllg \PTR_B, \OFF_VAL,2 1076 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1077 .elseif \C_A==2 1078 sllg \PTR_B, \OFF_VAL,2 1079 la \PTR_A,0(\PTR_A,\PTR_B) /*ptrba+off*1**/ 1080 agr \PTR_A,\PTR_B /*ptrba+off*1**/ 1081 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1082 1083 .elseif \C_A==1 1084 sllg \PTR_B, \OFF_VAL,2 1085 agr \PTR_A,\PTR_B /*ptrba+off*1**/ 1086 la \PTR_B,0(\B_VAL,\PTR_B) /*refresh BPOINT*/ 1087 .endif 1088.endif 1089 1090 1091 #endif 1092.endm 1093 1094/**/ 1095.macro RefreshTempBk TEMP_VAL,BK_VAL,OFF_VAL,INCR_A,INCR_B 1096 #if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA)) 1097 /* temp = bk-off;*/ 1098 sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL 1099 1100 #elif defined(LEFT) 1101 /* temp = off+INCR_A; // number of values in A */ 1102 la \TEMP_VAL,\INCR_A(\OFF_VAL) 1103 #else 1104 /* temp = off+INCR_B // number of values in B*/ 1105 la \TEMP_VAL,\INCR_B(\OFF_VAL) 1106 #endif 1107 1108.endm 1109 1110 1111.macro RefreshPointersAndOFF TEMP_VAL,BK_VAL,OFF_VAL,PTR_B,PTR_A,C_A,C_B 1112 1113 #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA)) 1114 /*temp = bk - off;*/ 1115 sgrk \TEMP_VAL,\BK_VAL,\OFF_VAL 1116 #ifdef LEFT 1117 /*temp -= 8; // number of values in A*/ 1118 lay \TEMP_VAL,-\C_A(\TEMP_VAL) 1119 #else 1120 /*temp -= 4; // number of values in B*/ 1121 lay \TEMP_VAL,-\C_B(\TEMP_VAL) 1122 #endif 1123 /*ptrba += temp*C_A; 1124 ptrbb += temp*C_B;*/ 1125 .if \C_A==8 1126 sllg \TEMP_VAL, \TEMP_VAL,5 1127 .elseif \C_A==4 1128 sllg \TEMP_VAL, \TEMP_VAL,4 /*temp*4*/ 1129 .elseif \C_A==2 1130 sllg \TEMP_VAL, \TEMP_VAL,3 /*temp*2*/ 1131 .elseif \C_A==1 1132 sllg \TEMP_VAL, \TEMP_VAL,2 /*temp*1*/ 1133 .endif 1134 la \PTR_A,0(\PTR_A,\TEMP_VAL) /*ptrba+temp*C_A*/ 1135 /*we do not need to refresh ptrbb. so lets ignore it*/ 1136 1137 #endif 1138 1139 #ifdef LEFT 1140 /*off += 8; // number of values in A*/ 1141 aghi \OFF_VAL,\C_A 1142 #endif 1143.endm