--- /dev/null
+/***************************************************************************\r
+Copyright (c) 2013-2019, The OpenBLAS Project\r
+All rights reserved.\r
+Redistribution and use in source and binary forms, with or without\r
+modification, are permitted provided that the following conditions are\r
+met:\r
+1. Redistributions of source code must retain the above copyright\r
+notice, this list of conditions and the following disclaimer.\r
+2. Redistributions in binary form must reproduce the above copyright\r
+notice, this list of conditions and the following disclaimer in\r
+the documentation and/or other materials provided with the\r
+distribution.\r
+3. Neither the name of the OpenBLAS project nor the names of\r
+its contributors may be used to endorse or promote products\r
+derived from this software without specific prior written permission.\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE\r
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\r
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+*****************************************************************************/\r
+ \r
+#define unit_size 4\r
+#define DISP64(ind,disp) (ind*unit_size*64+disp)\r
+#define DISP32(ind,disp) (ind*unit_size*32+disp)\r
+#define DISP16(ind,disp) (ind*unit_size*16+disp)\r
+#define DISP8(ind,disp) (ind*unit_size*8+disp)\r
+#define DISP4(ind,disp) (ind*unit_size*4+disp)\r
+#define DISP2(ind,disp) (ind*unit_size*2+disp)\r
+#define DISP1(ind,disp) (ind*unit_size+disp)\r
+\r
+/**********************************************************************************************\r
+* Macros for N=8 and M=16\r
+**********************************************************************************************/\r
+\r
+.macro LOAD8x16_1\r
+ LOAD8x16 1\r
+.endm\r
+\r
+.macro LOAD8x16_0\r
+ LOAD8x16 0\r
+.endm\r
+\r
+.macro KERNEL8x16_L1_L4 Index,IsLast\r
+ KERNEL8x16_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x16_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x16_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x16_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL8x16_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL8x16_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x16_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x16_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro Zero8X16\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs38, vs38, vs38\r
+ xxlxor vs39, vs39, vs39\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ xxlxor vs42, vs42, vs42\r
+ xxlxor vs43, vs43, vs43\r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ xxlxor vs46, vs46, vs46\r
+ xxlxor vs47, vs47, vs47\r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49\r
+ xxlxor vs50, vs50, vs50\r
+ xxlxor vs51, vs51, vs51 \r
+ xxlxor vs52, vs52, vs52\r
+ xxlxor vs53, vs53, vs53\r
+ xxlxor vs54, vs54, vs54\r
+ xxlxor vs55, vs55, vs55 \r
+ xxlxor vs56, vs56, vs56\r
+ xxlxor vs57, vs57, vs57\r
+ xxlxor vs58, vs58, vs58\r
+ xxlxor vs59, vs59, vs59 \r
+ xxlxor vs60, vs60, vs60\r
+ xxlxor vs61, vs61, vs61\r
+ xxlxor vs62, vs62, vs62\r
+ xxlxor vs63, vs63, vs63 \r
+.endm\r
+\r
+.macro LOAD8x16 Zero\r
+\r
+ lxv vs24, 0(BO)\r
+ lxv vs28, 16(BO)\r
+ lxv vs0, 0(AO)\r
+ lxv vs1, 16(AO)\r
+ lxv vs2, 32(AO)\r
+ lxv vs3, 48(AO)\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+\r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs38, vs38, vs38\r
+ xxlxor vs39, vs39, vs39\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ xxlxor vs42, vs42, vs42\r
+ xxlxor vs43, vs43, vs43\r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ xxlxor vs46, vs46, vs46\r
+ xxlxor vs47, vs47, vs47\r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49\r
+ xxlxor vs50, vs50, vs50\r
+ xxlxor vs51, vs51, vs51 \r
+ xxlxor vs52, vs52, vs52\r
+ xxlxor vs53, vs53, vs53\r
+ xxlxor vs54, vs54, vs54\r
+ xxlxor vs55, vs55, vs55 \r
+ xxlxor vs56, vs56, vs56\r
+ xxlxor vs57, vs57, vs57\r
+ xxlxor vs58, vs58, vs58\r
+ xxlxor vs59, vs59, vs59 \r
+ xxlxor vs60, vs60, vs60\r
+ xxlxor vs61, vs61, vs61\r
+ xxlxor vs62, vs62, vs62\r
+ xxlxor vs63, vs63, vs63 \r
+.endif\r
+.endm\r
+\r
+.macro END8x16_NORMAL\r
+ END8x16 0, AO, BO, 64,32 \r
+.endm\r
+\r
+.macro END8x16 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+ xvmulsp vs34, vs2,vs24 \r
+ xvmulsp vs35, vs3,vs24 \r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+ xvmulsp vs38, vs2,vs25 \r
+ xvmulsp vs39, vs3,vs25\r
+\r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+ xvmulsp vs42, vs2,vs26 \r
+ xvmulsp vs43, vs3,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ xvmulsp vs46, vs2,vs27 \r
+ xvmulsp vs47, vs3,vs27\r
+\r
+ xvmulsp vs48, vs0,vs28\r
+ xvmulsp vs49, vs1,vs28\r
+ xvmulsp vs50, vs2,vs28 \r
+ xvmulsp vs51, vs3,vs28 \r
+\r
+ xvmulsp vs52, vs0,vs29\r
+ xvmulsp vs53, vs1,vs29\r
+ xvmulsp vs54, vs2,vs29 \r
+ xvmulsp vs55, vs3,vs29\r
+\r
+ xvmulsp vs56, vs0,vs30\r
+ xvmulsp vs57, vs1,vs30\r
+ xvmulsp vs58, vs2,vs30 \r
+ xvmulsp vs59, vs3,vs30\r
+\r
+ xvmulsp vs60, vs0,vs31\r
+ xvmulsp vs61, vs1,vs31\r
+ xvmulsp vs62, vs2,vs31 \r
+ xvmulsp vs63, vs3,vs31\r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+ xvmaddasp vs50, vs2,vs28 \r
+ xvmaddasp vs51, vs3,vs28 \r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+ xvmaddasp vs54, vs2,vs29 \r
+ xvmaddasp vs55, vs3,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+ xvmaddasp vs58, vs2,vs30 \r
+ xvmaddasp vs59, vs3,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+ xvmaddasp vs62, vs2,vs31 \r
+ xvmaddasp vs63, vs3,vs31 \r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL8x16_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs8, DISP32(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs12, DISP32(\Index,16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP64(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP64(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP64(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP64(\Index,48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+ xvmaddasp vs50, vs2,vs28 \r
+ xvmaddasp vs51, vs3,vs28 \r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+ xvmaddasp vs54, vs2,vs29 \r
+ xvmaddasp vs55, vs3,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+ xvmaddasp vs58, vs2,vs30 \r
+ xvmaddasp vs59, vs3,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+ xvmaddasp vs62, vs2,vs31 \r
+ xvmaddasp vs63, vs3,vs31 \r
+\r
+ lxv vs24, DISP32(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs28, DISP32(\Index,32+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP64(\Index,64+\OffsetA)(\AREG)\r
+ lxv vs1, DISP64(\Index,64+16+\OffsetA)(\AREG)\r
+ lxv vs2, DISP64(\Index,64+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP64(\Index,64+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+ \r
+\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+ \r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+ \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+\r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+ xvmaddasp vs50, vs6,vs12 \r
+ xvmaddasp vs51, vs7,vs12 \r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+ xvmaddasp vs54, vs6,vs13 \r
+ xvmaddasp vs55, vs7,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+ xvmaddasp vs58, vs6,vs14 \r
+ xvmaddasp vs59, vs7,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+ xvmaddasp vs62, vs6,vs15 \r
+ xvmaddasp vs63, vs7,vs15\r
+\r
+ lxv vs8, DISP32(\Index,64+\OffsetB)(\BREG)\r
+ lxv vs12, DISP32(\Index,64+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP64(\Index,128+0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP64(\Index,128+16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP64(\Index,128+32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP64(\Index,128+48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+ xvmaddasp vs50, vs2,vs28 \r
+ xvmaddasp vs51, vs3,vs28 \r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+ xvmaddasp vs54, vs2,vs29 \r
+ xvmaddasp vs55, vs3,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+ xvmaddasp vs58, vs2,vs30 \r
+ xvmaddasp vs59, vs3,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+ xvmaddasp vs62, vs2,vs31 \r
+ xvmaddasp vs63, vs3,vs31 \r
+ \r
+.if \Complete==0\r
+ lxv vs24, DISP32(\Index,96+\OffsetB)(\BREG)\r
+ lxv vs28, DISP32(\Index,96+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP64(\Index,192+\OffsetA)(\AREG)\r
+ lxv vs1, DISP64(\Index,192+16+\OffsetA)(\AREG) \r
+ lxv vs2, DISP64(\Index,192+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP64(\Index,192+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+\r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ \r
+ addi \BREG, \BREG, DISP32(\Index,32*3+\OffsetB)\r
+ addi \AREG, \AREG, DISP64(\Index,64*3+\OffsetA)\r
+.else\r
+ \r
+ addi \BREG, \BREG, DISP32(\Index,128)\r
+ addi \AREG, \AREG, DISP64(\Index,256)\r
+.endif\r
+.endif \r
+ \r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+ \r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+ \r
+.endif\r
+ \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+ xvmaddasp vs50, vs6,vs12 \r
+ xvmaddasp vs51, vs7,vs12 \r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+ xvmaddasp vs54, vs6,vs13 \r
+ xvmaddasp vs55, vs7,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+ xvmaddasp vs58, vs6,vs14 \r
+ xvmaddasp vs59, vs7,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+ xvmaddasp vs62, vs6,vs15 \r
+ xvmaddasp vs63, vs7,vs15\r
+\r
+.endm\r
+\r
+.macro KERNEL8x16 First\r
+\r
+ LOAD8x16 0\r
+ END8x16 \First, AO, BO, 64,32 \r
+.endm\r
+\r
+.macro KERNEL8x16_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+ \r
+ lxv vs8, DISP16(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs12, DISP16(\Index,16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP32(\Index,48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+ xvmulsp vs34, vs2,vs24 \r
+ xvmulsp vs35, vs3,vs24 \r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+ xvmulsp vs38, vs2,vs25 \r
+ xvmulsp vs39, vs3,vs25 \r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+.endif\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+ \r
+.if \First==1 \r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+ xvmulsp vs42, vs2,vs26 \r
+ xvmulsp vs43, vs3,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ xvmulsp vs46, vs2,vs27 \r
+ xvmulsp vs47, vs3,vs27\r
+\r
+ xvmulsp vs48, vs0,vs28\r
+ xvmulsp vs49, vs1,vs28\r
+ xvmulsp vs50, vs2,vs28 \r
+ xvmulsp vs51, vs3,vs28 \r
+\r
+ xvmulsp vs52, vs0,vs29\r
+ xvmulsp vs53, vs1,vs29\r
+ xvmulsp vs54, vs2,vs29 \r
+ xvmulsp vs55, vs3,vs29\r
+\r
+ xvmulsp vs56, vs0,vs30\r
+ xvmulsp vs57, vs1,vs30\r
+ xvmulsp vs58, vs2,vs30 \r
+ xvmulsp vs59, vs3,vs30\r
+\r
+ xvmulsp vs60, vs0,vs31\r
+ xvmulsp vs61, vs1,vs31\r
+ xvmulsp vs62, vs2,vs31 \r
+ xvmulsp vs63, vs3,vs31\r
+\r
+.else \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+ xvmaddasp vs50, vs2,vs28 \r
+ xvmaddasp vs51, vs3,vs28 \r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+ xvmaddasp vs54, vs2,vs29 \r
+ xvmaddasp vs55, vs3,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+ xvmaddasp vs58, vs2,vs30 \r
+ xvmaddasp vs59, vs3,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+ xvmaddasp vs62, vs2,vs31 \r
+ xvmaddasp vs63, vs3,vs31 \r
+\r
+.endif\r
+.if \Complete==0\r
+ lxv vs24, DISP16(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs28, DISP16(\Index,32+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP32(\Index,64+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,64+16+\OffsetA)(\AREG)\r
+ lxv vs2, DISP32(\Index,64+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP32(\Index,64+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \BREG, \BREG, DISP16(\Index,32+\OffsetB) \r
+ addi \AREG, \AREG, DISP32(\Index,64+\OffsetA)\r
+\r
+.else\r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+ addi \AREG, \AREG, DISP32(\Index,128) \r
+.endif\r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs4,vs8\r
+ xvmulsp vs33, vs5,vs8\r
+ xvmulsp vs34, vs6,vs8 \r
+ xvmulsp vs35, vs7,vs8\r
+\r
+ xvmulsp vs36, vs4,vs9\r
+ xvmulsp vs37, vs5,vs9\r
+ xvmulsp vs38, vs6,vs9 \r
+ xvmulsp vs39, vs7,vs9\r
+.else\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+.endif \r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+ \r
+.endif\r
+.if \First==1 \r
+ xvmulsp vs40, vs4,vs10\r
+ xvmulsp vs41, vs5,vs10\r
+ xvmulsp vs42, vs6,vs10 \r
+ xvmulsp vs43, vs7,vs10\r
+\r
+ xvmulsp vs44, vs4,vs11\r
+ xvmulsp vs45, vs5,vs11\r
+ xvmulsp vs46, vs6,vs11 \r
+ xvmulsp vs47, vs7,vs11\r
+\r
+ xvmulsp vs48, vs4,vs12\r
+ xvmulsp vs49, vs5,vs12\r
+ xvmulsp vs50, vs6,vs12 \r
+ xvmulsp vs51, vs7,vs12 \r
+\r
+ xvmulsp vs52, vs4,vs13\r
+ xvmulsp vs53, vs5,vs13\r
+ xvmulsp vs54, vs6,vs13 \r
+ xvmulsp vs55, vs7,vs13\r
+\r
+ xvmulsp vs56, vs4,vs14\r
+ xvmulsp vs57, vs5,vs14\r
+ xvmulsp vs58, vs6,vs14 \r
+ xvmulsp vs59, vs7,vs14\r
+\r
+ xvmulsp vs60, vs4,vs15\r
+ xvmulsp vs61, vs5,vs15\r
+ xvmulsp vs62, vs6,vs15 \r
+ xvmulsp vs63, vs7,vs15\r
+\r
+.else \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+ xvmaddasp vs50, vs6,vs12 \r
+ xvmaddasp vs51, vs7,vs12 \r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+ xvmaddasp vs54, vs6,vs13 \r
+ xvmaddasp vs55, vs7,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+ xvmaddasp vs58, vs6,vs14 \r
+ xvmaddasp vs59, vs7,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+ xvmaddasp vs62, vs6,vs15 \r
+ xvmaddasp vs63, vs7,vs15\r
+\r
+.endif\r
+\r
+.endm\r
+\r
+ \r
+.macro SAVE8x16\r
+\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+\r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+\r
+ add T4, T2, T10 \r
+ add T5, T3, T10 \r
+\r
+ add T6, T4, T10 \r
+ add T7, T5, T10 \r
+\r
+\r
+\r
+ /* permute to restore butterfly rank 1 updateto normal promoted one */ \r
+ /* permute 16 vs8 MEM(CO) vs9 MEM(CO+LDC) vs10 MEM(CO+2*LDC) vs11 MEM(CO+3*LDC) */\r
+ /* permute 16 vs12 MEM(16+CO) vs13 MEM(16+CO+LDC) vs14 MEM(16+CO+2*LDC) vs15 MEM(16+CO+3*LDC) */\r
+ /* permute 16 vs16 MEM(32+CO) vs17 MEM(32+CO+LDC) vs18 MEM(32+CO+2*LDC) vs19 MEM(32+CO+3*LDC) */\r
+ /* permute 16 vs24 MEM(32+CO) vs25 MEM(32+CO+LDC) vs26 MEM(32+CO+2*LDC) vs27 MEM(32+CO+3*LDC) */\r
+\r
+ xxmrglw vs8, vs32, vs44\r
+ xxmrglw vs10, vs36, vs40 \r
+\r
+ xxmrghw vs1, vs32, vs44\r
+ xxmrghw vs0, vs36, vs40\r
+\r
+ xxmrglw vs12, vs33, vs45\r
+ xxmrglw vs14, vs37, vs41 \r
+\r
+ xxmrghw vs2, vs37, vs41\r
+ xxmrghw vs3, vs33, vs45\r
+\r
+ xxmrglw vs16, vs34, vs46\r
+ xxmrglw vs18, vs38, vs42 \r
+\r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+\r
+ xxmrghw vs4, vs38, vs42\r
+ xxmrghw vs5, vs34, vs46\r
+\r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+\r
+ xxmrglw vs24, vs35, vs47\r
+ xxmrglw vs26, vs39, vs43 \r
+\r
+ xxlor vs17, vs16, vs16\r
+ xxlor vs19, vs18, vs18\r
+\r
+ xxmrghw vs30, vs39, vs43 \r
+ xxmrghw vs31, vs35, vs47\r
+\r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs32, 0(CO)\r
+ lxv vs33, 16(CO) \r
+ lxv vs34, 32(CO) \r
+ lxv vs35, 48(CO) \r
+#endif\r
+ xxlor vs25, vs24, vs24\r
+ xxlor vs27, vs26, vs26 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs36, 0(T1)\r
+ lxv vs37, 16(T1) \r
+ lxv vs38, 32(T1) \r
+ lxv vs39, 48(T1) \r
+#endif\r
+#ifndef TRMMKERNEL \r
+ lxv vs40, 0(T2)\r
+ lxv vs41, 16(T2) \r
+ lxv vs42, 32(T2) \r
+ lxv vs43, 48(T2) \r
+#endif \r
+#ifndef TRMMKERNEL \r
+ lxv vs44, 0(T3)\r
+ lxv vs45, 16(T3) \r
+ lxv vs46, 32(T3) \r
+ lxv vs47, 48(T3) \r
+#endif \r
+\r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ \r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+\r
+ xxperm vs16, vs4, save_permute_1\r
+ xxperm vs18, vs5, save_permute_1\r
+ \r
+ xxperm vs17, vs4, save_permute_2 \r
+ xxperm vs19, vs5, save_permute_2 \r
+\r
+ xxperm vs24, vs30, save_permute_1\r
+ xxperm vs26, vs31, save_permute_1 \r
+ \r
+ xxperm vs25, vs30, save_permute_2 \r
+ xxperm vs27, vs31, save_permute_2 \r
+\r
+\r
+ /* multiply add normal way */\r
+ \r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs32, vs8, alpha_r \r
+ xvmulsp vs33, vs12, alpha_r \r
+ xvmulsp vs34, vs16, alpha_r \r
+ xvmulsp vs35, vs24, alpha_r \r
+ xvmulsp vs36, vs9, alpha_r \r
+ xvmulsp vs37, vs13, alpha_r \r
+ xvmulsp vs38, vs17, alpha_r \r
+ xvmulsp vs39, vs25, alpha_r \r
+#else \r
+ xvmaddasp vs32, vs8, alpha_r \r
+ xvmaddasp vs33, vs12, alpha_r \r
+ xvmaddasp vs34, vs16, alpha_r \r
+ xvmaddasp vs35, vs24, alpha_r \r
+ xvmaddasp vs36, vs9, alpha_r \r
+ xvmaddasp vs37, vs13, alpha_r \r
+ xvmaddasp vs38, vs17, alpha_r \r
+ xvmaddasp vs39, vs25, alpha_r \r
+#endif \r
+\r
+\r
+\r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs40, vs10, alpha_r \r
+ xvmulsp vs41, vs14, alpha_r \r
+ xvmulsp vs42, vs18, alpha_r \r
+ xvmulsp vs43, vs26, alpha_r \r
+ xvmulsp vs44, vs11, alpha_r \r
+ xvmulsp vs45, vs15, alpha_r \r
+ xvmulsp vs46, vs19, alpha_r \r
+ xvmulsp vs47, vs27, alpha_r \r
+#else\r
+\r
+ xvmaddasp vs40, vs10, alpha_r \r
+ xvmaddasp vs41, vs14, alpha_r \r
+ xvmaddasp vs42, vs18, alpha_r \r
+ xvmaddasp vs43, vs26, alpha_r \r
+ xvmaddasp vs44, vs11, alpha_r \r
+ xvmaddasp vs45, vs15, alpha_r \r
+ xvmaddasp vs46, vs19, alpha_r \r
+ xvmaddasp vs47, vs27, alpha_r \r
+ \r
+#endif \r
+\r
+ stxv vs32, 0(CO)\r
+ stxv vs33, 16(CO) \r
+ stxv vs34, 32(CO) \r
+ stxv vs35, 48(CO) \r
+\r
+ stxv vs36, 0(T1)\r
+ stxv vs37, 16(T1) \r
+ stxv vs38, 32(T1) \r
+ stxv vs39, 48(T1)\r
+\r
+ stxv vs40, 0(T2)\r
+ stxv vs41, 16(T2) \r
+ stxv vs42, 32(T2) \r
+ stxv vs43, 48(T2) \r
+ stxv vs44, 0(T3)\r
+ stxv vs45, 16(T3) \r
+ stxv vs46, 32(T3) \r
+ stxv vs47, 48(T3)\r
+ \r
+ /*****the same with the second 8X8 ****/\r
+#ifndef TRMMKERNEL\r
+ \r
+ lxv vs32, 0(T4)\r
+ lxv vs33, 16(T4) \r
+ lxv vs34, 32(T4) \r
+ lxv vs35, 48(T4) \r
+ lxv vs36, 0(T5)\r
+ lxv vs37, 16(T5) \r
+ lxv vs38,32(T5) \r
+ lxv vs39, 48(T5) \r
+#endif \r
+ \r
+ xxmrglw vs8, vs48, vs60\r
+ xxmrglw vs10, vs52, vs56 \r
+\r
+ xxmrghw vs1, vs48, vs60\r
+ xxmrghw vs0, vs52, vs56\r
+ xxmrglw vs12, vs49, vs61\r
+ xxmrglw vs14, vs53, vs57 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs40, 0(T6)\r
+ lxv vs41, 16(T6) \r
+ lxv vs42, 32(T6) \r
+ lxv vs43, 48(T6) \r
+ lxv vs44, 0(T7)\r
+ lxv vs45, 16(T7) \r
+ lxv vs46, 32(T7) \r
+ lxv vs47, 48(T7) \r
+#endif \r
+ xxmrghw vs2, vs53, vs57\r
+ xxmrghw vs3, vs49, vs61\r
+\r
+ xxmrglw vs16, vs50, vs62\r
+ xxmrglw vs18, vs54, vs58 \r
+\r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+ xxmrghw vs4, vs54, vs58\r
+ xxmrghw vs5, vs50, vs62\r
+\r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+ \r
+ xxmrglw vs24, vs51, vs63\r
+ xxmrglw vs26, vs55, vs59 \r
+\r
+ xxlor vs17, vs16, vs16\r
+ xxlor vs19, vs18, vs18\r
+ xxmrghw vs30, vs55, vs59 \r
+ xxmrghw vs31, vs51, vs63\r
+\r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ \r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+\r
+ xxlor vs25, vs24, vs24\r
+ xxlor vs27, vs26, vs26 \r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+ \r
+ xxperm vs16, vs4, save_permute_1\r
+ xxperm vs18, vs5, save_permute_1\r
+ xxperm vs17, vs4, save_permute_2 \r
+ xxperm vs19, vs5, save_permute_2 \r
+ xxperm vs24, vs30, save_permute_1\r
+ xxperm vs26, vs31, save_permute_1 \r
+ xxperm vs25, vs30, save_permute_2 \r
+ xxperm vs27, vs31, save_permute_2 \r
+\r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs32, vs8, alpha_r \r
+ xvmulsp vs33, vs12, alpha_r \r
+ xvmulsp vs34, vs16, alpha_r \r
+ xvmulsp vs35, vs24, alpha_r \r
+ xvmulsp vs36, vs9, alpha_r \r
+ xvmulsp vs37, vs13, alpha_r \r
+ xvmulsp vs38, vs17, alpha_r \r
+ xvmulsp vs39, vs25, alpha_r \r
+#else \r
+ xvmaddasp vs32, vs8, alpha_r \r
+ xvmaddasp vs33, vs12, alpha_r \r
+ xvmaddasp vs34, vs16, alpha_r \r
+ xvmaddasp vs35, vs24, alpha_r \r
+ xvmaddasp vs36, vs9, alpha_r \r
+ xvmaddasp vs37, vs13, alpha_r \r
+ xvmaddasp vs38, vs17, alpha_r \r
+ xvmaddasp vs39, vs25, alpha_r \r
+#endif \r
+\r
+ stxv vs32, 0(T4)\r
+ stxv vs33, 16(T4) \r
+ stxv vs34, 32(T4) \r
+ stxv vs35, 48(T4) \r
+\r
+ stxv vs36, 0(T5)\r
+ stxv vs37, 16(T5) \r
+ stxv vs38, 32(T5) \r
+ stxv vs39, 48(T5)\r
+\r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs40, vs10, alpha_r \r
+ xvmulsp vs41, vs14, alpha_r \r
+ xvmulsp vs42, vs18, alpha_r \r
+ xvmulsp vs43, vs26, alpha_r \r
+ xvmulsp vs44, vs11, alpha_r \r
+ xvmulsp vs45, vs15, alpha_r \r
+ xvmulsp vs46, vs19, alpha_r \r
+ xvmulsp vs47, vs27, alpha_r \r
+#else\r
+\r
+ xvmaddasp vs40, vs10, alpha_r \r
+ xvmaddasp vs41, vs14, alpha_r \r
+ xvmaddasp vs42, vs18, alpha_r \r
+ xvmaddasp vs43, vs26, alpha_r \r
+ xvmaddasp vs44, vs11, alpha_r \r
+ xvmaddasp vs45, vs15, alpha_r \r
+ xvmaddasp vs46, vs19, alpha_r \r
+ xvmaddasp vs47, vs27, alpha_r \r
+ \r
+#endif \r
+\r
+ stxv vs40, 0(T6)\r
+ stxv vs41, 16(T6) \r
+ stxv vs42, 32(T6) \r
+ stxv vs43, 48(T6) \r
+ stxv vs44, 0(T7)\r
+ stxv vs45, 16(T7) \r
+ stxv vs46, 32(T7) \r
+ stxv vs47, 48(T7)\r
+ \r
+\r
+ addi CO,CO,64\r
+\r
+\r
+.endm\r
+\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=8 and M=8\r
+**********************************************************************************************/\r
+\r
+.macro LOAD8x8_1\r
+ LOAD8x8 1\r
+.endm\r
+\r
+.macro LOAD8x8_0\r
+ LOAD8x8 0\r
+.endm\r
+\r
+.macro KERNEL8x8_L1_L4 Index,IsLast\r
+ KERNEL8x8_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x8_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x8_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x8_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL8x8_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL8x8_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x8_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x8_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro END8x8_NORMAL\r
+ END8x8 0, AO, BO, 32,32 \r
+.endm\r
+\r
+.macro Zero8X8\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ \r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ \r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ \r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ \r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49\r
+ \r
+ xxlxor vs52, vs52, vs52\r
+ xxlxor vs53, vs53, vs53\r
+ \r
+ xxlxor vs56, vs56, vs56\r
+ xxlxor vs57, vs57, vs57\r
+ \r
+ xxlxor vs60, vs60, vs60\r
+ xxlxor vs61, vs61, vs61\r
+ \r
+.endm\r
+\r
+.macro LOAD8x8 Zero\r
+\r
+ lxv vs24, 0(BO)\r
+ lxv vs28, 16(BO)\r
+ lxv vs0, 0(AO)\r
+ lxv vs1, 16(AO)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+\r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41 \r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45 \r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49 \r
+ xxlxor vs52, vs52, vs52\r
+ xxlxor vs53, vs53, vs53 \r
+ xxlxor vs56, vs56, vs56\r
+ xxlxor vs57, vs57, vs57 \r
+ xxlxor vs60, vs60, vs60\r
+ xxlxor vs61, vs61, vs61 \r
+.endif\r
+.endm\r
+\r
+\r
+.macro END8x8 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+\r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+\r
+ xvmulsp vs48, vs0,vs28\r
+ xvmulsp vs49, vs1,vs28\r
+\r
+ xvmulsp vs52, vs0,vs29\r
+ xvmulsp vs53, vs1,vs29\r
+\r
+ xvmulsp vs56, vs0,vs30\r
+ xvmulsp vs57, vs1,vs30\r
+\r
+ xvmulsp vs60, vs0,vs31\r
+ xvmulsp vs61, vs1,vs31\r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL8x8_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs8, DISP32(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs12, DISP32(\Index,16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+\r
+ lxv vs24, DISP32(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs28, DISP32(\Index,32+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,32+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+\r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+\r
+ lxv vs8, DISP32(\Index,64+\OffsetB)(\BREG)\r
+ lxv vs12, DISP32(\Index,64+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP32(\Index,64+0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,64+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+\r
+.if \Complete==0\r
+ lxv vs24, DISP32(\Index,96+\OffsetB)(\BREG)\r
+ lxv vs28, DISP32(\Index,96+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP32(\Index,96+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,96+16+\OffsetA)(\AREG) \r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+\r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ \r
+ addi \BREG, \BREG, DISP32(\Index,32*3+\OffsetB)\r
+ addi \AREG, \AREG, DISP32(\Index,32*3+\OffsetA)\r
+.else\r
+ \r
+ addi \BREG, \BREG, DISP32(\Index,128)\r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif\r
+.endif \r
+ \r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+ \r
+.endif\r
+ \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+\r
+.endm\r
+\r
+.macro KERNEL8x8 First\r
+\r
+ LOAD8x8 0\r
+ END8x8 \First, AO, BO, 32,32 \r
+.endm\r
+\r
+.macro KERNEL8x8_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+ \r
+ lxv vs8, DISP16(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs12, DISP16(\Index,16+\OffsetB)(\BREG)\r
+\r
+ lxv vs4, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP16(\Index,16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask\r
+ xxperm vs14, vs12, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+ xxpermdi vs13, vs12, vs12,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+.endif\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ xxpermdi vs15, vs14, vs14,2 \r
+ \r
+.if \First==1 \r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+\r
+ xvmulsp vs48, vs0,vs28\r
+ xvmulsp vs49, vs1,vs28\r
+\r
+ xvmulsp vs52, vs0,vs29\r
+ xvmulsp vs53, vs1,vs29\r
+\r
+ xvmulsp vs56, vs0,vs30\r
+ xvmulsp vs57, vs1,vs30\r
+\r
+ xvmulsp vs60, vs0,vs31\r
+ xvmulsp vs61, vs1,vs31\r
+\r
+.else \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ xvmaddasp vs48, vs0,vs28\r
+ xvmaddasp vs49, vs1,vs28\r
+\r
+ xvmaddasp vs52, vs0,vs29\r
+ xvmaddasp vs53, vs1,vs29\r
+\r
+ xvmaddasp vs56, vs0,vs30\r
+ xvmaddasp vs57, vs1,vs30\r
+\r
+ xvmaddasp vs60, vs0,vs31\r
+ xvmaddasp vs61, vs1,vs31\r
+\r
+.endif\r
+.if \Complete==0\r
+ lxv vs24, DISP16(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs28, DISP16(\Index,32+16+\OffsetB)(\BREG)\r
+\r
+ lxv vs0, DISP16(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs1, DISP16(\Index,32+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask\r
+ xxperm vs30, vs28, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs29, vs28, vs28,2 \r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \BREG, \BREG, DISP16(\Index,32+\OffsetB) \r
+ addi \AREG, \AREG, DISP16(\Index,32+\OffsetA)\r
+\r
+.else\r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+.endif\r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs4,vs8\r
+ xvmulsp vs33, vs5,vs8\r
+\r
+ xvmulsp vs36, vs4,vs9\r
+ xvmulsp vs37, vs5,vs9\r
+\r
+.else\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+.endif \r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ xxpermdi vs31, vs30, vs30,2 \r
+ \r
+.endif\r
+.if \First==1 \r
+ xvmulsp vs40, vs4,vs10\r
+ xvmulsp vs41, vs5,vs10\r
+\r
+ xvmulsp vs44, vs4,vs11\r
+ xvmulsp vs45, vs5,vs11\r
+\r
+ xvmulsp vs48, vs4,vs12\r
+ xvmulsp vs49, vs5,vs12\r
+\r
+ xvmulsp vs52, vs4,vs13\r
+ xvmulsp vs53, vs5,vs13\r
+\r
+ xvmulsp vs56, vs4,vs14\r
+ xvmulsp vs57, vs5,vs14\r
+\r
+ xvmulsp vs60, vs4,vs15\r
+ xvmulsp vs61, vs5,vs15\r
+\r
+.else \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+\r
+ xvmaddasp vs48, vs4,vs12\r
+ xvmaddasp vs49, vs5,vs12\r
+\r
+ xvmaddasp vs52, vs4,vs13\r
+ xvmaddasp vs53, vs5,vs13\r
+\r
+ xvmaddasp vs56, vs4,vs14\r
+ xvmaddasp vs57, vs5,vs14\r
+\r
+ xvmaddasp vs60, vs4,vs15\r
+ xvmaddasp vs61, vs5,vs15\r
+\r
+.endif\r
+\r
+.endm\r
+\r
+\r
+.macro SAVE8x8 \r
+ \r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+\r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+\r
+ add T4, T2, T10 \r
+ add T5, T3, T10 \r
+\r
+ add T6, T4, T10 \r
+ add T7, T5, T10 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs34, 0(CO)\r
+ lxv vs35, 16(CO) \r
+ lxv vs38, 0(T1)\r
+ lxv vs39, 16(T1) \r
+ lxv vs42, 0(T2)\r
+ lxv vs43, 16(T2) \r
+ lxv vs46, 0(T3)\r
+ lxv vs47, 16(T3) \r
+\r
+ lxv vs50, 0(T4)\r
+ lxv vs51, 16(T4) \r
+ lxv vs54, 0(T5)\r
+ lxv vs55, 16(T5) \r
+ lxv vs58, 0(T6)\r
+ lxv vs59, 16(T6) \r
+ lxv vs62, 0(T7)\r
+ lxv vs63, 16(T7) \r
+#endif \r
+\r
+ xxmrglw vs8, vs32, vs44\r
+ xxmrglw vs10, vs36, vs40 \r
+\r
+ xxmrghw vs1, vs32, vs44\r
+ xxmrghw vs0, vs36, vs40\r
+\r
+ xxmrglw vs12, vs33, vs45\r
+ xxmrglw vs14, vs37, vs41 \r
+\r
+ xxmrghw vs2, vs37, vs41\r
+ xxmrghw vs3, vs33, vs45\r
+\r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+ \r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+\r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+\r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ \r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+\r
+\r
+ /* multiply add normal way */\r
+ \r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs34, vs8, alpha_r \r
+ xvmulsp vs35, vs12, alpha_r \r
+ xvmulsp vs38, vs9, alpha_r \r
+ xvmulsp vs39, vs13, alpha_r \r
+ xvmulsp vs42, vs10, alpha_r \r
+ xvmulsp vs43, vs14, alpha_r \r
+ xvmulsp vs46, vs11, alpha_r \r
+ xvmulsp vs47, vs15, alpha_r \r
+#else \r
+ xvmaddasp vs34, vs8, alpha_r \r
+ xvmaddasp vs35, vs12, alpha_r \r
+ xvmaddasp vs38, vs9, alpha_r \r
+ xvmaddasp vs39, vs13, alpha_r \r
+ xvmaddasp vs42, vs10, alpha_r \r
+ xvmaddasp vs43, vs14, alpha_r \r
+ xvmaddasp vs46, vs11, alpha_r \r
+ xvmaddasp vs47, vs15, alpha_r \r
+#endif \r
+ \r
+ \r
+ xxmrglw vs8, vs48, vs60\r
+ xxmrglw vs10, vs52, vs56 \r
+\r
+ xxmrghw vs1, vs48, vs60\r
+ xxmrghw vs0, vs52, vs56\r
+ stxv vs34, 0(CO)\r
+ stxv vs35, 16(CO) \r
+ xxmrglw vs12, vs49, vs61\r
+ xxmrglw vs14, vs53, vs57 \r
+ stxv vs38, 0(T1)\r
+ stxv vs39, 16(T1) \r
+ xxmrghw vs2, vs53, vs57\r
+ xxmrghw vs3, vs49, vs61\r
+ stxv vs42, 0(T2)\r
+ stxv vs43, 16(T2) \r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+ stxv vs46, 0(T3)\r
+ stxv vs47, 16(T3) \r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+ \r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ \r
+ \r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+ \r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+ \r
+ #ifdef TRMMKERNEL\r
+ xvmulsp vs50, vs8, alpha_r \r
+ xvmulsp vs51, vs12, alpha_r \r
+ xvmulsp vs54, vs9, alpha_r \r
+ xvmulsp vs55, vs13, alpha_r \r
+ xvmulsp vs58, vs10, alpha_r \r
+ xvmulsp vs59, vs14, alpha_r \r
+ xvmulsp vs62, vs11, alpha_r \r
+ xvmulsp vs63, vs15, alpha_r \r
+#else \r
+ xvmaddasp vs50, vs8, alpha_r \r
+ xvmaddasp vs51, vs12, alpha_r \r
+ xvmaddasp vs54, vs9, alpha_r \r
+ xvmaddasp vs55, vs13, alpha_r \r
+ xvmaddasp vs58, vs10, alpha_r \r
+ xvmaddasp vs59, vs14, alpha_r \r
+ xvmaddasp vs62, vs11, alpha_r \r
+ xvmaddasp vs63, vs15, alpha_r \r
+#endif \r
+\r
+ stxv vs50, 0(T4)\r
+ stxv vs51, 16(T4) \r
+ stxv vs54, 0(T5)\r
+ stxv vs55, 16(T5) \r
+ stxv vs58, 0(T6)\r
+ stxv vs59, 16(T6) \r
+ stxv vs62, 0(T7)\r
+ stxv vs63, 16(T7) \r
+\r
+ addi CO,CO,32\r
+\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=8 and M=4\r
+**********************************************************************************************/\r
+\r
+.macro LOAD8x4_1\r
+ LOAD8x4 1\r
+.endm\r
+\r
+.macro LOAD8x4_0\r
+ LOAD8x4 0\r
+.endm\r
+\r
+.macro KERNEL8x4_L1_L4 Index,IsLast\r
+ KERNEL8x4_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x4_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x4_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x4_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL8x4_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL8x4_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL8x4_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x4_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro Zero8X4\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ \r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49\r
+ xxlxor vs50, vs50, vs50\r
+ xxlxor vs51, vs51, vs51 \r
+ \r
+.endm\r
+\r
+.macro LOAD8x4 Zero\r
+\r
+ lxv vs0, 0(AO)\r
+ lxv vs24, 0(BO)\r
+ lxv vs25, 16(BO)\r
+\r
+\r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+\r
+ xxlxor vs48, vs48, vs48\r
+ xxlxor vs49, vs49, vs49\r
+ xxlxor vs50, vs50, vs50\r
+ xxlxor vs51, vs51, vs51 \r
+.endif\r
+.endm\r
+\r
+.macro END8x4_NORMAL\r
+ END8x4 0, AO, BO, 16,32 \r
+.endm\r
+\r
+.macro END8x4 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs24, vs0\r
+ xvmulsp vs33, vs24, vs1 \r
+ xvmulsp vs34, vs24, vs2\r
+ xvmulsp vs35, vs24, vs3\r
+\r
+ xvmulsp vs48, vs25, vs0\r
+ xvmulsp vs49, vs25, vs1\r
+ xvmulsp vs50, vs25, vs2\r
+ xvmulsp vs51, vs25, vs3 \r
+.else\r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+\r
+ xvmaddasp vs48, vs25, vs0\r
+ xvmaddasp vs49, vs25, vs1\r
+ xvmaddasp vs50, vs25, vs2\r
+ xvmaddasp vs51, vs25, vs3 \r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL8x4_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs4, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP32(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetB)(\BREG)\r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+ \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+\r
+ xvmaddasp vs48, vs25, vs0\r
+ xvmaddasp vs49, vs25, vs1\r
+ xvmaddasp vs50, vs25, vs2\r
+ xvmaddasp vs51, vs25, vs3 \r
+\r
+ lxv vs0, DISP16(\Index, 16+\OffsetA)(\AREG)\r
+ lxv vs24, DISP32(\Index, 32+\OffsetB)(\BREG)\r
+ lxv vs25, DISP32(\Index, 48+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+\r
+ xvmaddasp vs48, vs27, vs4\r
+ xvmaddasp vs49, vs27, vs5\r
+ xvmaddasp vs50, vs27, vs6\r
+ xvmaddasp vs51, vs27, vs7\r
+ \r
+\r
+ lxv vs4, DISP16(\Index, 32+\OffsetA)(\AREG)\r
+ lxv vs26, DISP32(\Index, 64+\OffsetB)(\BREG)\r
+ lxv vs27, DISP32(\Index, 80+\OffsetB)(\BREG)\r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+ \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+\r
+ xvmaddasp vs48, vs25, vs0\r
+ xvmaddasp vs49, vs25, vs1\r
+ xvmaddasp vs50, vs25, vs2\r
+ xvmaddasp vs51, vs25, vs3 \r
+\r
+.if \Complete==0 \r
+\r
+ lxv vs0, DISP16(\Index, 48+\OffsetA)(\AREG)\r
+ lxv vs24, DISP32(\Index, 96+\OffsetB)(\BREG)\r
+ lxv vs25, DISP32(\Index, 96+16+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+.endif\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+\r
+ xvmaddasp vs48, vs27, vs4\r
+ xvmaddasp vs49, vs27, vs5\r
+ xvmaddasp vs50, vs27, vs6\r
+ xvmaddasp vs51, vs27, vs7\r
+\r
+ \r
+ \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \AREG, \AREG, DISP16(\Index,16*3+\OffsetA) \r
+ addi \BREG, \BREG, DISP32(\Index,32*3+\OffsetB)\r
+\r
+.else\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+ addi \BREG, \BREG, DISP32(\Index,128)\r
+\r
+.endif\r
+.endif \r
+ \r
+ \r
+.endm\r
+\r
+.macro KERNEL8x4 First\r
+ LOAD8x4 0\r
+ END8x4 \First, AO, BO, 16,32 \r
+.endm\r
+\r
+.macro KERNEL8x4_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs4, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP16(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetB)(\BREG)\r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs24, vs0\r
+ xvmulsp vs33, vs24, vs1 \r
+ xvmulsp vs34, vs24, vs2\r
+ xvmulsp vs35, vs24, vs3\r
+\r
+ xvmulsp vs48, vs25, vs0\r
+ xvmulsp vs49, vs25, vs1\r
+ xvmulsp vs50, vs25, vs2\r
+ xvmulsp vs51, vs25, vs3 \r
+.else \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+\r
+ xvmaddasp vs48, vs25, vs0\r
+ xvmaddasp vs49, vs25, vs1\r
+ xvmaddasp vs50, vs25, vs2\r
+ xvmaddasp vs51, vs25, vs3 \r
+.endif\r
+\r
+.if \Complete==0 \r
+\r
+ lxv vs0, DISP8(\Index, 16+\OffsetA)(\AREG)\r
+ lxv vs24, DISP16(\Index, 32+\OffsetB)(\BREG)\r
+ lxv vs25, DISP16(\Index, 48+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs26, vs4\r
+ xvmulsp vs33, vs26, vs5 \r
+ xvmulsp vs34, vs26, vs6\r
+ xvmulsp vs35, vs26, vs7\r
+\r
+ xvmulsp vs48, vs27, vs4\r
+ xvmulsp vs49, vs27, vs5\r
+ xvmulsp vs50, vs27, vs6\r
+ xvmulsp vs51, vs27, vs7\r
+\r
+\r
+.else\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+\r
+ xvmaddasp vs48, vs27, vs4\r
+ xvmaddasp vs49, vs27, vs5\r
+ xvmaddasp vs50, vs27, vs6\r
+ xvmaddasp vs51, vs27, vs7\r
+.endif\r
+ \r
+ \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \AREG, \AREG, DISP8(\Index,16+\OffsetA) \r
+ addi \BREG, \BREG, DISP16(\Index,32+\OffsetB)\r
+\r
+.else\r
+ addi \AREG, \AREG, DISP8(\Index,32) \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+\r
+.endif\r
+.endif \r
+ \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE8x4\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+#if !defined(TRMMKERNEL) \r
+ lxv vs36, 0(CO)\r
+ lxv vs37, 0(T1)\r
+#endif \r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+#if !defined(TRMMKERNEL) \r
+ lxv vs38, 0(T2)\r
+ lxv vs39, 0(T3) \r
+#endif \r
+ add T4, T2, T10 \r
+ add T5, T3, T10\r
+#if !defined(TRMMKERNEL) \r
+ lxv vs40, 0(T4)\r
+ lxv vs41, 0(T5)\r
+#endif \r
+ add T6, T4, T10 \r
+ add T7, T5, T10\r
+#if !defined(TRMMKERNEL) \r
+ lxv vs42, 0(T6)\r
+ lxv vs43, 0(T7)\r
+#endif\r
+ xxmrglw vs0, vs35,vs32\r
+ xxmrglw vs1, vs34,vs33 \r
+ xxmrglw vs4, vs32,vs35\r
+ xxmrglw vs5, vs33,vs34 \r
+\r
+\r
+ xxmrghw vs2, vs35,vs32\r
+ xxmrghw vs3, vs34,vs33 \r
+ xxmrghw vs6, vs32,vs35\r
+ xxmrghw vs7, vs33,vs34 \r
+\r
+ xxmrgld vs24, vs1, vs0 \r
+ xxmrghd vs25,vs5,vs4 \r
+\r
+ xxmrgld vs26, vs2, vs3 \r
+ xxmrghd vs27,vs6,vs7\r
+\r
+\r
+ xxmrglw vs0, vs51,vs48\r
+ xxmrglw vs1, vs50,vs49 \r
+ xxmrglw vs4, vs48,vs51\r
+ xxmrglw vs5, vs49,vs50 \r
+\r
+ xxmrghw vs2, vs51,vs48\r
+ xxmrghw vs3, vs50,vs49 \r
+ xxmrghw vs6, vs48,vs51\r
+ xxmrghw vs7, vs49,vs50 \r
+\r
+ xxmrgld vs28, vs1, vs0 \r
+ xxmrghd vs29,vs5,vs4\r
+\r
+ xxmrgld vs30, vs2, vs3 \r
+ xxmrghd vs31,vs6,vs7\r
+#if defined(TRMMKERNEL)\r
+\r
+ xvmulsp vs36, vs24, alpha_r\r
+ xvmulsp vs37, vs25, alpha_r \r
+ xvmulsp vs38, vs26, alpha_r\r
+ xvmulsp vs39, vs27, alpha_r \r
+ xvmulsp vs40, vs28, alpha_r\r
+ xvmulsp vs41, vs29, alpha_r \r
+ xvmulsp vs42, vs30, alpha_r\r
+ xvmulsp vs43, vs31, alpha_r\r
+#else\r
+ xvmaddasp vs36, vs24, alpha_r\r
+ xvmaddasp vs37, vs25, alpha_r \r
+ xvmaddasp vs38, vs26, alpha_r\r
+ xvmaddasp vs39, vs27, alpha_r \r
+ xvmaddasp vs40, vs28, alpha_r\r
+ xvmaddasp vs41, vs29, alpha_r \r
+ xvmaddasp vs42, vs30, alpha_r\r
+ xvmaddasp vs43, vs31, alpha_r\r
+#endif\r
+\r
+ stxv vs36, 0(CO)\r
+ stxv vs37, 0(T1) \r
+ stxv vs38, 0(T2)\r
+ stxv vs39, 0(T3) \r
+ stxv vs40, 0(T4)\r
+ stxv vs41, 0(T5) \r
+ stxv vs42, 0(T6)\r
+ stxv vs43, 0(T7)\r
+\r
+\r
+ addi CO,CO,16\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=8 and M=2\r
+**********************************************************************************************/\r
+\r
+ \r
+.macro KERNEL8x2_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x2_I_2 AO,BO, 0, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+\r
+.macro Zero8x2\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2, vs2\r
+ xxlxor vs3, vs3, vs3\r
+ \r
+.endm\r
+ \r
+.macro KERNEL8x2\r
+ KERNEL8x2_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL8x2_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs27, DISP8(\Index,16+\OffsetB)(\BREG) \r
+ xxspltw vs8, vs36, 0 \r
+ xxspltw vs9, vs36, 1 \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs2, vs26, vs9\r
+ xvmulsp vs3, vs27, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs26, vs9\r
+ xvmaddasp vs3, vs27, vs9\r
+ \r
+ .endif\r
+ \r
+ addi \AREG, \AREG, DISP2(\Index,8) \r
+ addi \BREG, \BREG, DISP8(\Index,32)\r
+ \r
+.endm\r
+\r
+.macro KERNEL8x2_I_2 AREG,BREG,First,OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs4, DISP4(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP16(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetB)(\BREG)\r
+ lxv vs28, DISP16(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs29, DISP16(\Index,48+\OffsetB)(\BREG) \r
+ xxspltw vs8, vs4, 2 \r
+ xxspltw vs9, vs4, 3 \r
+ xxspltw vs10, vs4, 0 \r
+ xxspltw vs11, vs4, 1\r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs2, vs26, vs9\r
+ xvmulsp vs3, vs27, vs9 \r
+\r
+ xvmulsp vs0, vs28, vs10\r
+ xvmulsp vs1, vs29, vs10 \r
+ xvmulsp vs2, vs28, vs11\r
+ xvmulsp vs3, vs29, vs11 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs26, vs9\r
+ xvmaddasp vs3, vs27, vs9\r
+\r
+ xvmaddasp vs0, vs28, vs10\r
+ xvmaddasp vs1, vs29, vs10 \r
+ xvmaddasp vs2, vs28, vs11\r
+ xvmaddasp vs3, vs29, vs11 \r
+ .endif\r
+\r
+ \r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE8x2\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+ add T4, T2, T10 \r
+ add T5, T3, T10 \r
+ add T6, T4, T10 \r
+ add T7, T5, T10 \r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs4,alpha_r\r
+/* v0 corresponds to vs32, do not forget*/\r
+#if !defined(TRMMKERNEL)\r
+ lxssp v0,0(CO) \r
+ lxssp v1,4(CO) \r
+\r
+ lxssp v2,0(T1)\r
+ lxssp v3,4(T1)\r
+\r
+ lxssp v4,0(T2)\r
+ lxssp v5,4(T2)\r
+\r
+ lxssp v6,0(T3)\r
+ lxssp v7,4(T3)\r
+\r
+ lxssp v8,0(T4)\r
+ lxssp v9,4(T4)\r
+\r
+ lxssp v10,0(T5)\r
+ lxssp v11,4(T5)\r
+\r
+ lxssp v12,0(T6)\r
+ lxssp v13,4(T6)\r
+\r
+ lxssp v14,0(T7)\r
+ lxssp v15,4(T7)\r
+#endif\r
+ xscvspdp vs5, vs2\r
+ xxspltw vs6, vs2, 1 \r
+ xxspltw vs7, vs2, 2 \r
+ xxspltw vs8, vs2, 3 \r
+ xscvspdp vs6,vs6\r
+ xscvspdp vs7,vs7\r
+ xscvspdp vs8,vs8\r
+\r
+ xscvspdp vs24, vs0\r
+ xxspltw vs25, vs0, 1 \r
+ xxspltw vs26, vs0, 2 \r
+ xxspltw vs27, vs0, 3 \r
+ xscvspdp vs25,vs25\r
+ xscvspdp vs26,vs26\r
+ xscvspdp vs27,vs27\r
+\r
+ xscvspdp vs9, vs3\r
+ xxspltw vs10, vs3, 1 \r
+ xxspltw vs11, vs3, 2 \r
+ xxspltw vs12, vs3, 3 \r
+ xscvspdp vs10,vs10\r
+ xscvspdp vs11,vs11\r
+ xscvspdp vs12,vs12\r
+\r
+ xscvspdp vs28, vs1\r
+ xxspltw vs29, vs1, 1 \r
+ xxspltw vs30, vs1, 2 \r
+ xxspltw vs31, vs1, 3 \r
+ xscvspdp vs29,vs29\r
+ xscvspdp vs30,vs30\r
+ xscvspdp vs31,vs31\r
+\r
+\r
+\r
+\r
+#if defined(TRMMKERNEL)\r
+ xsmuldp vs32,vs8, vs4 \r
+ xsmuldp vs33,vs27, vs4 \r
+\r
+ xsmuldp vs34,vs7, vs4 \r
+ xsmuldp vs35,vs26, vs4 \r
+\r
+ xsmuldp vs36,vs6, vs4 \r
+ xsmuldp vs37,vs25, vs4 \r
+\r
+ xsmuldp vs38,vs5, vs4 \r
+ xsmuldp vs39,vs24, vs4 \r
+\r
+ xsmuldp vs40,vs12, vs4 \r
+ xsmuldp vs41,vs31, vs4\r
+\r
+ xsmuldp vs42,vs11, vs4 \r
+ xsmuldp vs43,vs30, vs4 \r
+\r
+ xsmuldp vs44,vs10, vs4 \r
+ xsmuldp vs45,vs29, vs4 \r
+\r
+ xsmuldp vs46,vs9, vs4 \r
+ xsmuldp vs47,vs28, vs4 \r
+#else\r
+ xsmaddadp vs32,vs8, vs4 \r
+ xsmaddadp vs33,vs27, vs4 \r
+\r
+ xsmaddadp vs34,vs7, vs4 \r
+ xsmaddadp vs35,vs26, vs4 \r
+\r
+ xsmaddadp vs36,vs6, vs4 \r
+ xsmaddadp vs37,vs25, vs4 \r
+\r
+ xsmaddadp vs38,vs5, vs4 \r
+ xsmaddadp vs39,vs24, vs4 \r
+\r
+ xsmaddadp vs40,vs12, vs4 \r
+ xsmaddadp vs41,vs31, vs4\r
+\r
+ xsmaddadp vs42,vs11, vs4 \r
+ xsmaddadp vs43,vs30, vs4 \r
+\r
+ xsmaddadp vs44,vs10, vs4 \r
+ xsmaddadp vs45,vs29, vs4 \r
+\r
+ xsmaddadp vs46,vs9, vs4 \r
+ xsmaddadp vs47,vs28, vs4 \r
+#endif \r
+\r
+ stxssp v0,0(CO) \r
+ stxssp v1,4(CO) \r
+\r
+ stxssp v2,0(T1)\r
+ stxssp v3,4(T1)\r
+\r
+ stxssp v4,0(T2)\r
+ stxssp v5,4(T2)\r
+\r
+ stxssp v6,0(T3)\r
+ stxssp v7,4(T3)\r
+\r
+ stxssp v8,0(T4)\r
+ stxssp v9,4(T4)\r
+\r
+ stxssp v10,0(T5)\r
+ stxssp v11,4(T5)\r
+\r
+ stxssp v12,0(T6)\r
+ stxssp v13,4(T6)\r
+\r
+ stxssp v14,0(T7)\r
+ stxssp v15,4(T7)\r
+ \r
+\r
+ addi CO,CO,8\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=8 and M=1\r
+**********************************************************************************************/\r
+.macro KERNEL8x1_4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL8x1_I_4 AO,BO, 0, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro Zero8x1\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+.endm\r
+\r
+.macro KERNEL8x1\r
+ KERNEL8x1_1 AO,BO, 0 \r
+.endm\r
+\r
+.macro KERNEL8x1_2\r
+ KERNEL8x1_2_1 AO,BO, 0 \r
+.endm\r
+\r
+.macro KERNEL8x1_1 AREG,BREG,First \r
+ lxvwsx vs8, 0, \AREG\r
+ lxv vs26, 0(\BREG)\r
+ lxv vs27, 16(\BREG) \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ .endif\r
+ addi \AREG, \AREG, 4 \r
+ addi \BREG, \BREG, 32\r
+.endm\r
+\r
+.macro KERNEL8x1_2_1 AREG,BREG,First \r
+ lxsd v4, 0(\AREG)\r
+ lxv vs26, 0(\BREG)\r
+ lxv vs27, 16(\BREG) \r
+ lxv vs28, 32(\BREG)\r
+ lxv vs29, 48(\BREG) \r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs0, vs28, vs9\r
+ xvmulsp vs1, vs29, vs9 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs0, vs28, vs9\r
+ xvmaddasp vs1, vs29, vs9 \r
+ .endif\r
+ addi \AREG, \AREG, 8 \r
+ addi \BREG, \BREG, 64\r
+.endm\r
+\r
+.macro KERNEL8x1_I_4 AREG,BREG,First,OffsetA,OffsetB, Index,IsLast \r
+ lxv vs4, DISP4(\Index, 0+\OffsetA)(\AREG)\r
+ xxspltw vs8, vs4, 3 \r
+ xxspltw vs9, vs4, 2 \r
+ xxspltw vs10, vs4, 1 \r
+ xxspltw vs11, vs4, 0\r
+ lxv vs26, DISP32(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetB)(\BREG)\r
+ lxv vs28, DISP32(\Index,32+\OffsetB)(\BREG)\r
+ lxv vs29, DISP32(\Index,48+\OffsetB)(\BREG) \r
+ lxv vs30, DISP32(\Index,64+ 0+\OffsetB)(\BREG)\r
+ lxv vs31, DISP32(\Index,64+16+\OffsetB)(\BREG)\r
+ lxv vs32, DISP32(\Index,64+32+\OffsetB)(\BREG)\r
+ lxv vs33, DISP32(\Index,64+48+\OffsetB)(\BREG) \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs0, vs28, vs9\r
+ xvmulsp vs1, vs29, vs9 \r
+ xvmulsp vs0, vs30, vs10\r
+ xvmulsp vs1, vs31, vs10 \r
+ xvmulsp vs0, vs32, vs11\r
+ xvmulsp vs1, vs33, vs11 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs0, vs28, vs9\r
+ xvmaddasp vs1, vs29, vs9 \r
+ xvmaddasp vs0, vs30, vs10\r
+ xvmaddasp vs1, vs31, vs10 \r
+ xvmaddasp vs0, vs32, vs11\r
+ xvmaddasp vs1, vs33, vs11 \r
+ .endif\r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ addi \BREG, \BREG, DISP32(\Index,128)\r
+.endif \r
+.endm\r
+\r
+.macro SAVE8x1\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+ add T4, T2, T10 \r
+ add T5, T3, T10 \r
+ add T6, T4, T10 \r
+ add T7, T5, T10 \r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs4,alpha_r\r
+/* v0 corresponds to vs32, do not forget*/\r
+#if !defined(TRMMKERNEL)\r
+ lxssp v0,0(CO) \r
+ lxssp v2,0(T1) \r
+ lxssp v4,0(T2) \r
+ lxssp v6,0(T3) \r
+ lxssp v8,0(T4) \r
+ lxssp v10,0(T5) \r
+ lxssp v12,0(T6) \r
+ lxssp v14,0(T7)\r
+#endif\r
+ xscvspdp vs24, vs0\r
+ xxspltw vs25, vs0, 1 \r
+ xxspltw vs26, vs0, 2 \r
+ xxspltw vs27, vs0, 3 \r
+ xscvspdp vs25,vs25\r
+ xscvspdp vs26,vs26\r
+ xscvspdp vs27,vs27\r
+ xscvspdp vs28, vs1\r
+ xxspltw vs29, vs1, 1 \r
+ xxspltw vs30, vs1, 2 \r
+ xxspltw vs31, vs1, 3 \r
+ xscvspdp vs29,vs29\r
+ xscvspdp vs30,vs30\r
+ xscvspdp vs31,vs31\r
+#if defined(TRMMKERNEL)\r
+ xsmuldp vs32,vs27, vs4 \r
+ xsmuldp vs34,vs26, vs4 \r
+ xsmuldp vs36,vs25, vs4 \r
+ xsmuldp vs38,vs24, vs4 \r
+ xsmuldp vs40,vs31, vs4 \r
+ xsmuldp vs42,vs30, vs4 \r
+ xsmuldp vs44,vs29, vs4 \r
+ xsmuldp vs46,vs28, vs4 \r
+#else\r
+ xsmaddadp vs32,vs27, vs4 \r
+ xsmaddadp vs34,vs26, vs4 \r
+ xsmaddadp vs36,vs25, vs4 \r
+ xsmaddadp vs38,vs24, vs4 \r
+ xsmaddadp vs40,vs31, vs4 \r
+ xsmaddadp vs42,vs30, vs4 \r
+ xsmaddadp vs44,vs29, vs4 \r
+ xsmaddadp vs46,vs28, vs4 \r
+#endif \r
+ stxssp v0,0(CO) \r
+ stxssp v2,0(T1) \r
+ stxssp v4,0(T2) \r
+ stxssp v6,0(T3) \r
+ stxssp v8,0(T4) \r
+ stxssp v10,0(T5) \r
+ stxssp v12,0(T6) \r
+ stxssp v14,0(T7) \r
+ addi CO,CO,4\r
+.endm\r
+\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=4 and M=16\r
+**********************************************************************************************/\r
+\r
+.macro LOAD4x16_1\r
+ LOAD4x16 1\r
+.endm\r
+\r
+.macro LOAD4x16_0\r
+ LOAD4x16 0\r
+.endm\r
+\r
+.macro KERNEL4x16_L1_L4 Index,IsLast\r
+ KERNEL4x16_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x16_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x16_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x16_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL4x16_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL4x16_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x16_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x16_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro Zero4X16\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs38, vs38, vs38\r
+ xxlxor vs39, vs39, vs39\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ xxlxor vs42, vs42, vs42\r
+ xxlxor vs43, vs43, vs43\r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ xxlxor vs46, vs46, vs46\r
+ xxlxor vs47, vs47, vs47 \r
+.endm\r
+\r
+.macro LOAD4x16 Zero\r
+\r
+ lxv vs24, 0(BO) \r
+ lxv vs0, 0(AO)\r
+ lxv vs1, 16(AO)\r
+ lxv vs2, 32(AO)\r
+ lxv vs3, 48(AO)\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs38, vs38, vs38\r
+ xxlxor vs39, vs39, vs39\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ xxlxor vs42, vs42, vs42\r
+ xxlxor vs43, vs43, vs43\r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ xxlxor vs46, vs46, vs46\r
+ xxlxor vs47, vs47, vs47\r
+ \r
+.endif\r
+.endm\r
+\r
+.macro END4x16_NORMAL\r
+ END4x16 0, AO, BO, 64,16 \r
+.endm\r
+\r
+.macro END4x16 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+ xvmulsp vs34, vs2,vs24 \r
+ xvmulsp vs35, vs3,vs24 \r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+ xvmulsp vs38, vs2,vs25 \r
+ xvmulsp vs39, vs3,vs25\r
+\r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+ xvmulsp vs42, vs2,vs26 \r
+ xvmulsp vs43, vs3,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ xvmulsp vs46, vs2,vs27 \r
+ xvmulsp vs47, vs3,vs27\r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL4x16_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs8, DISP16(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ lxv vs4, DISP64(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP64(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP64(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP64(\Index,48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+\r
+\r
+ lxv vs24, DISP16(\Index,16+\OffsetB)(\BREG) \r
+\r
+ lxv vs0, DISP64(\Index,64+\OffsetA)(\AREG)\r
+ lxv vs1, DISP64(\Index,64+16+\OffsetA)(\AREG)\r
+ lxv vs2, DISP64(\Index,64+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP64(\Index,64+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+ \r
+\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+ \r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+ \r
+ xxpermdi vs27, vs26, vs26,2 \r
+\r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+ \r
+\r
+ lxv vs8, DISP16(\Index,32+\OffsetB)(\BREG) \r
+\r
+ lxv vs4, DISP64(\Index,128+0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP64(\Index,128+16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP64(\Index,128+32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP64(\Index,128+48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24 \r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+\r
+ \r
+ \r
+.if \Complete==0\r
+ lxv vs24, DISP16(\Index,48+\OffsetB)(\BREG) \r
+\r
+ lxv vs0, DISP64(\Index,192+\OffsetA)(\AREG)\r
+ lxv vs1, DISP64(\Index,192+16+\OffsetA)(\AREG) \r
+ lxv vs2, DISP64(\Index,192+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP64(\Index,192+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+\r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ \r
+ addi \BREG, \BREG, DISP16(\Index,16*3+\OffsetB)\r
+ addi \AREG, \AREG, DISP64(\Index,64*3+\OffsetA)\r
+.else\r
+ \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+ addi \AREG, \AREG, DISP64(\Index,256)\r
+.endif\r
+.endif \r
+ \r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+ \r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ \r
+.endif\r
+ \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+\r
+ \r
+\r
+.endm\r
+\r
+.macro KERNEL4x16 First\r
+\r
+ LOAD4x16 0\r
+ END4x16 \First, AO, BO, 64,16 \r
+.endm\r
+\r
+.macro KERNEL4x16_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+ \r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\BREG) \r
+ lxv vs4, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs6, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs7, DISP32(\Index,48+\OffsetA)(\AREG) \r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+ xvmulsp vs34, vs2,vs24 \r
+ xvmulsp vs35, vs3,vs24 \r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+ xvmulsp vs38, vs2,vs25 \r
+ xvmulsp vs39, vs3,vs25 \r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+ xvmaddasp vs34, vs2,vs24 \r
+ xvmaddasp vs35, vs3,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+ xvmaddasp vs38, vs2,vs25 \r
+ xvmaddasp vs39, vs3,vs25 \r
+.endif\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ \r
+.if \First==1 \r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+ xvmulsp vs42, vs2,vs26 \r
+ xvmulsp vs43, vs3,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ xvmulsp vs46, vs2,vs27 \r
+ xvmulsp vs47, vs3,vs27\r
+\r
+ \r
+.else \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+ xvmaddasp vs42, vs2,vs26 \r
+ xvmaddasp vs43, vs3,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ xvmaddasp vs46, vs2,vs27 \r
+ xvmaddasp vs47, vs3,vs27\r
+ \r
+\r
+.endif\r
+.if \Complete==0\r
+ lxv vs24, DISP8(\Index,16+\OffsetB)(\BREG) \r
+ lxv vs0, DISP32(\Index,64+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,64+16+\OffsetA)(\AREG)\r
+ lxv vs2, DISP32(\Index,64+32+\OffsetA)(\AREG)\r
+ lxv vs3, DISP32(\Index,64+48+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \BREG, \BREG, DISP8(\Index,16+\OffsetB) \r
+ addi \AREG, \AREG, DISP32(\Index,64+\OffsetA)\r
+\r
+.else\r
+ addi \BREG, \BREG, DISP8(\Index,32)\r
+ addi \AREG, \AREG, DISP32(\Index,128) \r
+.endif\r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs4,vs8\r
+ xvmulsp vs33, vs5,vs8\r
+ xvmulsp vs34, vs6,vs8 \r
+ xvmulsp vs35, vs7,vs8\r
+\r
+ xvmulsp vs36, vs4,vs9\r
+ xvmulsp vs37, vs5,vs9\r
+ xvmulsp vs38, vs6,vs9 \r
+ xvmulsp vs39, vs7,vs9\r
+.else\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+ xvmaddasp vs34, vs6,vs8 \r
+ xvmaddasp vs35, vs7,vs8 \r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+ xvmaddasp vs38, vs6,vs9 \r
+ xvmaddasp vs39, vs7,vs9\r
+.endif \r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ \r
+.endif\r
+.if \First==1 \r
+ xvmulsp vs40, vs4,vs10\r
+ xvmulsp vs41, vs5,vs10\r
+ xvmulsp vs42, vs6,vs10 \r
+ xvmulsp vs43, vs7,vs10\r
+\r
+ xvmulsp vs44, vs4,vs11\r
+ xvmulsp vs45, vs5,vs11\r
+ xvmulsp vs46, vs6,vs11 \r
+ xvmulsp vs47, vs7,vs11\r
+\r
+ \r
+\r
+.else \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+ xvmaddasp vs42, vs6,vs10 \r
+ xvmaddasp vs43, vs7,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+ xvmaddasp vs46, vs6,vs11 \r
+ xvmaddasp vs47, vs7,vs11\r
+\r
+ \r
+\r
+.endif\r
+\r
+.endm\r
+\r
+ \r
+.macro SAVE4x16\r
+\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+\r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+\r
+ \r
+ \r
+ xxmrglw vs8, vs32, vs44\r
+ xxmrglw vs10, vs36, vs40 \r
+\r
+ xxmrghw vs1, vs32, vs44\r
+ xxmrghw vs0, vs36, vs40\r
+\r
+ xxmrglw vs12, vs33, vs45\r
+ xxmrglw vs14, vs37, vs41 \r
+\r
+ xxmrghw vs2, vs37, vs41\r
+ xxmrghw vs3, vs33, vs45\r
+\r
+ xxmrglw vs16, vs34, vs46\r
+ xxmrglw vs18, vs38, vs42 \r
+\r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+\r
+ xxmrghw vs4, vs38, vs42\r
+ xxmrghw vs5, vs34, vs46\r
+\r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+\r
+ xxmrglw vs24, vs35, vs47\r
+ xxmrglw vs26, vs39, vs43 \r
+\r
+ xxlor vs17, vs16, vs16\r
+ xxlor vs19, vs18, vs18\r
+\r
+ xxmrghw vs30, vs39, vs43 \r
+ xxmrghw vs31, vs35, vs47\r
+\r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs32, 0(CO)\r
+ lxv vs33, 16(CO) \r
+ lxv vs34, 32(CO) \r
+ lxv vs35, 48(CO) \r
+#endif\r
+ xxlor vs25, vs24, vs24\r
+ xxlor vs27, vs26, vs26 \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs36, 0(T1)\r
+ lxv vs37, 16(T1) \r
+ lxv vs38, 32(T1) \r
+ lxv vs39, 48(T1) \r
+#endif\r
+#ifndef TRMMKERNEL \r
+ lxv vs40, 0(T2)\r
+ lxv vs41, 16(T2) \r
+ lxv vs42, 32(T2) \r
+ lxv vs43, 48(T2) \r
+#endif \r
+#ifndef TRMMKERNEL \r
+ lxv vs44, 0(T3)\r
+ lxv vs45, 16(T3) \r
+ lxv vs46, 32(T3) \r
+ lxv vs47, 48(T3) \r
+#endif \r
+\r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ \r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+\r
+ xxperm vs16, vs4, save_permute_1\r
+ xxperm vs18, vs5, save_permute_1\r
+ \r
+ xxperm vs17, vs4, save_permute_2 \r
+ xxperm vs19, vs5, save_permute_2 \r
+\r
+ xxperm vs24, vs30, save_permute_1\r
+ xxperm vs26, vs31, save_permute_1 \r
+ \r
+ xxperm vs25, vs30, save_permute_2 \r
+ xxperm vs27, vs31, save_permute_2 \r
+\r
+\r
+ /* multiply add normal way */\r
+ \r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs32, vs8, alpha_r \r
+ xvmulsp vs33, vs12, alpha_r \r
+ xvmulsp vs34, vs16, alpha_r \r
+ xvmulsp vs35, vs24, alpha_r \r
+ xvmulsp vs36, vs9, alpha_r \r
+ xvmulsp vs37, vs13, alpha_r \r
+ xvmulsp vs38, vs17, alpha_r \r
+ xvmulsp vs39, vs25, alpha_r \r
+#else \r
+ xvmaddasp vs32, vs8, alpha_r \r
+ xvmaddasp vs33, vs12, alpha_r \r
+ xvmaddasp vs34, vs16, alpha_r \r
+ xvmaddasp vs35, vs24, alpha_r \r
+ xvmaddasp vs36, vs9, alpha_r \r
+ xvmaddasp vs37, vs13, alpha_r \r
+ xvmaddasp vs38, vs17, alpha_r \r
+ xvmaddasp vs39, vs25, alpha_r \r
+#endif \r
+\r
+\r
+\r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs40, vs10, alpha_r \r
+ xvmulsp vs41, vs14, alpha_r \r
+ xvmulsp vs42, vs18, alpha_r \r
+ xvmulsp vs43, vs26, alpha_r \r
+ xvmulsp vs44, vs11, alpha_r \r
+ xvmulsp vs45, vs15, alpha_r \r
+ xvmulsp vs46, vs19, alpha_r \r
+ xvmulsp vs47, vs27, alpha_r \r
+#else\r
+\r
+ xvmaddasp vs40, vs10, alpha_r \r
+ xvmaddasp vs41, vs14, alpha_r \r
+ xvmaddasp vs42, vs18, alpha_r \r
+ xvmaddasp vs43, vs26, alpha_r \r
+ xvmaddasp vs44, vs11, alpha_r \r
+ xvmaddasp vs45, vs15, alpha_r \r
+ xvmaddasp vs46, vs19, alpha_r \r
+ xvmaddasp vs47, vs27, alpha_r \r
+ \r
+#endif \r
+\r
+ stxv vs32, 0(CO)\r
+ stxv vs33, 16(CO) \r
+ stxv vs34, 32(CO) \r
+ stxv vs35, 48(CO) \r
+\r
+ stxv vs36, 0(T1)\r
+ stxv vs37, 16(T1) \r
+ stxv vs38, 32(T1) \r
+ stxv vs39, 48(T1)\r
+\r
+ stxv vs40, 0(T2)\r
+ stxv vs41, 16(T2) \r
+ stxv vs42, 32(T2) \r
+ stxv vs43, 48(T2) \r
+ stxv vs44, 0(T3)\r
+ stxv vs45, 16(T3) \r
+ stxv vs46, 32(T3) \r
+ stxv vs47, 48(T3)\r
+ \r
+ addi CO,CO,64\r
+\r
+\r
+.endm\r
+\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=4 and M=8\r
+**********************************************************************************************/\r
+\r
+.macro LOAD4x8_1\r
+ LOAD4x8 1\r
+.endm\r
+\r
+.macro LOAD4x8_0\r
+ LOAD4x8 0\r
+.endm\r
+\r
+.macro KERNEL4x8_L1_L4 Index,IsLast\r
+ KERNEL4x8_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x8_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x8_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x8_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL4x8_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL4x8_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x8_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x8_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro END4x8_NORMAL\r
+ END4x8 0, AO, BO, 32,16 \r
+.endm\r
+\r
+.macro Zero4X8\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33\r
+ \r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ \r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41\r
+ \r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45\r
+ \r
+.endm\r
+\r
+.macro LOAD4x8 Zero\r
+\r
+ lxv vs24, 0(BO) \r
+ lxv vs0, 0(AO)\r
+ lxv vs1, 16(AO)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+\r
+ xxpermdi vs27, vs26, vs26,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs36, vs36, vs36\r
+ xxlxor vs37, vs37, vs37\r
+ xxlxor vs40, vs40, vs40\r
+ xxlxor vs41, vs41, vs41 \r
+ xxlxor vs44, vs44, vs44\r
+ xxlxor vs45, vs45, vs45 \r
+ \r
+.endif\r
+.endm\r
+\r
+\r
+.macro END4x8 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+\r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ \r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ \r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL4x8_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs8, DISP16(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ lxv vs4, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ \r
+\r
+ lxv vs24, DISP16(\Index,16+\OffsetB)(\BREG) \r
+\r
+ lxv vs0, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,32+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+ xxpermdi vs27, vs26, vs26,2 \r
+\r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+\r
+ \r
+\r
+ lxv vs8, DISP16(\Index,32+\OffsetB)(\BREG) \r
+\r
+ lxv vs4, DISP32(\Index,64+0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP32(\Index,64+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+\r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+\r
+ \r
+\r
+.if \Complete==0\r
+ lxv vs24, DISP16(\Index,48+\OffsetB)(\BREG) \r
+\r
+ lxv vs0, DISP32(\Index,96+\OffsetA)(\AREG)\r
+ lxv vs1, DISP32(\Index,96+16+\OffsetA)(\AREG) \r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+\r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ \r
+ addi \BREG, \BREG, DISP16(\Index,16*3+\OffsetB)\r
+ addi \AREG, \AREG, DISP32(\Index,32*3+\OffsetA)\r
+.else\r
+ \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif\r
+.endif \r
+ \r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ \r
+.endif\r
+ \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11\r
+\r
+ \r
+\r
+.endm\r
+\r
+.macro KERNEL4x8 First\r
+\r
+ LOAD4x8 0\r
+ END4x8 \First, AO, BO, 32,16 \r
+.endm\r
+\r
+.macro KERNEL4x8_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+ \r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\BREG) \r
+ lxv vs4, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs5, DISP16(\Index,16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs10, vs8, permute_mask \r
+ xxpermdi vs9, vs8, vs8,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs0,vs24\r
+ xvmulsp vs33, vs1,vs24\r
+\r
+ xvmulsp vs36, vs0,vs25\r
+ xvmulsp vs37, vs1,vs25\r
+\r
+.else\r
+ xvmaddasp vs32, vs0,vs24\r
+ xvmaddasp vs33, vs1,vs24\r
+\r
+ xvmaddasp vs36, vs0,vs25\r
+ xvmaddasp vs37, vs1,vs25\r
+\r
+.endif\r
+\r
+ xxpermdi vs11, vs10, vs10,2 \r
+ \r
+.if \First==1 \r
+ xvmulsp vs40, vs0,vs26\r
+ xvmulsp vs41, vs1,vs26\r
+\r
+ xvmulsp vs44, vs0,vs27\r
+ xvmulsp vs45, vs1,vs27\r
+ \r
+\r
+.else \r
+ xvmaddasp vs40, vs0,vs26\r
+ xvmaddasp vs41, vs1,vs26\r
+\r
+ xvmaddasp vs44, vs0,vs27\r
+ xvmaddasp vs45, vs1,vs27\r
+ \r
+\r
+.endif\r
+.if \Complete==0\r
+ lxv vs24, DISP8(\Index,16+\OffsetB)(\BREG) \r
+\r
+ lxv vs0, DISP16(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs1, DISP16(\Index,32+16+\OffsetA)(\AREG)\r
+\r
+ xxperm vs26, vs24, permute_mask \r
+ xxpermdi vs25, vs24, vs24,2 \r
+.endif \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \BREG, \BREG, DISP8(\Index,16+\OffsetB) \r
+ addi \AREG, \AREG, DISP16(\Index,32+\OffsetA)\r
+\r
+.else\r
+ addi \BREG, \BREG, DISP8(\Index,32)\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+.endif\r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs4,vs8\r
+ xvmulsp vs33, vs5,vs8\r
+\r
+ xvmulsp vs36, vs4,vs9\r
+ xvmulsp vs37, vs5,vs9\r
+\r
+.else\r
+ xvmaddasp vs32, vs4,vs8\r
+ xvmaddasp vs33, vs5,vs8\r
+\r
+ xvmaddasp vs36, vs4,vs9\r
+ xvmaddasp vs37, vs5,vs9\r
+\r
+.endif \r
+ \r
+.if \Complete==0 \r
+ xxpermdi vs27, vs26, vs26,2 \r
+ \r
+.endif\r
+.if \First==1 \r
+ xvmulsp vs40, vs4,vs10\r
+ xvmulsp vs41, vs5,vs10\r
+\r
+ xvmulsp vs44, vs4,vs11\r
+ xvmulsp vs45, vs5,vs11\r
+ \r
+.else \r
+ xvmaddasp vs40, vs4,vs10\r
+ xvmaddasp vs41, vs5,vs10\r
+\r
+ xvmaddasp vs44, vs4,vs11\r
+ xvmaddasp vs45, vs5,vs11 \r
+\r
+.endif\r
+\r
+.endm\r
+\r
+\r
+.macro SAVE4x8 \r
+ \r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+\r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+\r
+ \r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs34, 0(CO)\r
+ lxv vs35, 16(CO) \r
+ lxv vs38, 0(T1)\r
+ lxv vs39, 16(T1) \r
+ lxv vs42, 0(T2)\r
+ lxv vs43, 16(T2) \r
+ lxv vs46, 0(T3)\r
+ lxv vs47, 16(T3) \r
+\r
+ \r
+#endif \r
+\r
+ xxmrglw vs8, vs32, vs44\r
+ xxmrglw vs10, vs36, vs40 \r
+\r
+ xxmrghw vs1, vs32, vs44\r
+ xxmrghw vs0, vs36, vs40\r
+\r
+ xxmrglw vs12, vs33, vs45\r
+ xxmrglw vs14, vs37, vs41 \r
+\r
+ xxmrghw vs2, vs37, vs41\r
+ xxmrghw vs3, vs33, vs45\r
+\r
+ xxlor vs9, vs8, vs8\r
+ xxlor vs11, vs10, vs10 \r
+ \r
+ xxlor vs13, vs12, vs12\r
+ xxlor vs15, vs14, vs14\r
+\r
+ xxperm vs8, vs0, save_permute_1\r
+ xxperm vs10, vs1, save_permute_1\r
+ xxperm vs9, vs0, save_permute_2 \r
+ xxperm vs11, vs1, save_permute_2 \r
+\r
+ xxperm vs12, vs2, save_permute_1\r
+ xxperm vs14, vs3, save_permute_1\r
+ \r
+ xxperm vs13, vs2, save_permute_2 \r
+ xxperm vs15, vs3, save_permute_2 \r
+\r
+\r
+ /* multiply add normal way */\r
+ \r
+#ifdef TRMMKERNEL\r
+ xvmulsp vs34, vs8, alpha_r \r
+ xvmulsp vs35, vs12, alpha_r \r
+ xvmulsp vs38, vs9, alpha_r \r
+ xvmulsp vs39, vs13, alpha_r \r
+ xvmulsp vs42, vs10, alpha_r \r
+ xvmulsp vs43, vs14, alpha_r \r
+ xvmulsp vs46, vs11, alpha_r \r
+ xvmulsp vs47, vs15, alpha_r \r
+#else \r
+ xvmaddasp vs34, vs8, alpha_r \r
+ xvmaddasp vs35, vs12, alpha_r \r
+ xvmaddasp vs38, vs9, alpha_r \r
+ xvmaddasp vs39, vs13, alpha_r \r
+ xvmaddasp vs42, vs10, alpha_r \r
+ xvmaddasp vs43, vs14, alpha_r \r
+ xvmaddasp vs46, vs11, alpha_r \r
+ xvmaddasp vs47, vs15, alpha_r \r
+#endif \r
+ \r
+ \r
+ stxv vs34, 0(CO)\r
+ stxv vs35, 16(CO) \r
+ stxv vs38, 0(T1)\r
+ stxv vs39, 16(T1) \r
+ stxv vs42, 0(T2)\r
+ stxv vs43, 16(T2) \r
+ stxv vs46, 0(T3)\r
+ stxv vs47, 16(T3) \r
+ \r
+\r
+ addi CO,CO,32\r
+\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=4 and M=4\r
+**********************************************************************************************/\r
+\r
+.macro LOAD4x4_1\r
+ LOAD4x4 1\r
+.endm\r
+\r
+.macro LOAD4x4_0\r
+ LOAD4x4 0\r
+.endm\r
+\r
+.macro KERNEL4x4_L1_L4 Index,IsLast\r
+ KERNEL4x4_L1_L4_I AO,BO, 0,0, \Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x4_I1_L4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x4_I1_L4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x4_I1_L4_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L4_I AO,BO, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+.macro KERNEL4x4_I1_L2_3 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L2_I AO,BO,0, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro KERNEL4x4_I2_L4_2 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,0\r
+.endm\r
+\r
+.macro KERNEL4x4_I2_L4_3 AREG,BREG,OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x4_L1_L4_I \AREG,\BREG, \OffsetA,\OffsetB,\Index,\IsLast,1\r
+.endm\r
+\r
+.macro Zero4X4\r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ \r
+.endm\r
+\r
+.macro LOAD4x4 Zero\r
+\r
+ lxv vs0, 0(AO)\r
+ lxv vs24, 0(BO) \r
+\r
+\r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+\r
+.if \Zero==1 \r
+ xxlxor vs32, vs32, vs32\r
+ xxlxor vs33, vs33, vs33 \r
+ xxlxor vs34, vs34, vs34\r
+ xxlxor vs35, vs35, vs35\r
+ \r
+.endif\r
+.endm\r
+\r
+.macro END4x4_NORMAL\r
+ END4x4 0, AO, BO, 16,16 \r
+.endm\r
+\r
+.macro END4x4 First, AREG, BREG, OffsetA, OffsetB\r
+\r
+.if \OffsetB != 0 \r
+ addi \BREG, \BREG, \OffsetB \r
+.endif\r
+.if \OffsetA != 0 \r
+ addi \AREG, \AREG, \OffsetA \r
+.endif \r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs24, vs0\r
+ xvmulsp vs33, vs24, vs1 \r
+ xvmulsp vs34, vs24, vs2\r
+ xvmulsp vs35, vs24, vs3 \r
+.else\r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+ \r
+\r
+.endif\r
+.endm \r
+\r
+.macro KERNEL4x4_L1_L4_I AREG,BREG, OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs4, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP16(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+ \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+ \r
+\r
+ lxv vs0, DISP16(\Index, 16+\OffsetA)(\AREG)\r
+ lxv vs24, DISP16(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+ \r
+ \r
+\r
+ lxv vs4, DISP16(\Index, 32+\OffsetA)(\AREG)\r
+ lxv vs26, DISP16(\Index, 32+\OffsetB)(\BREG) \r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+ \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+ \r
+\r
+.if \Complete==0 \r
+\r
+ lxv vs0, DISP16(\Index, 48+\OffsetA)(\AREG)\r
+ lxv vs24, DISP16(\Index, 48+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+.endif\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+ \r
+\r
+ \r
+ \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \AREG, \AREG, DISP16(\Index,16*3+\OffsetA) \r
+ addi \BREG, \BREG, DISP16(\Index,16*3+\OffsetB)\r
+\r
+.else\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+\r
+.endif\r
+.endif \r
+ \r
+ \r
+.endm\r
+\r
+.macro KERNEL4x4 First\r
+ LOAD4x4 0\r
+ END4x4 \First, AO, BO, 16,16 \r
+.endm\r
+\r
+.macro KERNEL4x4_L1_L2_I AREG,BREG,First,OffsetA,OffsetB, Index,IsLast ,Complete\r
+\r
+ lxv vs4, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP8(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ xxperm vs6, vs4, permute_mask \r
+ xxpermdi vs5, vs4, vs4,2 \r
+ xxpermdi vs7, vs6, vs6,2 \r
+.if \First==1\r
+ xvmulsp vs32, vs24, vs0\r
+ xvmulsp vs33, vs24, vs1 \r
+ xvmulsp vs34, vs24, vs2\r
+ xvmulsp vs35, vs24, vs3\r
+ \r
+.else \r
+ xvmaddasp vs32, vs24, vs0\r
+ xvmaddasp vs33, vs24, vs1 \r
+ xvmaddasp vs34, vs24, vs2\r
+ xvmaddasp vs35, vs24, vs3\r
+ \r
+.endif\r
+\r
+.if \Complete==0 \r
+\r
+ lxv vs0, DISP8(\Index, 16+\OffsetA)(\AREG)\r
+ lxv vs24, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ xxperm vs2, vs0, permute_mask \r
+ xxpermdi vs1, vs0, vs0,2 \r
+ xxpermdi vs3, vs2, vs2,2 \r
+.endif\r
+\r
+.if \First==1\r
+ xvmulsp vs32, vs26, vs4\r
+ xvmulsp vs33, vs26, vs5 \r
+ xvmulsp vs34, vs26, vs6\r
+ xvmulsp vs35, vs26, vs7 \r
+\r
+\r
+.else\r
+ xvmaddasp vs32, vs26, vs4\r
+ xvmaddasp vs33, vs26, vs5 \r
+ xvmaddasp vs34, vs26, vs6\r
+ xvmaddasp vs35, vs26, vs7\r
+ \r
+.endif\r
+ \r
+ \r
+.if \IsLast==1 \r
+.if \Complete==1\r
+ addi \AREG, \AREG, DISP8(\Index,16+\OffsetA) \r
+ addi \BREG, \BREG, DISP8(\Index,16+\OffsetB)\r
+\r
+.else\r
+ addi \AREG, \AREG, DISP8(\Index,32) \r
+ addi \BREG, \BREG, DISP8(\Index,32)\r
+\r
+.endif\r
+.endif \r
+ \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE4x4\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+#if !defined(TRMMKERNEL) \r
+ lxv vs36, 0(CO)\r
+ lxv vs37, 0(T1)\r
+#endif\r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+#if !defined(TRMMKERNEL) \r
+ lxv vs38, 0(T2)\r
+ lxv vs39, 0(T3) \r
+#endif \r
+\r
+ xxmrglw vs0, vs35,vs32\r
+ xxmrglw vs1, vs34,vs33 \r
+ xxmrglw vs4, vs32,vs35\r
+ xxmrglw vs5, vs33,vs34 \r
+\r
+\r
+ xxmrghw vs2, vs35,vs32\r
+ xxmrghw vs3, vs34,vs33 \r
+ xxmrghw vs6, vs32,vs35\r
+ xxmrghw vs7, vs33,vs34 \r
+\r
+ xxmrgld vs24, vs1, vs0 \r
+ xxmrghd vs25,vs5,vs4 \r
+\r
+ xxmrgld vs26, vs2, vs3 \r
+ xxmrghd vs27,vs6,vs7\r
+\r
+ #if defined(TRMMKERNEL)\r
+ xvmulsp vs36, vs24, alpha_r\r
+ xvmulsp vs37, vs25, alpha_r \r
+ xvmulsp vs38, vs26, alpha_r\r
+ xvmulsp vs39, vs27, alpha_r \r
+#else\r
+ xvmaddasp vs36, vs24, alpha_r\r
+ xvmaddasp vs37, vs25, alpha_r \r
+ xvmaddasp vs38, vs26, alpha_r\r
+ xvmaddasp vs39, vs27, alpha_r \r
+ #endif\r
+ stxv vs36, 0(CO)\r
+ stxv vs37, 0(T1) \r
+ stxv vs38, 0(T2)\r
+ stxv vs39, 0(T3) \r
+ \r
+\r
+\r
+ addi CO,CO,16\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=4 and M=2\r
+**********************************************************************************************/\r
+\r
+ \r
+.macro KERNEL4x2_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x2_I_2 AO,BO, 0, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+\r
+.macro Zero4x2\r
+ xxlxor vs0, vs0, vs0 \r
+ xxlxor vs2, vs2, vs2 \r
+ \r
+.endm\r
+ \r
+.macro KERNEL4x2\r
+ KERNEL4x2_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL4x2_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP8(\Index, 0+\OffsetB)(\BREG) \r
+ xxspltw vs8, vs36, 0 \r
+ xxspltw vs9, vs36, 1 \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+ xvmulsp vs2, vs26, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ xvmaddasp vs2, vs26, vs9 \r
+ \r
+ .endif\r
+ \r
+ addi \AREG, \AREG, DISP2(\Index,8) \r
+ addi \BREG, \BREG, DISP4(\Index,16)\r
+ \r
+.endm\r
+\r
+.macro KERNEL4x2_I_2 AREG,BREG,First,OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs4, DISP4(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs26, DISP8(\Index, 0+\OffsetB)(\BREG) \r
+ lxv vs28, DISP8(\Index,16+\OffsetB)(\BREG) \r
+ xxspltw vs8, vs4, 2 \r
+ xxspltw vs9, vs4, 3 \r
+ xxspltw vs10, vs4, 0 \r
+ xxspltw vs11, vs4, 1\r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+ xvmulsp vs2, vs26, vs9 \r
+\r
+ xvmulsp vs0, vs28, vs10 \r
+ xvmulsp vs2, vs28, vs11 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ xvmaddasp vs2, vs26, vs9 \r
+\r
+ xvmaddasp vs0, vs28, vs10 \r
+ xvmaddasp vs2, vs28, vs11 \r
+ .endif\r
+\r
+ \r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ addi \BREG, \BREG, DISP8(\Index,32)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE4x2\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs4,alpha_r\r
+/* v0 corresponds to vs32, do not forget*/\r
+#if !defined(TRMMKERNEL)\r
+ lxssp v0,0(CO) \r
+ lxssp v1,4(CO) \r
+\r
+ lxssp v2,0(T1)\r
+ lxssp v3,4(T1)\r
+\r
+ lxssp v4,0(T2)\r
+ lxssp v5,4(T2)\r
+\r
+ lxssp v6,0(T3)\r
+ lxssp v7,4(T3)\r
+\r
+ \r
+#endif\r
+ xscvspdp vs5, vs2\r
+ xxspltw vs6, vs2, 1 \r
+ xxspltw vs7, vs2, 2 \r
+ xxspltw vs8, vs2, 3 \r
+ xscvspdp vs6,vs6\r
+ xscvspdp vs7,vs7\r
+ xscvspdp vs8,vs8\r
+\r
+ xscvspdp vs24, vs0\r
+ xxspltw vs25, vs0, 1 \r
+ xxspltw vs26, vs0, 2 \r
+ xxspltw vs27, vs0, 3 \r
+ xscvspdp vs25,vs25\r
+ xscvspdp vs26,vs26\r
+ xscvspdp vs27,vs27\r
+ \r
+\r
+#if defined(TRMMKERNEL)\r
+ xsmuldp vs32,vs8, vs4 \r
+ xsmuldp vs33,vs27, vs4 \r
+\r
+ xsmuldp vs34,vs7, vs4 \r
+ xsmuldp vs35,vs26, vs4 \r
+\r
+ xsmuldp vs36,vs6, vs4 \r
+ xsmuldp vs37,vs25, vs4 \r
+\r
+ xsmuldp vs38,vs5, vs4 \r
+ xsmuldp vs39,vs24, vs4 \r
+\r
+ \r
+#else\r
+ xsmaddadp vs32,vs8, vs4 \r
+ xsmaddadp vs33,vs27, vs4 \r
+\r
+ xsmaddadp vs34,vs7, vs4 \r
+ xsmaddadp vs35,vs26, vs4 \r
+\r
+ xsmaddadp vs36,vs6, vs4 \r
+ xsmaddadp vs37,vs25, vs4 \r
+\r
+ xsmaddadp vs38,vs5, vs4 \r
+ xsmaddadp vs39,vs24, vs4 \r
+\r
+ \r
+#endif \r
+\r
+ stxssp v0,0(CO) \r
+ stxssp v1,4(CO) \r
+\r
+ stxssp v2,0(T1)\r
+ stxssp v3,4(T1)\r
+\r
+ stxssp v4,0(T2)\r
+ stxssp v5,4(T2)\r
+\r
+ stxssp v6,0(T3)\r
+ stxssp v7,4(T3)\r
+\r
+ \r
+ \r
+\r
+ addi CO,CO,8\r
+.endm\r
+\r
+\r
+/**********************************************************************************************\r
+* Macros for N=4 and M=1\r
+**********************************************************************************************/\r
+.macro KERNEL4x1_4 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL4x1_I_4 AO,BO, 0, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro Zero4x1\r
+ xxlxor vs0, vs0, vs0 \r
+.endm\r
+\r
+.macro KERNEL4x1\r
+ KERNEL4x1_1 AO,BO, 0 \r
+.endm\r
+\r
+.macro KERNEL4x1_2\r
+ KERNEL4x1_2_1 AO,BO, 0 \r
+.endm\r
+\r
+.macro KERNEL4x1_1 AREG,BREG,First \r
+ lxvwsx vs8, 0, \AREG\r
+ lxv vs26, 0(\BREG) \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ .endif\r
+ addi \AREG, \AREG, 4 \r
+ addi \BREG, \BREG, 16\r
+.endm\r
+\r
+.macro KERNEL4x1_2_1 AREG,BREG,First \r
+ lxsd v4, 0(\AREG)\r
+ lxv vs26, 0(\BREG) \r
+ lxv vs28, 16(\BREG) \r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+ xvmulsp vs0, vs28, vs9 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ xvmaddasp vs0, vs28, vs9 \r
+ .endif\r
+ addi \AREG, \AREG, 8 \r
+ addi \BREG, \BREG, 32\r
+.endm\r
+\r
+.macro KERNEL4x1_I_4 AREG,BREG,First,OffsetA,OffsetB, Index,IsLast \r
+ lxv vs4, DISP4(\Index, 0+\OffsetA)(\AREG)\r
+ xxspltw vs8, vs4, 3 \r
+ xxspltw vs9, vs4, 2 \r
+ xxspltw vs10, vs4, 1 \r
+ xxspltw vs11, vs4, 0\r
+ lxv vs26, DISP16(\Index, 0+\OffsetB)(\BREG) \r
+ lxv vs28, DISP16(\Index,16+\OffsetB)(\BREG) \r
+ lxv vs30, DISP16(\Index,32+\OffsetB)(\BREG) \r
+ lxv vs32, DISP16(\Index,48+\OffsetB)(\BREG) \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+ xvmulsp vs0, vs28, vs9 \r
+ xvmulsp vs0, vs30, vs10 \r
+ xvmulsp vs0, vs32, vs11 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ xvmaddasp vs0, vs28, vs9 \r
+ xvmaddasp vs0, vs30, vs10 \r
+ xvmaddasp vs0, vs32, vs11 \r
+ .endif\r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ addi \BREG, \BREG, DISP16(\Index,64)\r
+.endif \r
+.endm\r
+\r
+.macro SAVE4x1\r
+ slwi T10, LDC , 1 \r
+ add T1, CO, LDC \r
+ add T2, CO, T10 \r
+ add T3, T1, T10 \r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs4,alpha_r\r
+/* v0 corresponds to vs32, do not forget*/\r
+#if !defined(TRMMKERNEL)\r
+ lxssp v0,0(CO) \r
+ lxssp v2,0(T1) \r
+ lxssp v4,0(T2) \r
+ lxssp v6,0(T3) \r
+#endif\r
+ xscvspdp vs24, vs0\r
+ xxspltw vs25, vs0, 1 \r
+ xxspltw vs26, vs0, 2 \r
+ xxspltw vs27, vs0, 3 \r
+ xscvspdp vs25,vs25\r
+ xscvspdp vs26,vs26\r
+ xscvspdp vs27,vs27\r
+\r
+#if defined(TRMMKERNEL)\r
+ xsmuldp vs32,vs27, vs4 \r
+ xsmuldp vs34,vs26, vs4 \r
+ xsmuldp vs36,vs25, vs4 \r
+ xsmuldp vs38,vs24, vs4 \r
+#else\r
+ xsmaddadp vs32,vs27, vs4 \r
+ xsmaddadp vs34,vs26, vs4 \r
+ xsmaddadp vs36,vs25, vs4 \r
+ xsmaddadp vs38,vs24, vs4 \r
+#endif \r
+ stxssp v0,0(CO) \r
+ stxssp v2,0(T1) \r
+ stxssp v4,0(T2) \r
+ stxssp v6,0(T3) \r
+ addi CO,CO,4\r
+.endm\r
+\r
+/****************************N=2 section*****************/\r
+\r
+.macro KERNEL2x16_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL2x16_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+.macro Zero2x16\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2, vs2\r
+ xxlxor vs3, vs3, vs3\r
+ xxlxor vs4, vs4, vs4\r
+ xxlxor vs5, vs5, vs5 \r
+ xxlxor vs6, vs6, vs6\r
+ xxlxor vs7, vs7, vs7 \r
+.endm\r
+ \r
+.macro KERNEL2x16\r
+ KERNEL2x16_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL2x16_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x16_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL2x16_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetA)(\AREG) \r
+ lxv vs28, DISP16(\Index, 32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP16(\Index,48+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs2, vs28, vs8\r
+ xvmulsp vs3, vs29, vs8 \r
+\r
+ xvmulsp vs4, vs26, vs9\r
+ xvmulsp vs5, vs27, vs9 \r
+ xvmulsp vs6, vs28, vs9\r
+ xvmulsp vs7, vs29, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+\r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+ xvmaddasp vs6, vs28, vs9\r
+ xvmaddasp vs7, vs29, vs9\r
+ \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP2(\Index,8)\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL2x16_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs39, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP64(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP64(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs28, DISP64(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP64(\Index,48+\OffsetA)(\AREG) \r
+\r
+ lxv vs16, DISP64(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP64(\Index,64+ 16+\OffsetA)(\AREG)\r
+ lxv vs18, DISP64(\Index,64+ 32+\OffsetA)(\AREG)\r
+ lxv vs19, DISP64(\Index,64+ 48+\OffsetA)(\AREG) \r
+\r
+ lxv vs30, DISP64(\Index,128+ 0+\OffsetA)(\AREG)\r
+ lxv vs31, DISP64(\Index,128+ 16+\OffsetA)(\AREG)\r
+ lxv vs32, DISP64(\Index,128+ 32+\OffsetA)(\AREG)\r
+ lxv vs33, DISP64(\Index,128+ 48+\OffsetA)(\AREG) \r
+ \r
+ lxv vs34, DISP64(\Index,128+ 64+ 0+\OffsetA)(\AREG)\r
+ lxv vs35, DISP64(\Index,128+ 64+ 16+\OffsetA)(\AREG)\r
+ lxv vs36, DISP64(\Index,128+ 64+ 32+\OffsetA)(\AREG)\r
+ lxv vs37, DISP64(\Index,128+ 64+ 48+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ xxspltw vs12, vs39, 3 \r
+ xxspltw vs13, vs39, 2 \r
+ xxspltw vs14, vs39, 1 \r
+ xxspltw vs15, vs39, 0 \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+\r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+ xvmaddasp vs6, vs28, vs9\r
+ xvmaddasp vs7, vs29, vs9 \r
+\r
+ xvmaddasp vs0, vs16, vs10\r
+ xvmaddasp vs1, vs17, vs10 \r
+ xvmaddasp vs2, vs18, vs10\r
+ xvmaddasp vs3, vs19, vs10 \r
+\r
+ xvmaddasp vs4, vs16, vs11\r
+ xvmaddasp vs5, vs17, vs11 \r
+ xvmaddasp vs6, vs18, vs11\r
+ xvmaddasp vs7, vs19, vs11 \r
+\r
+ xvmaddasp vs0, vs30, vs12\r
+ xvmaddasp vs1, vs31, vs12 \r
+ xvmaddasp vs2, vs32, vs12\r
+ xvmaddasp vs3, vs33, vs12 \r
+\r
+ xvmaddasp vs4, vs30, vs13\r
+ xvmaddasp vs5, vs31, vs13 \r
+ xvmaddasp vs6, vs32, vs13\r
+ xvmaddasp vs7, vs33, vs13 \r
+\r
+ xvmaddasp vs0, vs34, vs14\r
+ xvmaddasp vs1, vs35, vs14 \r
+ xvmaddasp vs2, vs36, vs14\r
+ xvmaddasp vs3, vs37, vs14 \r
+\r
+ xvmaddasp vs4, vs34, vs15\r
+ xvmaddasp vs5, vs35, vs15 \r
+ xvmaddasp vs6, vs36, vs15\r
+ xvmaddasp vs7, vs37, vs15 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+ addi \AREG, \AREG, DISP64(\Index,256)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL2x16_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs36, DISP4(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 3 \r
+ xxspltw vs9, vs36, 2 \r
+ xxspltw vs10, vs36, 1 \r
+ xxspltw vs11, vs36, 0 \r
+ lxv vs26, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs28, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP32(\Index,48+\OffsetA)(\AREG) \r
+ lxv vs16, DISP32(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP32(\Index,64+ 16+\OffsetA)(\AREG)\r
+ lxv vs18, DISP32(\Index,64+ 32+\OffsetA)(\AREG)\r
+ lxv vs19, DISP32(\Index,64+ 48+\OffsetA)(\AREG) \r
+ \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+\r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+ xvmaddasp vs6, vs28, vs9\r
+ xvmaddasp vs7, vs29, vs9 \r
+\r
+ xvmaddasp vs0, vs16, vs10\r
+ xvmaddasp vs1, vs17, vs10 \r
+ xvmaddasp vs2, vs18, vs10\r
+ xvmaddasp vs3, vs19, vs10 \r
+\r
+ xvmaddasp vs4, vs16, vs11\r
+ xvmaddasp vs5, vs17, vs11 \r
+ xvmaddasp vs6, vs18, vs11\r
+ xvmaddasp vs7, vs19, vs11 \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE2x16\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO)\r
+ lxv vs17, 16(CO) \r
+ lxv vs18, 32(CO) \r
+ lxv vs19, 48(CO) \r
+#endif\r
+ add T1, CO, LDC \r
+#ifndef TRMMKERNEL \r
+ lxv vs26, 0(T1)\r
+ lxv vs27, 16(T1) \r
+ lxv vs28, 32(T1) \r
+ lxv vs29, 48(T1) \r
+#endif\r
+\r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r\r
+ xvmulsp vs17, vs1, alpha_r \r
+ xvmulsp vs18, vs2, alpha_r\r
+ xvmulsp vs19, vs3, alpha_r \r
+ xvmulsp vs26, vs4, alpha_r\r
+ xvmulsp vs27, vs5, alpha_r \r
+ xvmulsp vs28, vs6, alpha_r\r
+ xvmulsp vs29, vs7, alpha_r\r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r\r
+ xvmaddasp vs17, vs1, alpha_r \r
+ xvmaddasp vs18, vs2, alpha_r\r
+ xvmaddasp vs19, vs3, alpha_r \r
+ xvmaddasp vs26, vs4, alpha_r\r
+ xvmaddasp vs27, vs5, alpha_r \r
+ xvmaddasp vs28, vs6, alpha_r\r
+ xvmaddasp vs29, vs7, alpha_r\r
+#endif\r
+ stxv vs16, 0(CO)\r
+ stxv vs17, 16(CO) \r
+ stxv vs18, 32(CO) \r
+ stxv vs19, 48(CO) \r
+ \r
+ stxv vs26, 0(T1)\r
+ stxv vs27, 16(T1) \r
+ stxv vs28, 32(T1) \r
+ stxv vs29, 48(T1) \r
+ \r
+ addi CO,CO,64\r
+\r
+.endm\r
+\r
+/* M=8 N=2 */\r
+\r
+.macro KERNEL2x8_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL2x8_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+.macro Zero2x8\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ \r
+ xxlxor vs4, vs4, vs4\r
+ xxlxor vs5, vs5, vs5 \r
+ \r
+.endm\r
+ \r
+.macro KERNEL2x8\r
+ KERNEL2x8_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL2x8_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x8_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL2x8_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP8(\Index,16+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+\r
+ xvmulsp vs4, vs26, vs9\r
+ xvmulsp vs5, vs27, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+\r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+ \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP2(\Index,8)\r
+ addi \AREG, \AREG, DISP8(\Index,32) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL2x8_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs39, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetA)(\AREG) \r
+\r
+ lxv vs16, DISP32(\Index,32+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP32(\Index,32+ 16+\OffsetA)(\AREG) \r
+\r
+ lxv vs30, DISP32(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs31, DISP32(\Index,64+ 16+\OffsetA)(\AREG) \r
+ \r
+ lxv vs34, DISP32(\Index, 96+ 0+\OffsetA)(\AREG)\r
+ lxv vs35, DISP32(\Index, 96+ 16+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ xxspltw vs12, vs39, 3 \r
+ xxspltw vs13, vs39, 2 \r
+ xxspltw vs14, vs39, 1 \r
+ xxspltw vs15, vs39, 0 \r
+\r
+ \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+ \r
+\r
+ xvmaddasp vs0, vs16, vs10\r
+ xvmaddasp vs1, vs17, vs10 \r
+ xvmaddasp vs4, vs16, vs11\r
+ xvmaddasp vs5, vs17, vs11 \r
+ \r
+\r
+ xvmaddasp vs0, vs30, vs12\r
+ xvmaddasp vs1, vs31, vs12 \r
+ xvmaddasp vs4, vs30, vs13\r
+ xvmaddasp vs5, vs31, vs13 \r
+\r
+ xvmaddasp vs0, vs34, vs14\r
+ xvmaddasp vs1, vs35, vs14 \r
+ xvmaddasp vs4, vs34, vs15\r
+ xvmaddasp vs5, vs35, vs15 \r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL2x8_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs36, DISP4(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 3 \r
+ xxspltw vs9, vs36, 2 \r
+ xxspltw vs10, vs36, 1 \r
+ xxspltw vs11, vs36, 0 \r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs16, DISP16(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs17, DISP16(\Index,48+\OffsetA)(\AREG) \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+\r
+ xvmaddasp vs4, vs26, vs9\r
+ xvmaddasp vs5, vs27, vs9 \r
+\r
+ xvmaddasp vs0, vs16, vs10\r
+ xvmaddasp vs1, vs17, vs10 \r
+\r
+ xvmaddasp vs4, vs16, vs11\r
+ xvmaddasp vs5, vs17, vs11 \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP16(\Index,64)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE2x8\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO)\r
+ lxv vs17, 16(CO) \r
+#endif\r
+ add T1, CO, LDC \r
+#ifndef TRMMKERNEL \r
+ lxv vs26, 0(T1)\r
+ lxv vs27, 16(T1) \r
+ \r
+#endif\r
+\r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r\r
+ xvmulsp vs17, vs1, alpha_r \r
+ xvmulsp vs26, vs4, alpha_r\r
+ xvmulsp vs27, vs5, alpha_r \r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r\r
+ xvmaddasp vs17, vs1, alpha_r \r
+ xvmaddasp vs26, vs4, alpha_r\r
+ xvmaddasp vs27, vs5, alpha_r \r
+#endif\r
+\r
+ stxv vs16, 0(CO)\r
+ stxv vs17, 16(CO) \r
+ \r
+ \r
+ stxv vs26, 0(T1)\r
+ stxv vs27, 16(T1) \r
+\r
+ addi CO,CO,32\r
+\r
+.endm\r
+\r
+\r
+/*M=4*/\r
+\r
+\r
+.macro KERNEL2x4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL2x4_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ /* we will aggregate on save vs0 +vs4 vs11+vs5 */\r
+.macro Zero2x4\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ \r
+ xxlxor vs4, vs4, vs4\r
+ xxlxor vs5, vs5, vs5 \r
+ \r
+.endm\r
+ \r
+.macro KERNEL2x4\r
+ KERNEL2x4_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL2x4_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x4_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL2x4_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+ xvmulsp vs1, vs26, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ xvmaddasp vs1, vs26, vs9 \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP2(\Index,8)\r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL2x4_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs39, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs16, DISP16(\Index,16+\OffsetA)(\AREG) \r
+\r
+ lxv vs30, DISP16(\Index,32+ 0+\OffsetA)(\AREG)\r
+ lxv vs34, DISP16(\Index,32+ 16+\OffsetA)(\AREG) \r
+ \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ xxspltw vs12, vs39, 3 \r
+ xxspltw vs13, vs39, 2 \r
+ xxspltw vs14, vs39, 1 \r
+ xxspltw vs15, vs39, 0 \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs26, vs9 \r
+ xvmaddasp vs4, vs16, vs10\r
+ xvmaddasp vs5, vs16, vs11 \r
+ \r
+\r
+ xvmaddasp vs0, vs30, vs12\r
+ xvmaddasp vs1, vs30, vs13 \r
+ xvmaddasp vs4, vs34, vs14\r
+ xvmaddasp vs5, vs34, vs15 \r
+ \r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+ addi \AREG, \AREG, DISP16(\Index,64)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL2x4_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs36, DISP4(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 3 \r
+ xxspltw vs9, vs36, 2 \r
+ xxspltw vs10, vs36, 1 \r
+ xxspltw vs11, vs36, 0 \r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs16, DISP8(\Index, 16+\OffsetA)(\AREG) \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs26, vs9 \r
+ xvmaddasp vs4, vs16, vs10\r
+ xvmaddasp vs5, vs16, vs11 \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP8(\Index,32)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE2x4\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO) \r
+#endif\r
+ add T1, CO, LDC \r
+#ifndef TRMMKERNEL \r
+ lxv vs26, 0(T1) \r
+ \r
+#endif\r
+ /*aggregate vectors*/\r
+ xvaddsp vs0,vs0,vs4\r
+ xvaddsp vs1,vs1,vs5 \r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r \r
+ xvmulsp vs26, vs1, alpha_r \r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r \r
+ xvmaddasp vs26, vs1, alpha_r \r
+#endif\r
+\r
+ stxv vs16, 0(CO) \r
+ stxv vs26, 0(T1) \r
+\r
+ addi CO,CO,16\r
+\r
+.endm\r
+\r
+\r
+/* M=2 N=2 we will have inner pemrute action before permute was revrsing 3,2,1,0 not iw 2ill inner reverse 1,0,3,2 */\r
+.macro SWITCH_PERMUTE_INNER\r
+ xxpermdi permute_mask, permute_mask, permute_mask,2\r
+.endm\r
+\r
+.macro Zero2x2\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ SWITCH_PERMUTE_INNER\r
+.endm\r
+ \r
+.macro KERNEL2x2\r
+ KERNEL2x2_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL2x2_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x2_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL2x2_2 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x2_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL2x2_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxperm vs9, vs36, permute_mask \r
+ lxsd v5, DISP2(\Index, 0+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs37, vs36 \r
+ xvmulsp vs1, vs37, vs9 \r
+ \r
+.else \r
+ xvmaddasp vs0, vs37, vs36 \r
+ xvmaddasp vs1, vs37, vs9 \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP2(\Index,8)\r
+ addi \AREG, \AREG, DISP2(\Index,8) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL2x2_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs10, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs16, DISP8(\Index,16+\OffsetA)(\AREG) \r
+\r
+ \r
+ xxperm vs9, vs8, permute_mask \r
+ xxperm vs11, vs10, permute_mask \r
+\r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs26, vs9 \r
+ xvmaddasp vs0, vs16, vs10\r
+ xvmaddasp vs1, vs16, vs11 \r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+ addi \AREG, \AREG, DISP8(\Index,32)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL2x2_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP4(\Index, 0+\OffsetB)(\BREG) \r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\AREG) \r
+\r
+ \r
+ xxperm vs9, vs8, permute_mask \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs26, vs9 \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP4(\Index,16)\r
+.endif \r
+.endm\r
+\r
+\r
+.macro SAVE2x2\r
+\r
+#ifndef TRMMKERNEL \r
+ lxsd v4 , 0(CO) \r
+#endif\r
+ add T1, CO, LDC \r
+#ifndef TRMMKERNEL \r
+ lxsd v5 , 0(T1) \r
+ \r
+#endif\r
+ /*aggregate vectors*/\r
+ xxpermdi vs4,vs0,vs0,2\r
+ xxpermdi vs5,vs1,vs1,2 \r
+ xvaddsp vs0,vs0,vs4\r
+ xvaddsp vs1,vs1,vs5 \r
+ /* */\r
+ /* lets correct the order to 00 10 and 10 ,11 from {00,11} {01,10} */\r
+ xxperm vs1,vs1, permute_mask\r
+\r
+\r
+ xxmrghw vs2 ,vs1,vs0\r
+ xxpermdi vs2,vs2,vs2,2 \r
+ xxmrghw vs3 ,vs0,vs1 \r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs36, vs2, alpha_r \r
+ xvmulsp vs37, vs3, alpha_r \r
+#else\r
+ xvmaddasp vs36, vs2, alpha_r \r
+ xvmaddasp vs37, vs3, alpha_r \r
+#endif\r
+ /**** store last two words*/\r
+\r
+\r
+ stxsd v4, 0(CO) \r
+ stxsd v5, 0(T1) \r
+\r
+ addi CO,CO,8\r
+\r
+.endm\r
+\r
+/*--------------------------- M=1 N=2 */\r
+.macro Zero2x1\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2,vs2,vs2 \r
+ xxlxor vs3,vs3,vs3 \r
+.endm\r
+ \r
+.macro KERNEL2x1\r
+ KERNEL2x1_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL2x1_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x1_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL2x1_2 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL2x1_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ /*\r
+ we will calculate 1 alone then will add it to batched ones\r
+ */\r
+.macro KERNEL2x1_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v3, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ lxssp v4, DISP2(\Index, 4+\OffsetB)(\BREG) \r
+ lxssp v5, DISP1(\Index, 0+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs2, vs37, vs35 \r
+ xvmulsp vs3, vs37, vs36 \r
+ \r
+.else \r
+ xsmaddadp vs2, vs37, vs35\r
+ xsmaddadp vs3, vs37, vs36\r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP2(\Index,8)\r
+ addi \AREG, \AREG, DISP1(\Index,4) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL2x1_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\BREG)\r
+ lxv vs10, DISP8(\Index, 16+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\AREG)\r
+ \r
+ xxmrglw vs5, vs26,vs26\r
+ xxmrghw vs6, vs26,vs26 \r
+ \r
+ xvmaddasp vs0, vs8, vs5\r
+ xvmaddasp vs1, vs10, vs6 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+ addi \AREG, \AREG, DISP4(\Index,16)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL2x1_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxssp v3, DISP4(\Index, 0+\OffsetB)(\BREG)\r
+ lxssp v4, DISP4(\Index, 4+\OffsetB)(\BREG) \r
+ lxssp v7, DISP4(\Index, 8+\OffsetB)(\BREG)\r
+ lxssp v8, DISP4(\Index, 12+\OffsetB)(\BREG) \r
+ lxssp v5, DISP2(\Index, 0+\OffsetA)(\AREG) \r
+ lxssp v6, DISP2(\Index, 4+\OffsetA)(\AREG) \r
+ \r
+ \r
+ xsmaddadp vs2, vs37, vs35\r
+ xsmaddadp vs3, vs37, vs36\r
+\r
+ xsmaddadp vs2, vs38, vs39 \r
+ xsmaddadp vs3, vs38, vs40 \r
+ \r
+ \r
+ addi \BREG, \BREG, DISP4(\Index,16)\r
+ addi \AREG, \AREG, DISP2(\Index,8) \r
+.endm\r
+\r
+\r
+.macro SAVE2x1\r
+\r
+#ifndef TRMMKERNEL \r
+ lxssp v4 , 0(CO) \r
+#endif\r
+ add T1, CO, LDC \r
+#ifndef TRMMKERNEL \r
+ lxssp v5 , 0(T1) \r
+ \r
+#endif\r
+\r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs16,alpha_r\r
+\r
+ /*aggregate vectors 2x2_4 */ \r
+ xxpermdi vs4,vs0,vs0,2\r
+ xxpermdi vs5,vs1,vs1,2 \r
+ xvaddsp vs0,vs0,vs4\r
+ xvaddsp vs1,vs1,vs5 \r
+ xvaddsp vs0,vs0,vs1 \r
+/*aggregate vectors 2x1_2 and 2x1_1 into 2x2_4*/\r
+ xscvspdp vs5, vs0\r
+ xxspltw vs6, vs0, 1 \r
+ xscvspdp vs6,vs6 \r
+ xsadddp vs2,vs2,vs6\r
+ xsadddp vs3,vs3,vs5 \r
+\r
+ /**** store last two words*/\r
+#if defined(TRMMKERNEL) \r
+ xsmuldp vs36,vs2, vs16 \r
+ xsmuldp vs37,vs3, vs16 \r
+ \r
+#else\r
+ xsmaddadp vs36,vs2, vs16 \r
+ xsmaddadp vs37,vs3, vs16 \r
+#endif \r
+\r
+ stxssp v4, 0(CO) \r
+ stxssp v5, 0(T1) \r
+\r
+ addi CO,CO,4\r
+\r
+.endm\r
+\r
+\r
+\r
+/****************************N=1 section*****************/\r
+\r
+.macro KERNEL1x16_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL1x16_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+.macro Zero1x16\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2, vs2\r
+ xxlxor vs3, vs3, vs3 \r
+.endm\r
+ \r
+.macro KERNEL1x16\r
+ KERNEL1x16_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL1x16_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x16_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL1x16_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v4, DISP1(\Index, 0+\OffsetB)(\BREG)\r
+ xscvdpspn vs36,vs36\r
+ xxspltw vs8, vs36, 0\r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetA)(\AREG) \r
+ lxv vs28, DISP16(\Index, 32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP16(\Index,48+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ xvmulsp vs2, vs28, vs8\r
+ xvmulsp vs3, vs29, vs8 \r
+ \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+ \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP1(\Index,4)\r
+ addi \AREG, \AREG, DISP16(\Index,64) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL1x16_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP4(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP64(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP64(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs28, DISP64(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP64(\Index,48+\OffsetA)(\AREG) \r
+\r
+ lxv vs16, DISP64(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP64(\Index,64+ 16+\OffsetA)(\AREG)\r
+ lxv vs18, DISP64(\Index,64+ 32+\OffsetA)(\AREG)\r
+ lxv vs19, DISP64(\Index,64+ 48+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+\r
+ lxv vs30, DISP64(\Index,128+ 0+\OffsetA)(\AREG)\r
+ lxv vs31, DISP64(\Index,128+ 16+\OffsetA)(\AREG)\r
+ lxv vs32, DISP64(\Index,128+ 32+\OffsetA)(\AREG)\r
+ lxv vs33, DISP64(\Index,128+ 48+\OffsetA)(\AREG) \r
+ \r
+ lxv vs34, DISP64(\Index,128+ 64+ 0+\OffsetA)(\AREG)\r
+ lxv vs35, DISP64(\Index,128+ 64+ 16+\OffsetA)(\AREG)\r
+ lxv vs36, DISP64(\Index,128+ 64+ 32+\OffsetA)(\AREG)\r
+ lxv vs37, DISP64(\Index,128+ 64+ 48+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+ \r
+\r
+ xvmaddasp vs0, vs16, vs9\r
+ xvmaddasp vs1, vs17, vs9 \r
+ xvmaddasp vs2, vs18, vs9\r
+ xvmaddasp vs3, vs19, vs9 \r
+ \r
+\r
+ xvmaddasp vs0, vs30, vs10\r
+ xvmaddasp vs1, vs31, vs10 \r
+ xvmaddasp vs2, vs32, vs10\r
+ xvmaddasp vs3, vs33, vs10 \r
+ \r
+\r
+ xvmaddasp vs0, vs34, vs11\r
+ xvmaddasp vs1, vs35, vs11 \r
+ xvmaddasp vs2, vs36, vs11\r
+ xvmaddasp vs3, vs37, vs11 \r
+\r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP64(\Index,256)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x16_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetA)(\AREG)\r
+ lxv vs28, DISP32(\Index,32+\OffsetA)(\AREG)\r
+ lxv vs29, DISP32(\Index,48+\OffsetA)(\AREG) \r
+ lxv vs16, DISP32(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP32(\Index,64+ 16+\OffsetA)(\AREG)\r
+ lxv vs18, DISP32(\Index,64+ 32+\OffsetA)(\AREG)\r
+ lxv vs19, DISP32(\Index,64+ 48+\OffsetA)(\AREG) \r
+ \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ xvmaddasp vs2, vs28, vs8\r
+ xvmaddasp vs3, vs29, vs8 \r
+ \r
+\r
+ xvmaddasp vs0, vs16, vs9\r
+ xvmaddasp vs1, vs17, vs9 \r
+ xvmaddasp vs2, vs18, vs9\r
+ xvmaddasp vs3, vs19, vs9 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP2(\Index,8) \r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE1x16\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO)\r
+ lxv vs17, 16(CO) \r
+ lxv vs18, 32(CO) \r
+ lxv vs19, 48(CO) \r
+#endif\r
+ \r
+\r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r\r
+ xvmulsp vs17, vs1, alpha_r \r
+ xvmulsp vs18, vs2, alpha_r\r
+ xvmulsp vs19, vs3, alpha_r \r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r\r
+ xvmaddasp vs17, vs1, alpha_r \r
+ xvmaddasp vs18, vs2, alpha_r\r
+ xvmaddasp vs19, vs3, alpha_r \r
+#endif\r
+ stxv vs16, 0(CO)\r
+ stxv vs17, 16(CO) \r
+ stxv vs18, 32(CO) \r
+ stxv vs19, 48(CO) \r
+ \r
+ addi CO,CO,64\r
+\r
+.endm\r
+\r
+/* M=8 N=1 */\r
+\r
+.macro KERNEL1x8_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL1x8_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+.macro Zero1x8\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2, vs2\r
+ xxlxor vs3, vs3, vs3 \r
+.endm\r
+ \r
+.macro KERNEL1x8\r
+ KERNEL1x8_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL1x8_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x8_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL1x8_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v4, DISP1(\Index, 0+\OffsetB)(\BREG)\r
+ xscvdpspn vs36,vs36\r
+ xxspltw vs8, vs36, 0\r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP8(\Index,16+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8\r
+ xvmulsp vs1, vs27, vs8 \r
+ \r
+ \r
+.else \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP1(\Index,4)\r
+ addi \AREG, \AREG, DISP8(\Index,32) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL1x8_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP4(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP32(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP32(\Index,16+\OffsetA)(\AREG) \r
+\r
+ lxv vs16, DISP32(\Index,32+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP32(\Index,32+ 16+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+\r
+ lxv vs30, DISP32(\Index,64+ 0+\OffsetA)(\AREG)\r
+ lxv vs31, DISP32(\Index,64+ 16+\OffsetA)(\AREG) \r
+ \r
+ lxv vs34, DISP32(\Index,64+ 32+ 0+\OffsetA)(\AREG)\r
+ lxv vs35, DISP32(\Index,64+ 32+ 16+\OffsetA)(\AREG) \r
+\r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ \r
+\r
+ xvmaddasp vs2, vs16, vs9\r
+ xvmaddasp vs3, vs17, vs9 \r
+ \r
+\r
+ xvmaddasp vs0, vs30, vs10\r
+ xvmaddasp vs1, vs31, vs10 \r
+ \r
+\r
+ xvmaddasp vs2, vs34, vs11\r
+ xvmaddasp vs3, vs35, vs11 \r
+\r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP32(\Index,128)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x8_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetA)(\AREG) \r
+ lxv vs16, DISP16(\Index,32+ 0+\OffsetA)(\AREG)\r
+ lxv vs17, DISP16(\Index,32+ 16+\OffsetA)(\AREG) \r
+ \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs8 \r
+ \r
+\r
+ xvmaddasp vs2, vs16, vs9\r
+ xvmaddasp vs3, vs17, vs9 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP2(\Index,8) \r
+ addi \AREG, \AREG, DISP16(\Index,64)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE1x8\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO)\r
+ lxv vs17, 16(CO) \r
+#endif\r
+ /* aggregate vs0 vs2 and vs1 vs3*/\r
+ xvaddsp vs0,vs0,vs2\r
+ xvaddsp vs1,vs1,vs3\r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r\r
+ xvmulsp vs17, vs1, alpha_r \r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r\r
+ xvmaddasp vs17, vs1, alpha_r \r
+#endif\r
+ stxv vs16, 0(CO)\r
+ stxv vs17, 16(CO) \r
+ \r
+ addi CO,CO,32\r
+\r
+.endm\r
+/*M=4*/\r
+\r
+.macro KERNEL1x4_2 OffsetA,OffsetB, Index,IsLast\r
+ KERNEL1x4_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+ \r
+.macro Zero1x4\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2, vs2\r
+ xxlxor vs3, vs3, vs3 \r
+.endm\r
+ \r
+.macro KERNEL1x4\r
+ KERNEL1x4_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL1x4_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x4_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ \r
+.macro KERNEL1x4_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v4, DISP1(\Index, 0+\OffsetB)(\BREG)\r
+ xscvdpspn vs36,vs36\r
+ xxspltw vs8, vs36, 0\r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\AREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmulsp vs0, vs26, vs8 \r
+.else \r
+ xvmaddasp vs0, vs26, vs8 \r
+ \r
+ .endif\r
+ \r
+ addi \BREG, \BREG, DISP1(\Index,4)\r
+ addi \AREG, \AREG, DISP4(\Index,16) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL1x4_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs38, DISP4(\Index, 0+\OffsetB)(\BREG) \r
+\r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP16(\Index,16+\OffsetA)(\AREG) \r
+ \r
+\r
+ xxspltw vs8, vs38, 3 \r
+ xxspltw vs9, vs38, 2 \r
+\r
+ lxv vs30, DISP16(\Index,32+ 0+\OffsetA)(\AREG)\r
+ lxv vs31, DISP16(\Index,32+ 16+\OffsetA)(\AREG) \r
+ \r
+\r
+ xxspltw vs10, vs38, 1 \r
+ xxspltw vs11, vs38, 0 \r
+\r
+ \r
+ xvmaddasp vs0, vs26, vs8 \r
+\r
+ xvmaddasp vs1, vs27, vs9 \r
+\r
+ xvmaddasp vs2, vs30, vs10 \r
+ \r
+\r
+ xvmaddasp vs3, vs31, vs11 \r
+\r
+ \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+ addi \AREG, \AREG, DISP16(\Index,64)\r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x4_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\BREG)\r
+ xxspltw vs8, vs36, 1 \r
+ xxspltw vs9, vs36, 0 \r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\AREG)\r
+ lxv vs27, DISP8(\Index,16+\OffsetA)(\AREG) \r
+ \r
+ \r
+ xvmaddasp vs0, vs26, vs8\r
+ xvmaddasp vs1, vs27, vs9\r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \BREG, \BREG, DISP2(\Index,8) \r
+ addi \AREG, \AREG, DISP8(\Index,32)\r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro SAVE1x4\r
+\r
+#ifndef TRMMKERNEL \r
+ lxv vs16, 0(CO) \r
+#endif\r
+ /* aggregate */\r
+ xvaddsp vs0,vs0,vs2\r
+ xvaddsp vs1,vs1,vs3\r
+ xvaddsp vs0,vs1,vs0\r
+#if defined(TRMMKERNEL)\r
+ xvmulsp vs16, vs0, alpha_r \r
+#else\r
+ xvmaddasp vs16, vs0, alpha_r \r
+#endif\r
+ stxv vs16, 0(CO) \r
+ \r
+ addi CO,CO,16\r
+\r
+.endm\r
+\r
+/* M=2 N=1*/ \r
+.macro Zero1x2\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2,vs2,vs2 \r
+ xxlxor vs3,vs3,vs3 \r
+.endm\r
+ \r
+.macro KERNEL1x2\r
+ KERNEL1x2_1 AO,BO, 0, 0,0,0\r
+.endm\r
+.macro KERNEL1x2_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x2_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL1x2_2 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x2_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ /*\r
+ we will calculate 1 alone then will add it to batched ones\r
+ */\r
+.macro KERNEL1x2_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v3, DISP2(\Index, 0+\OffsetB)(\AREG)\r
+ lxssp v4, DISP2(\Index, 4+\OffsetB)(\AREG) \r
+ lxssp v5, DISP1(\Index, 0+\OffsetA)(\BREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmuldp vs2, vs37, vs35 \r
+ xvmuldp vs3, vs37, vs36 \r
+ \r
+.else \r
+ xsmaddadp vs2, vs37, vs35\r
+ xsmaddadp vs3, vs37, vs36\r
+ .endif\r
+ \r
+ addi \AREG, \AREG, DISP2(\Index,8) \r
+ addi \BREG, \BREG, DISP1(\Index,4) \r
+ \r
+.endm\r
+\r
+\r
+\r
+\r
+.macro KERNEL1x2_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\AREG)\r
+ lxv vs10, DISP8(\Index, 16+\OffsetB)(\AREG) \r
+\r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\BREG)\r
+ \r
+ xxmrglw vs5, vs26,vs26\r
+ xxmrghw vs6, vs26,vs26 \r
+ \r
+ xvmaddasp vs0, vs8, vs5\r
+ xvmaddasp vs1, vs10, vs6 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP8(\Index,32)\r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x2_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxssp v3, DISP4(\Index, 0+\OffsetB)(\AREG)\r
+ lxssp v4, DISP4(\Index, 4+\OffsetB)(\AREG) \r
+ lxssp v7, DISP4(\Index, 8+\OffsetB)(\AREG)\r
+ lxssp v8, DISP4(\Index, 12+\OffsetB)(\AREG) \r
+ lxssp v5, DISP2(\Index, 0+\OffsetA)(\BREG) \r
+ lxssp v6, DISP2(\Index, 4+\OffsetA)(\BREG) \r
+ \r
+ \r
+ xsmaddadp vs2, vs37, vs35\r
+ xsmaddadp vs3, vs37, vs36\r
+\r
+ xsmaddadp vs2, vs38, vs39 \r
+ xsmaddadp vs3, vs38, vs40 \r
+ \r
+ \r
+ addi \AREG, \AREG, DISP4(\Index,16)\r
+ addi \BREG, \BREG, DISP2(\Index,8) \r
+.endm\r
+\r
+\r
+.macro SAVE1x2\r
+\r
+#ifndef TRMMKERNEL \r
+ lxssp v4 , 0(CO) \r
+ lxssp v5 , 4(CO) \r
+ \r
+#endif\r
+\r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs16,alpha_r\r
+\r
+ /*aggregate vectors 1x2_4 */ \r
+ xxpermdi vs4,vs0,vs0,2\r
+ xxpermdi vs5,vs1,vs1,2 \r
+ xvaddsp vs0,vs0,vs4\r
+ xvaddsp vs1,vs1,vs5 \r
+ xvaddsp vs0,vs0,vs1 \r
+/*aggregate vectors 1x1_2 and 1x1_1 into 1x2_4*/\r
+ xscvspdp vs5, vs0\r
+ xxspltw vs6, vs0, 1 \r
+ xscvspdp vs6,vs6 \r
+ xsadddp vs2,vs2,vs6\r
+ xsadddp vs3,vs3,vs5 \r
+\r
+ /**** store last two words*/\r
+#if defined(TRMMKERNEL) \r
+ xsmuldp vs36,vs2, vs16 \r
+ xsmuldp vs37,vs3, vs16 \r
+ \r
+#else\r
+ xsmaddadp vs36,vs2, vs16 \r
+ xsmaddadp vs37,vs3, vs16 \r
+#endif \r
+\r
+ stxssp v4, 0(CO) \r
+ stxssp v5, 4(CO) \r
+\r
+ addi CO,CO,8\r
+\r
+.endm\r
+/*///////////////// N=1 M=1 //////////////////*/\r
+.macro Zero1x1\r
+ xxlxor vs0, vs0, vs0\r
+ xxlxor vs1, vs1, vs1 \r
+ xxlxor vs2, vs2,vs2 \r
+ xxlxor vs3,vs3,vs3 \r
+ xxlxor vs4,vs4,vs4 \r
+.endm\r
+ \r
+.macro KERNEL1x1\r
+ KERNEL1x1_1 AO,BO, 1, 0,0,0\r
+.endm\r
+\r
+.macro KERNEL1x1_16 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x1_I_16 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL1x1_8 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x1_I_8 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL1x1_4 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x1_I_4 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+\r
+.macro KERNEL1x1_2 OffsetA,OffsetB, Index,IsLast \r
+ KERNEL1x1_I_2 AO,BO, \OffsetA,\OffsetB,\Index,\IsLast\r
+.endm\r
+ /*\r
+ we will calculate 1 alone ( FIRST==1 to zero vs4) \r
+ */\r
+.macro KERNEL1x1_1 AREG,BREG,First,OffsetA,OffsetB,Index\r
+\r
+\r
+ lxssp v3, DISP1(\Index, 0+\OffsetB)(\AREG) \r
+ lxssp v5, DISP1(\Index, 0+\OffsetA)(\BREG) \r
+ \r
+ \r
+.if \First==1\r
+ xvmuldp vs4, vs37, vs35 \r
+ \r
+.else \r
+ xsmaddadp vs4, vs37, vs35 \r
+ .endif\r
+ \r
+ addi \AREG, \AREG, DISP1(\Index,4) \r
+ addi \BREG, \BREG, DISP1(\Index,4) \r
+ \r
+.endm\r
+\r
+\r
+.macro KERNEL1x1_I_16 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP16(\Index, 0+\OffsetB)(\AREG) \r
+ lxv vs9, DISP16(\Index, 16+\OffsetB)(\AREG) \r
+ lxv vs10, DISP16(\Index, 32+0+\OffsetB)(\AREG) \r
+ lxv vs11, DISP16(\Index, 32+ 16+\OffsetB)(\AREG) \r
+ lxv vs26, DISP16(\Index, 0+\OffsetA)(\BREG) \r
+ lxv vs16, DISP16(\Index, 16+\OffsetA)(\BREG) \r
+ lxv vs17, DISP16(\Index, 32+0+\OffsetA)(\BREG) \r
+ lxv vs18, DISP16(\Index, 32+16+\OffsetA)(\BREG) \r
+ xvmaddasp vs0, vs8, vs26 \r
+ xvmaddasp vs1, vs9, vs16 \r
+ xvmaddasp vs2, vs10, vs17 \r
+ xvmaddasp vs3, vs11, vs18\r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP16(\Index,64)\r
+ addi \BREG, \BREG, DISP16(\Index,64) \r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x1_I_8 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP8(\Index, 0+\OffsetB)(\AREG) \r
+ lxv vs9, DISP8(\Index, 16+\OffsetB)(\AREG) \r
+ lxv vs26, DISP8(\Index, 0+\OffsetA)(\BREG) \r
+ lxv vs16, DISP8(\Index, 16+\OffsetA)(\BREG) \r
+ xvmaddasp vs0, vs8, vs26 \r
+ xvmaddasp vs1, vs9, vs16 \r
+ \r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP8(\Index,32)\r
+ addi \BREG, \BREG, DISP8(\Index,32) \r
+.endif \r
+ \r
+.endm\r
+\r
+\r
+.macro KERNEL1x1_I_4 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxv vs8, DISP4(\Index, 0+\OffsetB)(\AREG) \r
+ lxv vs26, DISP4(\Index, 0+\OffsetA)(\BREG) \r
+ \r
+ xvmaddasp vs0, vs8, vs26 \r
+ \r
+ \r
+.if \IsLast==1 \r
+ addi \AREG, \AREG, DISP4(\Index,16)\r
+ addi \BREG, \BREG, DISP4(\Index,16) \r
+.endif \r
+ \r
+.endm\r
+\r
+.macro KERNEL1x1_I_2 AREG,BREG, OffsetA,OffsetB, Index,IsLast \r
+\r
+ lxsd v4, DISP2(\Index, 0+\OffsetB)(\AREG) \r
+ lxsd v5, DISP2(\Index, 0+\OffsetA)(\BREG) \r
+ \r
+ xvmaddasp vs0, vs36, vs37 \r
+ \r
+ addi \AREG, \AREG, DISP2(\Index,8)\r
+ addi \BREG, \BREG, DISP2(\Index,8) \r
+.endm\r
+\r
+\r
+.macro SAVE1x1\r
+\r
+#ifndef TRMMKERNEL \r
+ lxssp v4 , 0(CO) \r
+ \r
+#endif\r
+\r
+ /*convert alpha_r for multiply*/\r
+ xscvspdp vs16,alpha_r\r
+\r
+ /*aggregate vectors */ \r
+ xvaddsp vs0,vs0,vs1\r
+ xvaddsp vs2,vs2,vs3\r
+ xvaddsp vs0,vs0,vs2\r
+\r
+ xxpermdi vs7,vs0,vs0,2 \r
+ xvaddsp vs0,vs0,vs7 \r
+/*aggregate vectors 1x1_2 and 1x1_1 into 1x1_4*/\r
+ xscvspdp vs5, vs0\r
+ xxspltw vs6, vs0, 1 \r
+ xscvspdp vs6,vs6 \r
+ xsadddp vs7,vs5,vs6\r
+ xsadddp vs4,vs4,vs7 \r
+\r
+ /**** store last two words*/\r
+#if defined(TRMMKERNEL) \r
+ xsmuldp vs36,vs4, vs16 \r
+ \r
+#else\r
+ xsmaddadp vs36,vs4, vs16 \r
+#endif \r
+\r
+ stxssp v4, 0(CO) \r
+\r
+ addi CO,CO,4\r
+\r
+.endm\r
+\r
+\r
+\r
+\r
+/****************************TRMM POINTER REFRESH MACROSES*************************/\r
+\r
+.macro SHIFT_REG REG1,REG2,SHIFT_VAL\r
+ .if \SHIFT_VAL==16 \r
+ slwi \REG1, \REG2, 6 \r
+ .elseif \SHIFT_VAL==8 \r
+ slwi \REG1, \REG2, 5 \r
+ .elseif \SHIFT_VAL==4\r
+ slwi \REG1, \REG2, 4 \r
+ .elseif \SHIFT_VAL==2\r
+ slwi \REG1, \REG2, 3 \r
+ .elseif \SHIFT_VAL==1\r
+ slwi \REG1, \REG2, 2 \r
+ .endif\r
+.endm\r
+\r
+/*\r
+//#if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))\r
+// ptrbb = bb;\r
+// #else\r
+// ptrba += off*16;\r
+// ptrbb = bb + off*2;\r
+// #endif\r
+*/\r
+.macro REFRESH_POINTERS PTR_A,PTR_B,OFF_VAL,B_VAL,C_A,C_B\r
+ #if (defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))\r
+ /* ptrbb = bb;*/\r
+ mr \PTR_B,\B_VAL /* refresh BPOINT */\r
+\r
+ #else\r
+ /*\r
+ // ptrba =ptrba+ off*C_A;\r
+ // ptrbb = bb + off*C_B; \r
+ */\r
+ SHIFT_REG T4,\OFF_VAL,\C_B /* Number of values in B shifted */\r
+ SHIFT_REG T2,\OFF_VAL,\C_A /* Number of values in A shifted */\r
+ add \PTR_B, \B_VAL , T4 /* Add values to BO */\r
+ add \PTR_A, \PTR_A, T2 /* Add values to AO */\r
+ #endif \r
+.endm\r
+\r
+\r
+/*\r
+// #if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))\r
+// temp = bk-off;\r
+// #elif defined(LEFT)\r
+// temp = off+16; // number of values in A\r
+// #else\r
+// temp = off+2; // number of values in B\r
+// #endif\r
+*/\r
+.macro REFRESH_TEMP_BK TEMP_BK,BK_VAL,OFF_VAL,INCR_A,INCR_B\r
+ #if (defined(LEFT) && !defined(TRANSA)) || (!defined(LEFT) && defined(TRANSA))\r
+ /* temp = bk-off;*/\r
+ sub \TEMP_BK,\BK_VAL,\OFF_VAL\r
+\r
+ #elif defined(LEFT)\r
+ /* temp = off+INCR_A; // number of values in A */\r
+ addi \TEMP_BK, \OFF_VAL, \INCR_A\r
+ #else\r
+ /* temp = off+INCR_B // number of values in B*/\r
+ addi \TEMP_BK,\OFF_VAL, \INCR_B\r
+ #endif\r
+\r
+.endm\r
+/*\r
+// #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))\r
+// temp = bk - off;\r
+// #ifdef LEFT\r
+// temp -= 16; // number of values in A\r
+// #else\r
+// temp -= 2; // number of values in B\r
+// #endif\r
+// ptrba += temp*16;\r
+// ptrbb += temp*2;\r
+// #endif\r
+\r
+// #ifdef LEFT\r
+// off += 16; // number of values in A\r
+// #endif\r
+*/\r
+ \r
+\r
+.macro REFRESH_AFTER_SAVE TEMP_BK,BK_VAL,OFF_VAL,PTR_B,PTR_A,C_A,C_B\r
+\r
+ #if ( defined(LEFT) && defined(TRANSA)) || (!defined(LEFT) && !defined(TRANSA))\r
+ /*temp = bk - off;*/\r
+ sub \TEMP_BK,\BK_VAL,\OFF_VAL\r
+ #ifdef LEFT\r
+ /*temp -= 8; // number of values in A*/\r
+ addi \TEMP_BK,\TEMP_BK,-\C_A\r
+ #else\r
+ /*temp -= 4; // number of values in B*/\r
+ addi \TEMP_BK,\TEMP_BK,-\C_B \r
+ #endif\r
+ /*ptrba += temp*C_A;\r
+ ptrbb += temp*C_B;*/ \r
+ SHIFT_REG T4,\TEMP_BK,\C_A\r
+ SHIFT_REG T2,\TEMP_BK,\C_B\r
+ add \PTR_A, \PTR_A,T4/*ptrba+temp*C_A*/ \r
+ add \PTR_B, \PTR_B,T2 \r
+\r
+ #endif\r
+\r
+ #ifdef LEFT\r
+ /*off += 8; // number of values in A*/\r
+ addi \OFF_VAL,\OFF_VAL,\C_A\r
+ #endif\r
+.endm
\ No newline at end of file