diff --git a/kernel/x86_64/cgemm_kernel_4x8_sandy.S b/kernel/x86_64/cgemm_kernel_4x8_sandy.S index 5987b8e61..5a5588089 100644 --- a/kernel/x86_64/cgemm_kernel_4x8_sandy.S +++ b/kernel/x86_64/cgemm_kernel_4x8_sandy.S @@ -150,79 +150,54 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MOVQ movq #define XOR_SY vxorps -#define XOR_DY vxorpd -#define XOR_SX xorps -#define XOR_DX xorpd +#define XOR_SX vxorps #define LD_SY vmovaps -#define LD_DY vmovapd -#define LD_SX movaps -#define LD_DX movapd -#define LDL_SX movlps +#define LD_SX vmovaps +#define LDL_SX vmovlps #define LDL_SY vmovlps -#define LDH_SX movhps +#define LDH_SX vmovhps #define LDH_SY vmovhps #define ST_SY vmovaps -#define ST_DY vmovapd -#define ST_SX movaps -#define ST_DX movapd -#define STL_SX movlps +#define ST_SX vmovaps +#define STL_SX vmovlps #define STL_SY vmovlps -#define STH_SX movhps +#define STH_SX vmovhps #define STH_SY vmovhps #define EDUP_SY vmovsldup #define ODUP_SY vmovshdup -#define EDUP_SX movsldup -#define ODUP_SX movshdup -#define EDUP_DY vmovddup +#define EDUP_SX vmovsldup +#define ODUP_SX vmovshdup #define ADD_SY vaddps -#define ADD_DY vaddpd -#define ADD_SX addps -#define ADD_DX addpd -#define SUB_DY vsubpd +#define ADD_SX vaddps #define SUB_SY vsubps -#define SUB_DX subpd -#define SUB_SX subps +#define SUB_SX vsubps -#define ADDSUB_DY vaddsubpd -#define ADDSUB_DX addsubpd #define ADDSUB_SY vaddsubps -#define ADDSUB_SX addsubps +#define ADDSUB_SX vaddsubps #define MUL_SY vmulps -#define MUL_DY vmulpd -#define MUL_SX mulps -#define MUL_DX mulpd +#define MUL_SX vmulps #define SHUF_SY vperm2f128 -#define SHUF_DY vperm2f128 -#define SHUF_DX pshufd -#define SHUF_SX pshufd +#define SHUF_SX vpshufd #define VPERMILP_SY vpermilps #define VPERMILP_SX vpermilps -#define VPERMILP_DY vpermilpd #define BROAD_SY vbroadcastss -#define BROAD_DY vbroadcastsd #define BROAD_SX vbroadcastss -#define BROAD_DX movddup #define MOV_SY vmovaps -#define MOV_DY vmovapd -#define MOV_SX movaps -#define MOV_DX movapd +#define MOV_SX vmovaps #define REVS_SY vshufps -#define REVS_DY vshufpd -#define REVS_SX shufps -#define REVS_DX movsd +#define REVS_SX vshufps #define EXTRA_SY vextractf128 -#define EXTRA_DY vextractf128 #if defined(NN) || defined(NT) || defined(TN) || defined(TT) #define ADD1_SY ADD_SY @@ -289,6 +264,8 @@ movq old_offset, %r11; #endif #endif +vzeroupper + vmovlps %xmm0, MEMALPHA_R vmovlps %xmm1, MEMALPHA_I movq old_bm, bm @@ -1417,64 +1394,64 @@ REVS_SY $0xe4,yvec7,yvec9,yvec9; #### Writing back #### EXTRA_SY $1, yvec15, xvec7; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec6; -LDH_SX 2*SIZE(C0), xvec6; -ADD_SX xvec6, xvec15; +LDL_SX 0*SIZE(C0), xvec6, xvec6; +LDH_SX 2*SIZE(C0), xvec6, xvec6; +ADD_SX xvec6, xvec15, xvec15; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); #ifndef TRMMKERNEL -LDL_SX 4*SIZE(C1), xvec4; -LDH_SX 6*SIZE(C1), xvec4; -ADD_SX xvec4, xvec7; +LDL_SX 4*SIZE(C1), xvec4, xvec4; +LDH_SX 6*SIZE(C1), xvec4, xvec4; +ADD_SX xvec4, xvec7, xvec7; #endif STL_SX xvec7, 4*SIZE(C1); STH_SX xvec7, 6*SIZE(C1); EXTRA_SY $1, yvec13, xvec5; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0, ldc, 1), xvec4; -LDH_SX 2*SIZE(C0, ldc, 1), xvec4; -ADD_SX xvec4, xvec13; +LDL_SX 0*SIZE(C0, ldc, 1), xvec4, xvec4; +LDH_SX 2*SIZE(C0, ldc, 1), xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; #endif STL_SX xvec13, 0*SIZE(C0, ldc, 1); STH_SX xvec13, 2*SIZE(C0, ldc, 1); #ifndef TRMMKERNEL -LDL_SX 4*SIZE(C1, ldc, 1), xvec2; -LDH_SX 6*SIZE(C1, ldc, 1), xvec2; -ADD_SX xvec2, xvec5; +LDL_SX 4*SIZE(C1, ldc, 1), xvec2, xvec2; +LDH_SX 6*SIZE(C1, ldc, 1), xvec2, xvec2; +ADD_SX xvec2, xvec5, xvec5; #endif STL_SX xvec5, 4*SIZE(C1, ldc, 1); STH_SX xvec5, 6*SIZE(C1, ldc, 1); EXTRA_SY $1, yvec11, xvec3; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C1), xvec2; -LDH_SX 2*SIZE(C1), xvec2; -ADD_SX xvec2, xvec11; +LDL_SX 0*SIZE(C1), xvec2, xvec2; +LDH_SX 2*SIZE(C1), xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; #endif STL_SX xvec11, 0*SIZE(C1); STH_SX xvec11, 2*SIZE(C1); #ifndef TRMMKERNEL -LDL_SX 4*SIZE(C0), xvec0; -LDH_SX 6*SIZE(C0), xvec0; -ADD_SX xvec0, xvec3; +LDL_SX 4*SIZE(C0), xvec0, xvec0; +LDH_SX 6*SIZE(C0), xvec0, xvec0; +ADD_SX xvec0, xvec3, xvec3; #endif STL_SX xvec3, 4*SIZE(C0); STH_SX xvec3, 6*SIZE(C0); EXTRA_SY $1, yvec9, xvec1; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C1, ldc, 1), xvec0; -LDH_SX 2*SIZE(C1, ldc, 1), xvec0; -ADD_SX xvec0, xvec9; +LDL_SX 0*SIZE(C1, ldc, 1), xvec0, xvec0; +LDH_SX 2*SIZE(C1, ldc, 1), xvec0, xvec0; +ADD_SX xvec0, xvec9, xvec9; #endif STL_SX xvec9, 0*SIZE(C1, ldc, 1); STH_SX xvec9, 2*SIZE(C1, ldc, 1); #ifndef TRMMKERNEL -LDL_SX 4*SIZE(C0, ldc, 1), xvec6; -LDH_SX 6*SIZE(C0, ldc, 1), xvec6; -ADD_SX xvec6, xvec1; +LDL_SX 4*SIZE(C0, ldc, 1), xvec6, xvec6; +LDH_SX 6*SIZE(C0, ldc, 1), xvec6, xvec6; +ADD_SX xvec6, xvec1, xvec1; #endif STL_SX xvec1, 4*SIZE(C0, ldc, 1); STH_SX xvec1, 6*SIZE(C0, ldc, 1); @@ -1533,122 +1510,122 @@ ALIGN_5 LD_SX 0*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 0*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 8*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 8*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; LD_SX 8*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 16*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 20*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 16*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 20*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; LD_SX 12*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 24*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 28*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 24*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 28*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; ADDQ $16*SIZE, ptrba; ADDQ $32*SIZE, ptrbb; DECQ k; @@ -1666,62 +1643,62 @@ ALIGN_5 LD_SX 0*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 0*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 8*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 8*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; ADDQ $8*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -1737,32 +1714,32 @@ ALIGN_5 LD_SX 0*SIZE(ptrba), xvec0; # ar1, ai1, ar2, ai2 EDUP_SX 0*SIZE(ptrbb), xvec2; # br1, br1, br2, br2 SHUF_SX $0x4e, xvec2, xvec3; # br3, br3, br4, br4 -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD1_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD1_SX xvec5, xvec12, xvec12; SHUF_SX $0xb1, xvec0, xvec1; ODUP_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x4e, xvec2, xvec3; -MUL_SX xvec1, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec14, xvec14; ODUP_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec12, xvec12; ADDQ $4*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -1770,29 +1747,29 @@ ADDQ $8*SIZE, ptrbb; #### Handle #### #if defined(RN) || defined(RT) || defined(CN) || defined(CT) XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec13, xvec7; +ADDSUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec12, xvec7; +ADDSUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec14, xvec7; +SUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec13, xvec7; +SUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec12, xvec7; +SUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; @@ -1800,16 +1777,16 @@ SHUF_SX $0xb1, xvec14, xvec14; SHUF_SX $0xb1, xvec13, xvec13; SHUF_SX $0xb1, xvec12, xvec12; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec13, xvec7; +ADDSUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec12, xvec7; +ADDSUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec14, xvec14; @@ -1821,35 +1798,35 @@ BROAD_SX MEMALPHA_R,xvec7; BROAD_SX MEMALPHA_I,xvec6; ##### Multiply Alpha #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; VPERMILP_SX $0xb1,xvec14, xvec4; -MUL_SX xvec7, xvec14; -MUL_SX xvec6, xvec4; -ADDSUB_SX xvec4, xvec14; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec6, xvec4, xvec4; +ADDSUB_SX xvec4, xvec14, xvec14; VPERMILP_SX $0xb1,xvec13, xvec3; -MUL_SX xvec7, xvec13; -MUL_SX xvec6, xvec3; -ADDSUB_SX xvec3, xvec13; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec6, xvec3, xvec3; +ADDSUB_SX xvec3, xvec13, xvec13; VPERMILP_SX $0xb1,xvec12, xvec2; -MUL_SX xvec7, xvec12; -MUL_SX xvec6, xvec2; -ADDSUB_SX xvec2, xvec12; +MUL_SX xvec7, xvec12, xvec12; +MUL_SX xvec6, xvec2, xvec2; +ADDSUB_SX xvec2, xvec12, xvec12; #### Writing back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C0, ldc, 1), xvec0; -LDL_SX 0*SIZE(C0, ldc, 1), xvec1; -LDH_SX 2*SIZE(C0), xvec1; -LDL_SX 0*SIZE(C1), xvec2; -LDH_SX 2*SIZE(C1, ldc, 1), xvec2; -LDL_SX 0*SIZE(C1, ldc, 1), xvec3; -LDH_SX 2*SIZE(C1), xvec3; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; -ADD_SX xvec2, xvec13; -ADD_SX xvec3, xvec12; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C0, ldc,1), xvec0, xvec0; +LDL_SX 0*SIZE(C0, ldc,1), xvec1, xvec1; +LDH_SX 2*SIZE(C0), xvec1, xvec1; +LDL_SX 0*SIZE(C1), xvec2, xvec2; +LDH_SX 2*SIZE(C1, ldc, 1), xvec2, xvec2; +LDL_SX 0*SIZE(C1, ldc, 1), xvec3, xvec3; +LDH_SX 2*SIZE(C1), xvec3, xvec3; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; +ADD_SX xvec2, xvec13, xvec13; +ADD_SX xvec3, xvec12, xvec12; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0, ldc, 1); @@ -1911,70 +1888,70 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; BROAD_SX 2*SIZE(ptrba), xvec0; LD_SX 8*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 3*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; BROAD_SX 4*SIZE(ptrba), xvec0; LD_SX 16*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 20*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 5*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; BROAD_SX 6*SIZE(ptrba), xvec0; LD_SX 24*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 28*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 7*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; ADDQ $8*SIZE, ptrba; ADDQ $32*SIZE, ptrbb; DECQ k; @@ -1992,36 +1969,36 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; BROAD_SX 2*SIZE(ptrba), xvec0; LD_SX 8*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 12*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 3*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; ADDQ $4*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -2037,19 +2014,19 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec4; SHUF_SX $0xb1, xvec4, xvec5; -MUL_SX xvec0, xvec4; -ADD1_SX xvec4, xvec14; +MUL_SX xvec0, xvec4, xvec4; +ADD1_SX xvec4, xvec14, xvec14; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; -MUL_SX xvec1, xvec5; -ADD2_SX xvec5, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD2_SX xvec5, xvec14, xvec14; ADDQ $2*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2057,26 +2034,26 @@ ADDQ $8*SIZE, ptrbb; #### Handle #### #if defined(NR) || defined(NC) || defined(TR) || defined(TC) XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; #elif defined(RN) || defined(RT) || defined(CN) || defined(CT) XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec14, xvec7; +SUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec14, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec14, xvec14; @@ -2086,21 +2063,21 @@ BROAD_SX MEMALPHA_R,xvec7; BROAD_SX MEMALPHA_I,xvec6; ##### Multiply Alpha #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; VPERMILP_SX $0xb1,xvec14, xvec4; -MUL_SX xvec7, xvec14; -MUL_SX xvec6, xvec4; -ADDSUB_SX xvec4, xvec14; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec6, xvec4, xvec4; +ADDSUB_SX xvec4, xvec14, xvec14; #### Writing back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 0*SIZE(C0, ldc, 1), xvec0; -LDL_SX 0*SIZE(C1), xvec1; -LDH_SX 0*SIZE(C1, ldc, 1), xvec1; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 0*SIZE(C0, ldc, 1), xvec0, xvec0; +LDL_SX 0*SIZE(C1), xvec1, xvec1; +LDH_SX 0*SIZE(C1, ldc, 1), xvec1, xvec1; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 0*SIZE(C0, ldc, 1); @@ -2191,59 +2168,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; EDUP_SX 4*SIZE(ptrbb), xvec4; ODUP_SX 4*SIZE(ptrbb), xvec5; @@ -2252,59 +2229,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 16*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 20*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 24*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 28*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; EDUP_SX 8*SIZE(ptrbb), xvec4; ODUP_SX 8*SIZE(ptrbb), xvec5; @@ -2313,59 +2290,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 32*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 36*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 40*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 44*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; EDUP_SX 12*SIZE(ptrbb), xvec4; ODUP_SX 12*SIZE(ptrbb), xvec5; @@ -2374,59 +2351,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 48*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 52*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 56*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 60*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; ADDQ $64*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; DECQ k; @@ -2448,59 +2425,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; EDUP_SX 4*SIZE(ptrbb), xvec4; ODUP_SX 4*SIZE(ptrbb), xvec5; @@ -2509,59 +2486,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 16*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 20*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 24*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 28*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; ADDQ $32*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2581,59 +2558,59 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec13; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec13, xvec13; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec9; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec9, xvec9; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec13; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec9; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec13, xvec13; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec9, xvec9; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec12; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec12, xvec12; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec8; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec8, xvec8; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec12; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec8; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec12, xvec12; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec8, xvec8; ADDQ $16*SIZE, ptrba; ADDQ $4*SIZE, ptrbb @@ -2641,53 +2618,53 @@ ADDQ $4*SIZE, ptrbb #### Handle #### #if defined(RN) || defined(RT) || defined(CN) || defined(CT) XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec13, xvec7; +ADDSUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec12, xvec7; +ADDSUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec10, xvec7; +ADDSUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec9, xvec7; +ADDSUB_SX xvec9, xvec7, xvec7; MOV_SX xvec7, xvec9; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec8, xvec7; +ADDSUB_SX xvec8, xvec7, xvec7; MOV_SX xvec7, xvec8; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec14, xvec7; +SUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec13, xvec7; +SUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec12, xvec7; +SUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec11, xvec7; +SUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec10, xvec7; +SUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec9, xvec7; +SUB_SX xvec9, xvec7, xvec7; MOV_SX xvec7, xvec9; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec8, xvec7; +SUB_SX xvec8, xvec7, xvec7; MOV_SX xvec7, xvec8; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; @@ -2699,28 +2676,28 @@ SHUF_SX $0xb1, xvec10, xvec10; SHUF_SX $0xb1, xvec9, xvec9; SHUF_SX $0xb1, xvec8, xvec8; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec13, xvec7; +ADDSUB_SX xvec13, xvec7, xvec7; MOV_SX xvec7, xvec13; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec12, xvec7; +ADDSUB_SX xvec12, xvec7, xvec7; MOV_SX xvec7, xvec12; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec10, xvec7; +ADDSUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec9, xvec7; +ADDSUB_SX xvec9, xvec7, xvec7; MOV_SX xvec7, xvec9; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec8, xvec7; +ADDSUB_SX xvec8, xvec7, xvec7; MOV_SX xvec7, xvec8; SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec14, xvec14; @@ -2736,50 +2713,50 @@ BROAD_SX MEMALPHA_R, xvec7; BROAD_SX MEMALPHA_I, xvec6; #### Writng back #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; VPERMILP_SX $0xb1,xvec14, xvec4; -MUL_SX xvec7, xvec14; -MUL_SX xvec6, xvec4; -ADDSUB_SX xvec4, xvec14; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec6, xvec4, xvec4; +ADDSUB_SX xvec4, xvec14, xvec14; VPERMILP_SX $0xb1,xvec13, xvec3; -MUL_SX xvec7, xvec13; -MUL_SX xvec6, xvec3; -ADDSUB_SX xvec3, xvec13; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec6, xvec3, xvec3; +ADDSUB_SX xvec3, xvec13, xvec13; VPERMILP_SX $0xb1,xvec12, xvec2; -MUL_SX xvec7, xvec12; -MUL_SX xvec6, xvec2; -ADDSUB_SX xvec2, xvec12; +MUL_SX xvec7, xvec12, xvec12; +MUL_SX xvec6, xvec2, xvec2; +ADDSUB_SX xvec2, xvec12, xvec12; VPERMILP_SX $0xb1,xvec11, xvec1; -MUL_SX xvec7, xvec11; -MUL_SX xvec6, xvec1; -ADDSUB_SX xvec1, xvec11; +MUL_SX xvec7, xvec11, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADDSUB_SX xvec1, xvec11, xvec11; VPERMILP_SX $0xb1,xvec10, xvec0; -MUL_SX xvec7, xvec10; -MUL_SX xvec6, xvec0; -ADDSUB_SX xvec0, xvec10; +MUL_SX xvec7, xvec10, xvec10; +MUL_SX xvec6, xvec0, xvec0; +ADDSUB_SX xvec0, xvec10, xvec10; VPERMILP_SX $0xb1,xvec9, xvec5; -MUL_SX xvec7, xvec9; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec9; +MUL_SX xvec7, xvec9, xvec9; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec9, xvec9; VPERMILP_SX $0xb1,xvec8, xvec4; -MUL_SX xvec7, xvec8; -MUL_SX xvec6, xvec4; -ADDSUB_SX xvec4, xvec8; +MUL_SX xvec7, xvec8, xvec8; +MUL_SX xvec6, xvec4, xvec4; +ADDSUB_SX xvec4, xvec8, xvec8; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C1), xvec1; -LDL_SX 8*SIZE(C0), xvec2; -LDH_SX 10*SIZE(C1), xvec2; -LDL_SX 12*SIZE(C0), xvec3; -LDH_SX 14*SIZE(C1), xvec3; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; -ADD_SX xvec2, xvec13; -ADD_SX xvec3, xvec12; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C1), xvec1, xvec1; +LDL_SX 8*SIZE(C0), xvec2, xvec2; +LDH_SX 10*SIZE(C1), xvec2, xvec2; +LDL_SX 12*SIZE(C0), xvec3, xvec3; +LDH_SX 14*SIZE(C1), xvec3, xvec3; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; +ADD_SX xvec2, xvec13, xvec13; +ADD_SX xvec3, xvec12, xvec12; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); @@ -2790,18 +2767,18 @@ STH_SX xvec13, 10*SIZE(C1); STL_SX xvec12, 12*SIZE(C0); STH_SX xvec12, 14*SIZE(C1); #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C1), xvec4; -LDH_SX 2*SIZE(C0), xvec4; -LDL_SX 4*SIZE(C1), xvec5; -LDH_SX 6*SIZE(C0), xvec5; -LDL_SX 8*SIZE(C1), xvec6; -LDH_SX 10*SIZE(C0), xvec6; -LDL_SX 12*SIZE(C1), xvec7; -LDH_SX 14*SIZE(C0), xvec7; -ADD_SX xvec4, xvec11; -ADD_SX xvec5, xvec10; -ADD_SX xvec6, xvec9; -ADD_SX xvec7, xvec8; +LDL_SX 0*SIZE(C1), xvec4, xvec4; +LDH_SX 2*SIZE(C0), xvec4, xvec4; +LDL_SX 4*SIZE(C1), xvec5, xvec5; +LDH_SX 6*SIZE(C0), xvec5, xvec5; +LDL_SX 8*SIZE(C1), xvec6, xvec6; +LDH_SX 10*SIZE(C0), xvec6, xvec6; +LDL_SX 12*SIZE(C1), xvec7, xvec7; +LDH_SX 14*SIZE(C0), xvec7, xvec7; +ADD_SX xvec4, xvec11, xvec11; +ADD_SX xvec5, xvec10, xvec10; +ADD_SX xvec6, xvec9, xvec9; +ADD_SX xvec7, xvec8, xvec8; #endif STL_SX xvec11, 0*SIZE(C1); STH_SX xvec11, 2*SIZE(C0); @@ -2872,31 +2849,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; #### Unroll 2 ##### EDUP_SX 4*SIZE(ptrbb), xvec4; @@ -2906,31 +2883,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; #### Unroll 3 #### EDUP_SX 8*SIZE(ptrbb), xvec4; @@ -2940,31 +2917,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 16*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 20*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; #### Unroll 4 #### EDUP_SX 12*SIZE(ptrbb), xvec4; @@ -2974,31 +2951,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 24*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 28*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; ADDQ $32*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; DECQ k; @@ -3020,31 +2997,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; #### Unroll 2 ##### EDUP_SX 4*SIZE(ptrbb), xvec4; @@ -3054,31 +3031,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; ADDQ $16*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -3099,31 +3076,31 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec14; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec14, xvec14; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec10; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec10, xvec10; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec14; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec10; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec14, xvec14; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec10, xvec10; ADDQ $8*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -3131,29 +3108,29 @@ ADDQ $4*SIZE, ptrbb; #### Handle #### #if defined(RN) || defined(RT) || defined(CN) || defined(CT) XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec10, xvec7; +ADDSUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec14, xvec7; +SUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec11, xvec7; +SUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec10, xvec7; +SUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; @@ -3161,16 +3138,16 @@ SHUF_SX $0xb1, xvec14, xvec14; SHUF_SX $0xb1, xvec11, xvec11; SHUF_SX $0xb1, xvec10, xvec10; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec14, xvec7; +ADDSUB_SX xvec14, xvec7, xvec7; MOV_SX xvec7, xvec14; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec10, xvec7; +ADDSUB_SX xvec10, xvec7, xvec7; MOV_SX xvec7, xvec10; SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec14, xvec14; @@ -3182,40 +3159,40 @@ BROAD_SX MEMALPHA_R, xvec7; BROAD_SX MEMALPHA_I, xvec6; #### Writng back #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; VPERMILP_SX $0xb1,xvec14, xvec4; -MUL_SX xvec7, xvec14; -MUL_SX xvec6, xvec4; -ADDSUB_SX xvec4, xvec14; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec6, xvec4, xvec4; +ADDSUB_SX xvec4, xvec14, xvec14; VPERMILP_SX $0xb1,xvec11, xvec1; -MUL_SX xvec7, xvec11; -MUL_SX xvec6, xvec1; -ADDSUB_SX xvec1, xvec11; +MUL_SX xvec7, xvec11, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADDSUB_SX xvec1, xvec11, xvec11; VPERMILP_SX $0xb1,xvec10, xvec0; -MUL_SX xvec7, xvec10; -MUL_SX xvec6, xvec0; -ADDSUB_SX xvec0, xvec10; +MUL_SX xvec7, xvec10, xvec10; +MUL_SX xvec6, xvec0, xvec0; +ADDSUB_SX xvec0, xvec10, xvec10; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C1), xvec1; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C1), xvec1, xvec1; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); STL_SX xvec14, 4*SIZE(C0); STH_SX xvec14, 6*SIZE(C1); #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C1), xvec4; -LDH_SX 2*SIZE(C0), xvec4; -LDL_SX 4*SIZE(C1), xvec5; -LDH_SX 6*SIZE(C0), xvec5; -ADD_SX xvec4, xvec11; -ADD_SX xvec5, xvec10; +LDL_SX 0*SIZE(C1), xvec4, xvec4; +LDH_SX 2*SIZE(C0), xvec4, xvec4; +LDL_SX 4*SIZE(C1), xvec5, xvec5; +LDH_SX 6*SIZE(C0), xvec5, xvec5; +ADD_SX xvec4, xvec11, xvec11; +ADD_SX xvec5, xvec10, xvec10; #endif STL_SX xvec11, 0*SIZE(C1); STH_SX xvec11, 2*SIZE(C0); @@ -3277,17 +3254,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; #### Unroll 2 ##### EDUP_SX 4*SIZE(ptrbb), xvec4; @@ -3297,17 +3274,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; #### Unroll 3 #### EDUP_SX 8*SIZE(ptrbb), xvec4; @@ -3317,17 +3294,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 8*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; #### Unroll 4 #### EDUP_SX 12*SIZE(ptrbb), xvec4; @@ -3337,17 +3314,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 12*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; ADDQ $16*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; DECQ k; @@ -3369,17 +3346,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; #### Unroll 2 ##### EDUP_SX 4*SIZE(ptrbb), xvec4; @@ -3389,17 +3366,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 4*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; ADDQ $8*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -3419,17 +3396,17 @@ SHUF_SX $0x4e, xvec5, xvec7; LD_SX 0*SIZE(ptrba), xvec0; MOV_SX xvec0, xvec1; -MUL_SX xvec4, xvec0; -ADD1_SX xvec0, xvec15; +MUL_SX xvec4, xvec0, xvec0; +ADD1_SX xvec0, xvec15, xvec15; SHUF_SX $0xb1, xvec1, xvec2; -MUL_SX xvec6, xvec1; -ADD1_SX xvec1, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADD1_SX xvec1, xvec11, xvec11; MOV_SX xvec2, xvec3; -MUL_SX xvec5, xvec2; -ADD2_SX xvec2, xvec15; -MUL_SX xvec7, xvec3; -ADD2_SX xvec3, xvec11; +MUL_SX xvec5, xvec2, xvec2; +ADD2_SX xvec2, xvec15, xvec15; +MUL_SX xvec7, xvec3, xvec3; +ADD2_SX xvec3, xvec11, xvec11; ADDQ $4*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -3437,26 +3414,26 @@ ADDQ $4*SIZE, ptrbb; #### Handle #### #if defined(RN) || defined(RT) || defined(CN) || defined(CT) XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -SUB_SX xvec11, xvec7; +SUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec11, xvec11; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; XOR_SY yvec7, yvec7, yvec7; -ADDSUB_SX xvec11, xvec7; +ADDSUB_SX xvec11, xvec7, xvec7; MOV_SX xvec7, xvec11; SHUF_SX $0xb1, xvec15, xvec15; SHUF_SX $0xb1, xvec11, xvec11; @@ -3466,24 +3443,24 @@ BROAD_SX MEMALPHA_R, xvec7; BROAD_SX MEMALPHA_I, xvec6; #### Writng back #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; VPERMILP_SX $0xb1,xvec11, xvec1; -MUL_SX xvec7, xvec11; -MUL_SX xvec6, xvec1; -ADDSUB_SX xvec1, xvec11; +MUL_SX xvec7, xvec11, xvec11; +MUL_SX xvec6, xvec1, xvec1; +ADDSUB_SX xvec1, xvec11, xvec11; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -ADD_SX xvec0, xvec15; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +ADD_SX xvec0, xvec15, xvec15; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C1), xvec4; -LDH_SX 2*SIZE(C0), xvec4; -ADD_SX xvec4, xvec11; +LDL_SX 0*SIZE(C1), xvec4, xvec4; +LDH_SX 2*SIZE(C0), xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; #endif STL_SX xvec11, 0*SIZE(C1); STH_SX xvec11, 2*SIZE(C0); @@ -3538,42 +3515,42 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; BROAD_SX 2*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 3*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; BROAD_SX 4*SIZE(ptrba), xvec0; LD_SX 8*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 5*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; BROAD_SX 6*SIZE(ptrba), xvec0; LD_SX 12*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 7*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; DECQ k; @@ -3591,22 +3568,22 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; BROAD_SX 2*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 3*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -3622,12 +3599,12 @@ ALIGN_5 BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xb1, xvec2, xvec3; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; BROAD_SX 1*SIZE(ptrba), xvec1; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -3635,14 +3612,14 @@ ADDQ $4*SIZE, ptrbb; #### Handle #### XOR_SY yvec7, yvec7, yvec7; #if defined(NR) || defined(NC) || defined(TR) || defined(TC) -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(RN) || defined(RT) || defined(CN) || defined(CT) -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; SHUF_SX $0xb1, xvec15, xvec15; #endif @@ -3651,14 +3628,14 @@ BROAD_SX MEMALPHA_R,xvec7; BROAD_SX MEMALPHA_I,xvec6; ##### Multiply Alpha #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; #### Writing back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 0*SIZE(C1), xvec0; -ADD_SX xvec0, xvec15; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 0*SIZE(C1), xvec0, xvec0; +ADD_SX xvec0, xvec15, xvec15; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 0*SIZE(C1); @@ -3908,18 +3885,18 @@ ADDSUB_SY yvec4, yvec14, yvec14; EXTRA_SY $1, yvec15, xvec7; EXTRA_SY $1, yvec14, xvec6; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C0), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C0), xvec1; -LDL_SX 8*SIZE(C0), xvec2; -LDH_SX 10*SIZE(C0), xvec2; -LDL_SX 12*SIZE(C0), xvec3; -LDH_SX 14*SIZE(C0), xvec3; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec7; -ADD_SX xvec2, xvec14; -ADD_SX xvec3, xvec6; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C0), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C0), xvec1, xvec1; +LDL_SX 8*SIZE(C0), xvec2, xvec2; +LDH_SX 10*SIZE(C0), xvec2, xvec2; +LDL_SX 12*SIZE(C0), xvec3, xvec3; +LDH_SX 14*SIZE(C0), xvec3, xvec3; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec7, xvec7; +ADD_SX xvec2, xvec14, xvec14; +ADD_SX xvec3, xvec6, xvec6; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); @@ -4103,12 +4080,12 @@ ADDSUB_SY yvec5, yvec15, yvec15; #### Writing back #### EXTRA_SY $1, yvec15, xvec7; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C0), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C0), xvec1; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec7; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C0), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C0), xvec1, xvec1; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec7, xvec7; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); @@ -4163,42 +4140,42 @@ ALIGN_5 #### Unroll 1 #### LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 1*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; #### Unroll 2 #### LD_SX 4*SIZE(ptrba), xvec0; BROAD_SX 2*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 3*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; #### Unroll 3 #### LD_SX 8*SIZE(ptrba), xvec0; BROAD_SX 4*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 5*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; #### Unroll 4 #### LD_SX 12*SIZE(ptrba), xvec0; BROAD_SX 6*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 7*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $16*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; DECQ k; @@ -4216,22 +4193,22 @@ ALIGN_5 #### Unroll 1 #### LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 1*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; #### Unroll 2 #### LD_SX 4*SIZE(ptrba), xvec0; BROAD_SX 2*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 3*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -4247,12 +4224,12 @@ ALIGN_5 #### Unroll 1 #### LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD1_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD1_SX xvec2, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; BROAD_SX 1*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec3; -ADD2_SX xvec3, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD2_SX xvec3, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; @@ -4260,14 +4237,14 @@ ADDQ $2*SIZE, ptrbb; #### Handle #### XOR_SY yvec7, yvec7, yvec7; #if defined(RN) || defined(RT) || defined(CN) || defined(CT) -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; SHUF_SX $0xb1, xvec15, xvec15; #endif @@ -4276,13 +4253,13 @@ BROAD_SX MEMALPHA_R, xvec7; BROAD_SX MEMALPHA_I, xvec6; #### Writng back #### VPERMILP_SX $0xb1,xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C0), xvec0; -ADD_SX xvec0, xvec15; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C0), xvec0, xvec0; +ADD_SX xvec0, xvec15, xvec15; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); @@ -4335,22 +4312,22 @@ ALIGN_5 LD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xa0, xvec2, xvec3; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; SHUF_SX $0xf5, xvec2, xvec4; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec15, xvec15; LD_SX 4*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrbb), xvec2; SHUF_SX $0xa0, xvec2, xvec3; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; SHUF_SX $0xf5, xvec2, xvec4; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; DECQ k; @@ -4368,12 +4345,12 @@ ALIGN_5 LD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0xa0, xvec2, xvec3; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec15, xvec15; SHUF_SX $0xb1, xvec0, xvec1; SHUF_SX $0xf5, xvec2, xvec4; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -4388,15 +4365,15 @@ ALIGN_5 .L343_bodyB: XOR_SY yvec0, yvec0, yvec0; XOR_SY yvec2, yvec2, yvec2; -LDL_SX 0*SIZE(ptrba), xvec0; -LDL_SX 0*SIZE(ptrbb), xvec2; +LDL_SX 0*SIZE(ptrba), xvec0, xvec0; +LDL_SX 0*SIZE(ptrbb), xvec2, xvec2; SHUF_SX $0xe0, xvec2, xvec3; -MUL_SX xvec0, xvec3; -ADD1_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD1_SX xvec3, xvec15, xvec15; SHUF_SX $0xe1, xvec0, xvec1; SHUF_SX $0xe5, xvec2, xvec4; -MUL_SX xvec1, xvec4; -ADD2_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD2_SX xvec4, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; @@ -4404,29 +4381,29 @@ ADDQ $2*SIZE, ptrbb; #### Handle #### XOR_SY yvec7, yvec7, yvec7; #if defined(RN) || defined(RT) || defined(CN) || defined(CT) -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) -SUB_SX xvec15, xvec7; +SUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_SX $0xb1, xvec15, xvec15; -ADDSUB_SX xvec15, xvec7; +ADDSUB_SX xvec15, xvec7, xvec7; MOV_SX xvec7, xvec15; SHUF_SX $0xb1, xvec15, xvec15; #endif BROAD_SX MEMALPHA_R, xvec7; BROAD_SX MEMALPHA_I, xvec6; VPERMILP_SX $0xb1, xvec15, xvec5; -MUL_SX xvec7, xvec15; -MUL_SX xvec6, xvec5; -ADDSUB_SX xvec5, xvec15; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec6, xvec5, xvec5; +ADDSUB_SX xvec5, xvec15, xvec15; SHUF_SX $0x44, xvec15, xvec14; SHUF_SX $0xee, xvec15, xvec13; -ADD_SX xvec13, xvec14; +ADD_SX xvec13, xvec14, xvec14; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -ADD_SX xvec0, xvec14; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +ADD_SX xvec0, xvec14, xvec14; #endif STL_SX xvec14, 0*SIZE(C0); #if (defined(TRMMKERNEL) && defined(LEFT) && defined(TRANSA))||(defined(TRMMKERNEL) && !defined(LEFT) && !defined(TRANSA)) @@ -4458,6 +4435,8 @@ movq 24(%rsp), %r13; movq 32(%rsp), %r14; movq 40(%rsp), %r15; +vzeroupper + #ifdef WINDOWS_ABI movq 48(%rsp), %rdi movq 56(%rsp), %rsi diff --git a/kernel/x86_64/dgemm_kernel_4x8_sandy.S b/kernel/x86_64/dgemm_kernel_4x8_sandy.S index 603552464..3b1b2560e 100644 --- a/kernel/x86_64/dgemm_kernel_4x8_sandy.S +++ b/kernel/x86_64/dgemm_kernel_4x8_sandy.S @@ -143,71 +143,49 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #undef MOVQ #define MOVQ movq -#define XOR_SY vxorps #define XOR_DY vxorpd -#define XOR_SX xorps -#define XOR_DX xorpd +#define XOR_DX vxorpd -#define LD_SY vmovaps #define LD_DY vmovapd -#define LD_SX movaps -#define LD_DX movapd -#define LDL_DX movlpd +#define LD_DX vmovapd +#define LDL_DX vmovlpd #define LDL_DY vmovlpd -#define LDH_DX movhpd +#define LDH_DX vmovhpd #define LDH_DY vmovhpd -#define ST_SY vmovaps #define ST_DY vmovapd -#define ST_SX movaps -#define ST_DX movapd -#define STL_DX movlpd +#define ST_DX vmovapd +#define STL_DX vmovlpd #define STL_DY vmovlpd -#define STH_DX movhpd +#define STH_DX vmovhpd #define STH_DY vmovhpd -#define EDUP_SY vmovsldup -#define ODUP_SY vmovshdup #define EDUP_DY vmovddup -#define ADD_SY vaddps #define ADD_DY vaddpd -#define ADD_SX addps -#define ADD_DX addpd +#define ADD_DX vaddpd #define ADD1_DY vaddpd #define ADD2_DY vaddpd #define ADDSUB_DY vaddsubpd -#define ADDSUB_SY vaddsubps -#define MUL_SY vmulps #define MUL_DY vmulpd -#define MUL_SX mulps -#define MUL_DX mulpd +#define MUL_DX vmulpd -#define SHUF_SY vperm2f128 #define SHUF_DY vperm2f128 -#define SHUF_DX pshufd +#define SHUF_DX vpshufd -#define VPERMILP_SY vpermilps #define VPERMILP_DY vpermilpd -#define BROAD_SY vbroadcastss #define BROAD_DY vbroadcastsd -#define BROAD_SX -#define BROAD_DX movddup +#define BROAD_DX vmovddup -#define MOV_SY vmovaps #define MOV_DY vmovapd -#define MOV_SX movaps -#define MOV_DX movapd +#define MOV_DX vmovapd -#define REVS_SY vshufps #define REVS_DY vshufpd -#define REVS_SX shufps -#define REVS_DX movsd +#define REVS_DX vmovsd -#define EXTRA_SY vextractf128 #define EXTRA_DY vextractf128 PROLOGUE @@ -253,6 +231,8 @@ movq old_offset, %r11 #endif #endif +vzeroupper + vmovlps ALPHA, MEMALPHA movq old_bm, bm movq old_bn, bn @@ -988,14 +968,14 @@ EXTRA_DY $1,yvec13,xvec5; EXTRA_DY $1,yvec11,xvec3; EXTRA_DY $1,yvec9,xvec1; #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0),xvec15; -ADD_DX 2*SIZE(C1),xvec7; -ADD_DX 0*SIZE(C0,ldc,1),xvec13; -ADD_DX 2*SIZE(C1,ldc,1),xvec5; -ADD_DX 0*SIZE(C1),xvec11; -ADD_DX 2*SIZE(C0),xvec3; -ADD_DX 0*SIZE(C1,ldc,1),xvec9; -ADD_DX 2*SIZE(C0,ldc,1),xvec1; +ADD_DX 0*SIZE(C0), xvec15, xvec15; +ADD_DX 2*SIZE(C1), xvec7, xvec7; +ADD_DX 0*SIZE(C0, ldc, 1), xvec13, xvec13; +ADD_DX 2*SIZE(C1, ldc, 1), xvec5, xvec5; +ADD_DX 0*SIZE(C1), xvec11, xvec11; +ADD_DX 2*SIZE(C0), xvec3, xvec3; +ADD_DX 0*SIZE(C1, ldc, 1), xvec9, xvec9; +ADD_DX 2*SIZE(C0, ldc, 1), xvec1, xvec1; #endif ST_DX xvec15, 0*SIZE(C0); ST_DX xvec7, 2*SIZE(C1); @@ -1025,18 +1005,18 @@ EXTRA_DY $1,yvec13,xvec5; EXTRA_DY $1,yvec11,xvec3; EXTRA_DY $1,yvec9,xvec1; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec14; -LDH_DX 1*SIZE(C0), xvec14; -LDL_DX 0*SIZE(C0, ldc, 1), xvec12; -LDH_DX 1*SIZE(C0, ldc, 1), xvec12; -LDL_DX 0*SIZE(C1), xvec10; -LDH_DX 1*SIZE(C1), xvec10; -LDL_DX 0*SIZE(C1, ldc, 1), xvec8; -LDH_DX 1*SIZE(C1, ldc, 1), xvec8; -ADD_DX xvec14, xvec15; -ADD_DX xvec12, xvec13; -ADD_DX xvec10, xvec11; -ADD_DX xvec8, xvec9; +LDL_DX 0*SIZE(C0), xvec14, xvec14; +LDH_DX 1*SIZE(C0), xvec14, xvec14; +LDL_DX 0*SIZE(C0, ldc, 1), xvec12, xvec12; +LDH_DX 1*SIZE(C0, ldc, 1), xvec12, xvec12; +LDL_DX 0*SIZE(C1), xvec10, xvec10; +LDH_DX 1*SIZE(C1), xvec10, xvec10; +LDL_DX 0*SIZE(C1, ldc, 1), xvec8, xvec8; +LDH_DX 1*SIZE(C1, ldc, 1), xvec8, xvec8; +ADD_DX xvec14, xvec15, xvec15; +ADD_DX xvec12, xvec13, xvec13; +ADD_DX xvec10, xvec11, xvec11; +ADD_DX xvec8, xvec9, xvec9; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -1047,18 +1027,18 @@ STH_DX xvec11, 1*SIZE(C1); STL_DX xvec9, 0*SIZE(C1, ldc, 1); STH_DX xvec9, 1*SIZE(C1, ldc, 1); #ifndef TRMMKERNEL -LDL_DX 2*SIZE(C0), xvec0; -LDH_DX 3*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0, ldc, 1), xvec2; -LDH_DX 3*SIZE(C0, ldc, 1), xvec2; -LDL_DX 2*SIZE(C1), xvec4; -LDH_DX 3*SIZE(C1), xvec4; -LDL_DX 2*SIZE(C1, ldc, 1), xvec6; -LDH_DX 3*SIZE(C1, ldc, 1), xvec6; -ADD_DX xvec0, xvec3; -ADD_DX xvec2, xvec1; -ADD_DX xvec4, xvec7; -ADD_DX xvec6, xvec5; +LDL_DX 2*SIZE(C0), xvec0, xvec0; +LDH_DX 3*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0, ldc, 1), xvec2, xvec2; +LDH_DX 3*SIZE(C0, ldc, 1), xvec2, xvec2; +LDL_DX 2*SIZE(C1), xvec4, xvec4; +LDH_DX 3*SIZE(C1), xvec4, xvec4; +LDL_DX 2*SIZE(C1, ldc, 1), xvec6, xvec6; +LDH_DX 3*SIZE(C1, ldc, 1), xvec6, xvec6; +ADD_DX xvec0, xvec3, xvec3; +ADD_DX xvec2, xvec1, xvec1; +ADD_DX xvec4, xvec7, xvec7; +ADD_DX xvec6, xvec5, xvec5; #endif STL_DX xvec3, 2*SIZE(C0); STH_DX xvec3, 3*SIZE(C0); @@ -1128,72 +1108,72 @@ ALIGN_5; ##### Unroll time 1 #### LD_DX 4*SIZE(ptrbb), xvec6; SHUF_DX $0x4e, xvec3, xvec5; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; LD_DX 6*SIZE(ptrbb), xvec7; -MUL_DX xvec0, xvec3; -ADD_DX xvec3, xvec11; +MUL_DX xvec0, xvec3, xvec3; +ADD_DX xvec3, xvec11, xvec11; LD_DX 2*SIZE(ptrba), xvec1; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec6, xvec4; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; #### Unroll time 2 #### LD_DX 8*SIZE(ptrbb), xvec2; SHUF_DX $0x4e, xvec7, xvec5; -MUL_DX xvec1, xvec6; -ADD_DX xvec6, xvec15; +MUL_DX xvec1, xvec6, xvec6; +ADD_DX xvec6, xvec15, xvec15; LD_DX 10*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec7; -ADD_DX xvec7, xvec11; +MUL_DX xvec1, xvec7, xvec7; +ADD_DX xvec7, xvec11, xvec11; LD_DX 4*SIZE(ptrba), xvec0; -MUL_DX xvec1, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec1, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec2, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; ##### Unroll time 3 #### LD_DX 12*SIZE(ptrbb), xvec6; SHUF_DX $0x4e, xvec3, xvec5; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; LD_DX 14*SIZE(ptrbb), xvec7; -MUL_DX xvec0, xvec3; -ADD_DX xvec3, xvec11; +MUL_DX xvec0, xvec3, xvec3; +ADD_DX xvec3, xvec11, xvec11; ADDQ $16*SIZE, ptrbb; LD_DX 6*SIZE(ptrba), xvec1; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec6, xvec4; ADDQ $8*SIZE, ptrba; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; #### Unroll time 4 #### LD_DX 0*SIZE(ptrbb), xvec2; SHUF_DX $0x4e, xvec7, xvec5; -MUL_DX xvec1, xvec6; -ADD_DX xvec6, xvec15; +MUL_DX xvec1, xvec6, xvec6; +ADD_DX xvec6, xvec15, xvec15; LD_DX 2*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec7; -ADD_DX xvec7, xvec11; +MUL_DX xvec1, xvec7, xvec7; +ADD_DX xvec7, xvec11, xvec11; LD_DX 0*SIZE(ptrba), xvec0; -MUL_DX xvec1, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec1, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec2, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; DECQ k; JG .L10_bodyB; ALIGN_5 @@ -1210,39 +1190,39 @@ ALIGN_5 ##### Unroll time 1 #### LD_DX 4*SIZE(ptrbb), xvec6; SHUF_DX $0x4e, xvec3, xvec5; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; LD_DX 6*SIZE(ptrbb), xvec7; -MUL_DX xvec0, xvec3; -ADD_DX xvec3, xvec11; +MUL_DX xvec0, xvec3, xvec3; +ADD_DX xvec3, xvec11, xvec11; ADDQ $8*SIZE, ptrbb; LD_DX 2*SIZE(ptrba), xvec1; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec6, xvec4; ADDQ $4*SIZE, ptrba; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; #### Unroll time 2 #### LD_DX 0*SIZE(ptrbb), xvec2; SHUF_DX $0x4e, xvec7, xvec5; -MUL_DX xvec1, xvec6; -ADD_DX xvec6, xvec15; +MUL_DX xvec1, xvec6, xvec6; +ADD_DX xvec6, xvec15, xvec15; LD_DX 2*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec7; -ADD_DX xvec7, xvec11; +MUL_DX xvec1, xvec7, xvec7; +ADD_DX xvec7, xvec11, xvec11; LD_DX 0*SIZE(ptrba), xvec0; -MUL_DX xvec1, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec1, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; SHUF_DX $0x4e, xvec2, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; .L11_loopE:; #ifndef TRMMKERNEL @@ -1255,35 +1235,35 @@ JLE .L12_loopE; ALIGN_5 .L12_bodyB:; SHUF_DX $0x4e, xvec3, xvec5; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; ADDQ $4*SIZE, ptrbb; -MUL_DX xvec0, xvec3; -ADD_DX xvec3, xvec11; +MUL_DX xvec0, xvec3, xvec3; +ADD_DX xvec3, xvec11, xvec11; ADDQ $2*SIZE, ptrba; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec13; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec13, xvec13; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec9; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec9, xvec9; .L12_loopE:; #### Load Alpha #### BROAD_DX MEMALPHA, xvec7; #### Multiply Alpha #### -MUL_DX xvec7, xvec15; -MUL_DX xvec7, xvec13; -MUL_DX xvec7, xvec11; -MUL_DX xvec7, xvec9; +MUL_DX xvec7, xvec15, xvec15; +MUL_DX xvec7, xvec13, xvec13; +MUL_DX xvec7, xvec11, xvec11; +MUL_DX xvec7, xvec9, xvec9; #### Reverse the Results #### MOV_DX xvec15, xvec6; -REVS_DX xvec13, xvec15; -REVS_DX xvec6, xvec13; +REVS_DX xvec13, xvec15, xvec15; +REVS_DX xvec6, xvec13, xvec13; MOV_DX xvec11, xvec6; -REVS_DX xvec9, xvec11; -REVS_DX xvec6, xvec9; +REVS_DX xvec9, xvec11, xvec11; +REVS_DX xvec6, xvec9, xvec9; #### Testing Alignment #### MOVQ C0, %rax; OR ldc, %rax; @@ -1292,10 +1272,10 @@ JNE .L12_loopEx; ALIGN_5 #### Writing Back #### #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec13; -ADD_DX 0*SIZE(C0, ldc, 1), xvec15; -ADD_DX 0*SIZE(C1), xvec9; -ADD_DX 0*SIZE(C1, ldc, 1), xvec11; +ADD_DX 0*SIZE(C0), xvec13, xvec13; +ADD_DX 0*SIZE(C0, ldc, 1), xvec15, xvec15; +ADD_DX 0*SIZE(C1), xvec9, xvec9; +ADD_DX 0*SIZE(C1, ldc, 1), xvec11, xvec11; #endif ST_DX xvec13, 0*SIZE(C0); ST_DX xvec15, 0*SIZE(C0, ldc, 1); @@ -1317,18 +1297,18 @@ JMP .L9_loopE; ALIGN_5 .L12_loopEx: #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec14; -LDH_DX 1*SIZE(C0), xvec14; -LDL_DX 0*SIZE(C0, ldc, 1), xvec12; -LDH_DX 1*SIZE(C0, ldc, 1), xvec12; -LDL_DX 0*SIZE(C1), xvec10; -LDH_DX 1*SIZE(C1), xvec10; -LDL_DX 0*SIZE(C1, ldc, 1), xvec8; -LDH_DX 1*SIZE(C1, ldc, 1), xvec8; -ADD_DX xvec14, xvec13; -ADD_DX xvec12, xvec15; -ADD_DX xvec10, xvec9; -ADD_DX xvec8, xvec11; +LDL_DX 0*SIZE(C0), xvec14, xvec14; +LDH_DX 1*SIZE(C0), xvec14, xvec14; +LDL_DX 0*SIZE(C0, ldc, 1), xvec12, xvec12; +LDH_DX 1*SIZE(C0, ldc, 1), xvec12, xvec12; +LDL_DX 0*SIZE(C1), xvec10, xvec10; +LDH_DX 1*SIZE(C1), xvec10, xvec10; +LDL_DX 0*SIZE(C1, ldc, 1), xvec8, xvec8; +LDH_DX 1*SIZE(C1, ldc, 1), xvec8, xvec8; +ADD_DX xvec14, xvec13, xvec13; +ADD_DX xvec12, xvec15, xvec15; +ADD_DX xvec10, xvec9, xvec9; +ADD_DX xvec8, xvec11, xvec11; #endif STL_DX xvec13, 0*SIZE(C0); STH_DX xvec13, 1*SIZE(C0); @@ -1455,12 +1435,12 @@ MUL_DY yvec15, yvec7, yvec15; #### Writing Back #### EXTRA_DY $1, yvec15, xvec7; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 0*SIZE(C0, ldc, 1), xvec0; -LDL_DX 0*SIZE(C1), xvec1; -LDH_DX 0*SIZE(C1, ldc, 1), xvec1; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 0*SIZE(C0, ldc, 1), xvec0, xvec0; +LDL_DX 0*SIZE(C1), xvec1, xvec1; +LDH_DX 0*SIZE(C1, ldc, 1), xvec1, xvec1; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 0*SIZE(C0, ldc, 1); @@ -1549,151 +1529,151 @@ ALIGN_5; LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 4*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 6*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; #### Unroll time 2 #### LD_DX 8*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 10*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 12*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 14*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; #### Unroll time 3 #### LD_DX 16*SIZE(ptrba), xvec0; LD_DX 4*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 18*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 20*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 22*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; #### Unroll time 4 #### LD_DX 24*SIZE(ptrba), xvec0; LD_DX 6*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $8*SIZE, ptrbb; LD_DX 26*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 28*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 30*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; ADDQ $32*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; DECQ k; JG .L211_bodyB; ALIGN_5 @@ -1712,77 +1692,77 @@ ALIGN_5; LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 4*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 6*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; #### Unroll time 2 #### LD_DX 8*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $4*SIZE, ptrbb; LD_DX 10*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 12*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 14*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; ADDQ $16*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; .L212_loopE: #ifndef TRMMKERNEL @@ -1798,65 +1778,65 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $2*SIZE, ptrbb; LD_DX 2*SIZE(ptrba), xvec1; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; LD_DX 4*SIZE(ptrba), xvec2; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec13; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec13, xvec13; LD_DX 6*SIZE(ptrba), xvec3; SHUF_DX $0x4e, xvec7, xvec4; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec12; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec12, xvec12; ADDQ $8*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; MOV_DX xvec5, xvec6; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; MOV_DX xvec6, xvec7; -MUL_DX xvec2, xvec6; -ADD_DX xvec6, xvec9; +MUL_DX xvec2, xvec6, xvec6; +ADD_DX xvec6, xvec9, xvec9; -MUL_DX xvec3, xvec7; -ADD_DX xvec7, xvec8; +MUL_DX xvec3, xvec7, xvec7; +ADD_DX xvec7, xvec8, xvec8; .L213_loopE: #### Multiply Alpha #### BROAD_DX MEMALPHA, xvec7; -MUL_DX xvec7, xvec15; -MUL_DX xvec7, xvec14; -MUL_DX xvec7, xvec13; -MUL_DX xvec7, xvec12; -MUL_DX xvec7, xvec11; -MUL_DX xvec7, xvec10; -MUL_DX xvec7, xvec9; -MUL_DX xvec7, xvec8; +MUL_DX xvec7, xvec15, xvec15; +MUL_DX xvec7, xvec14, xvec14; +MUL_DX xvec7, xvec13, xvec13; +MUL_DX xvec7, xvec12, xvec12; +MUL_DX xvec7, xvec11, xvec11; +MUL_DX xvec7, xvec10, xvec10; +MUL_DX xvec7, xvec9, xvec9; +MUL_DX xvec7, xvec8, xvec8; #### Reverse ##### MOV_DX xvec15, xvec6; -REVS_DX xvec11, xvec15; -REVS_DX xvec6, xvec11; +REVS_DX xvec11, xvec15, xvec15; +REVS_DX xvec6, xvec11, xvec11; MOV_DX xvec14, xvec6; -REVS_DX xvec10, xvec14; -REVS_DX xvec6, xvec10; +REVS_DX xvec10, xvec14, xvec14; +REVS_DX xvec6, xvec10, xvec10; MOV_DX xvec13, xvec6; -REVS_DX xvec9, xvec13; -REVS_DX xvec6, xvec9; +REVS_DX xvec9, xvec13, xvec13; +REVS_DX xvec6, xvec9, xvec9; MOV_DX xvec12, xvec6; -REVS_DX xvec8, xvec12; -REVS_DX xvec6, xvec8; +REVS_DX xvec8, xvec12, xvec12; +REVS_DX xvec6, xvec8, xvec8; #### Testing Alignment #### MOVQ C0, %rax; OR ldc, %rax; @@ -1865,14 +1845,14 @@ JNE .L213_loopEx; ALIGN_5 #### Writing Back #### #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec11; -ADD_DX 2*SIZE(C0), xvec10; -ADD_DX 4*SIZE(C0), xvec9; -ADD_DX 6*SIZE(C0), xvec8; -ADD_DX 0*SIZE(C1), xvec15; -ADD_DX 2*SIZE(C1), xvec14; -ADD_DX 4*SIZE(C1), xvec13; -ADD_DX 6*SIZE(C1), xvec12; +ADD_DX 0*SIZE(C0), xvec11, xvec11; +ADD_DX 2*SIZE(C0), xvec10, xvec10; +ADD_DX 4*SIZE(C0), xvec9, xvec9; +ADD_DX 6*SIZE(C0), xvec8, xvec8; +ADD_DX 0*SIZE(C1), xvec15, xvec15; +ADD_DX 2*SIZE(C1), xvec14, xvec14; +ADD_DX 4*SIZE(C1), xvec13, xvec13; +ADD_DX 6*SIZE(C1), xvec12, xvec12; #endif ST_DX xvec11, 0*SIZE(C0); ST_DX xvec10, 2*SIZE(C0); @@ -1900,18 +1880,18 @@ JMP .L21_loopE; ALIGN_5 .L213_loopEx:; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0), xvec1; -LDH_DX 3*SIZE(C0), xvec1; -LDL_DX 4*SIZE(C0), xvec2; -LDH_DX 5*SIZE(C0), xvec2; -LDL_DX 6*SIZE(C0), xvec3; -LDH_DX 7*SIZE(C0), xvec3; -ADD_DX xvec0, xvec11; -ADD_DX xvec1, xvec10; -ADD_DX xvec2, xvec9; -ADD_DX xvec3, xvec8; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0), xvec1, xvec1; +LDH_DX 3*SIZE(C0), xvec1, xvec1; +LDL_DX 4*SIZE(C0), xvec2, xvec2; +LDH_DX 5*SIZE(C0), xvec2, xvec2; +LDL_DX 6*SIZE(C0), xvec3, xvec3; +LDH_DX 7*SIZE(C0), xvec3, xvec3; +ADD_DX xvec0, xvec11, xvec11; +ADD_DX xvec1, xvec10, xvec10; +ADD_DX xvec2, xvec9, xvec9; +ADD_DX xvec3, xvec8, xvec8; #endif STL_DX xvec11, 0*SIZE(C0); STH_DX xvec11, 1*SIZE(C0); @@ -1922,18 +1902,18 @@ STH_DX xvec9, 5*SIZE(C0); STL_DX xvec8, 6*SIZE(C0); STH_DX xvec8, 7*SIZE(C0); #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C1), xvec4; -LDH_DX 1*SIZE(C1), xvec4; -LDL_DX 2*SIZE(C1), xvec5; -LDH_DX 3*SIZE(C1), xvec5; -LDL_DX 4*SIZE(C1), xvec6; -LDH_DX 5*SIZE(C1), xvec6; -LDL_DX 6*SIZE(C1), xvec7; -LDH_DX 7*SIZE(C1), xvec7; -ADD_DX xvec4, xvec15; -ADD_DX xvec5, xvec14; -ADD_DX xvec6, xvec13; -ADD_DX xvec7, xvec12; +LDL_DX 0*SIZE(C1), xvec4, xvec4; +LDH_DX 1*SIZE(C1), xvec4, xvec4; +LDL_DX 2*SIZE(C1), xvec5, xvec5; +LDH_DX 3*SIZE(C1), xvec5, xvec5; +LDL_DX 4*SIZE(C1), xvec6, xvec6; +LDH_DX 5*SIZE(C1), xvec6, xvec6; +LDL_DX 6*SIZE(C1), xvec7, xvec7; +LDH_DX 7*SIZE(C1), xvec7, xvec7; +ADD_DX xvec4, xvec15, xvec15; +ADD_DX xvec5, xvec14, xvec14; +ADD_DX xvec6, xvec13, xvec13; +ADD_DX xvec7, xvec12, xvec12; #endif STL_DX xvec15, 0*SIZE(C1); STH_DX xvec15, 1*SIZE(C1); @@ -2000,79 +1980,79 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; #### Unroll time 2 #### LD_DX 4*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 6*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; #### Unroll time 3 #### LD_DX 8*SIZE(ptrba), xvec0; LD_DX 4*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 10*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; #### Unroll time 4 #### LD_DX 12*SIZE(ptrba), xvec0; LD_DX 6*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $8*SIZE, ptrbb; LD_DX 14*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; ADDQ $16*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; DECQ k; JG .L221_bodyB; ALIGN_5 @@ -2090,40 +2070,40 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; #### Unroll time 2 #### LD_DX 4*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $4*SIZE, ptrbb; LD_DX 6*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; ADDQ $8*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; .L222_loopE: #ifndef TRMMKERNEL @@ -2139,37 +2119,37 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $2*SIZE, ptrbb; LD_DX 2*SIZE(ptrba), xvec1; SHUF_DX $0x4e, xvec5, xvec4; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec14; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec14, xvec14; ADDQ $4*SIZE, ptrba; MOV_DX xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec11; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec11, xvec11; -MUL_DX xvec1, xvec5; -ADD_DX xvec5, xvec10; +MUL_DX xvec1, xvec5, xvec5; +ADD_DX xvec5, xvec10, xvec10; .L223_loopE: #### Multiply Alpha #### BROAD_DX MEMALPHA, xvec7; -MUL_DX xvec7, xvec15; -MUL_DX xvec7, xvec14; -MUL_DX xvec7, xvec11; -MUL_DX xvec7, xvec10; +MUL_DX xvec7, xvec15, xvec15; +MUL_DX xvec7, xvec14, xvec14; +MUL_DX xvec7, xvec11, xvec11; +MUL_DX xvec7, xvec10, xvec10; #### Reverse ##### MOV_DX xvec15, xvec6; -REVS_DX xvec11, xvec15; -REVS_DX xvec6, xvec11; +REVS_DX xvec11, xvec15, xvec15; +REVS_DX xvec6, xvec11, xvec11; MOV_DX xvec14, xvec6; -REVS_DX xvec10, xvec14; -REVS_DX xvec6, xvec10; +REVS_DX xvec10, xvec14, xvec14; +REVS_DX xvec6, xvec10, xvec10; #### Testing Alignment #### MOVQ C0, %rax; OR ldc, %rax; @@ -2178,10 +2158,10 @@ JNE .L223_loopEx; ALIGN_5 #### Writing Back #### #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec11; -ADD_DX 2*SIZE(C0), xvec10; -ADD_DX 0*SIZE(C1), xvec15; -ADD_DX 2*SIZE(C1), xvec14; +ADD_DX 0*SIZE(C0), xvec11, xvec11; +ADD_DX 2*SIZE(C0), xvec10, xvec10; +ADD_DX 0*SIZE(C1), xvec15, xvec15; +ADD_DX 2*SIZE(C1), xvec14, xvec14; #endif ST_DX xvec11, 0*SIZE(C0); ST_DX xvec10, 2*SIZE(C0); @@ -2203,24 +2183,24 @@ JMP .L22_loopE; ALIGN_5 .L223_loopEx:; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0), xvec1; -LDH_DX 3*SIZE(C0), xvec1; -ADD_DX xvec0, xvec11; -ADD_DX xvec1, xvec10; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0), xvec1, xvec1; +LDH_DX 3*SIZE(C0), xvec1, xvec1; +ADD_DX xvec0, xvec11, xvec11; +ADD_DX xvec1, xvec10, xvec10; #endif STL_DX xvec11, 0*SIZE(C0); STH_DX xvec11, 1*SIZE(C0); STL_DX xvec10, 2*SIZE(C0); STH_DX xvec10, 3*SIZE(C0); #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C1), xvec4; -LDH_DX 1*SIZE(C1), xvec4; -LDL_DX 2*SIZE(C1), xvec5; -LDH_DX 3*SIZE(C1), xvec5; -ADD_DX xvec4, xvec15; -ADD_DX xvec5, xvec14; +LDL_DX 0*SIZE(C1), xvec4, xvec4; +LDH_DX 1*SIZE(C1), xvec4, xvec4; +LDL_DX 2*SIZE(C1), xvec5, xvec5; +LDH_DX 3*SIZE(C1), xvec5, xvec5; +ADD_DX xvec4, xvec15, xvec15; +ADD_DX xvec5, xvec14, xvec14; #endif STL_DX xvec15, 0*SIZE(C1); STH_DX xvec15, 1*SIZE(C1); @@ -2278,38 +2258,38 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; #### Unroll time 2 #### LD_DX 2*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; #### Unroll time 3 #### LD_DX 4*SIZE(ptrba), xvec0; LD_DX 4*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; #### Unroll time 4 #### LD_DX 6*SIZE(ptrba), xvec0; LD_DX 6*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $8*SIZE, ptrba; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; ADDQ $8*SIZE, ptrbb; DECQ k; JG .L231_bodyB; @@ -2328,20 +2308,20 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; #### Unroll time 2 #### LD_DX 2*SIZE(ptrba), xvec0; LD_DX 2*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $4*SIZE, ptrba; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; ADDQ $4*SIZE, ptrbb; .L232_loopE: #ifndef TRMMKERNEL @@ -2357,21 +2337,21 @@ ALIGN_5 LD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec4; SHUF_DX $0x4e, xvec4, xvec5; -MUL_DX xvec0, xvec4; -ADD_DX xvec4, xvec15; +MUL_DX xvec0, xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; ADDQ $2*SIZE, ptrba; -MUL_DX xvec0, xvec5; -ADD_DX xvec5, xvec11; +MUL_DX xvec0, xvec5, xvec5; +ADD_DX xvec5, xvec11, xvec11; ADDQ $2*SIZE, ptrbb; .L233_loopE: #### Multiply Alpha #### BROAD_DX MEMALPHA, xvec7; -MUL_DX xvec7, xvec15; -MUL_DX xvec7, xvec11; +MUL_DX xvec7, xvec15, xvec15; +MUL_DX xvec7, xvec11, xvec11; #### Reverse ##### MOV_DX xvec15, xvec6; -REVS_DX xvec11, xvec15; -REVS_DX xvec6, xvec11; +REVS_DX xvec11, xvec15, xvec15; +REVS_DX xvec6, xvec11, xvec11; #### Testing Alignment #### MOVQ C0, %rax; OR ldc, %rax; @@ -2380,8 +2360,8 @@ JNE .L233_loopEx; ALIGN_5 #### Writing Back #### #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec11; -ADD_DX 0*SIZE(C1), xvec15; +ADD_DX 0*SIZE(C0), xvec11, xvec11; +ADD_DX 0*SIZE(C1), xvec15, xvec15; #endif ST_DX xvec11, 0*SIZE(C0); ST_DX xvec15, 0*SIZE(C1); @@ -2401,16 +2381,16 @@ JMP .L23_loopE; ALIGN_5 .L233_loopEx:; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -ADD_DX xvec0, xvec11; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +ADD_DX xvec0, xvec11, xvec11; #endif STL_DX xvec11, 0*SIZE(C0); STH_DX xvec11, 1*SIZE(C0); #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C1), xvec4; -LDH_DX 1*SIZE(C1), xvec4; -ADD_DX xvec4, xvec15; +LDL_DX 0*SIZE(C1), xvec4, xvec4; +LDH_DX 1*SIZE(C1), xvec4, xvec4; +ADD_DX xvec4, xvec15, xvec15; #endif STL_DX xvec15, 0*SIZE(C1); STH_DX xvec15, 1*SIZE(C1); @@ -2462,23 +2442,23 @@ ALIGN_5 .L241_bodyB: BROAD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; BROAD_DX 1*SIZE(ptrba), xvec1; LD_DX 2*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADD_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADD_DX xvec3, xvec15, xvec15; BROAD_DX 2*SIZE(ptrba), xvec0; LD_DX 4*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; BROAD_DX 3*SIZE(ptrba), xvec1; LD_DX 6*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADD_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADD_DX xvec3, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; DECQ k; @@ -2496,13 +2476,13 @@ ALIGN_5 .L242_bodyB: BROAD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; BROAD_DX 1*SIZE(ptrba), xvec1; LD_DX 2*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADD_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADD_DX xvec3, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; .L242_loopE: @@ -2517,18 +2497,18 @@ ALIGN_5 .L243_bodyB: BROAD_DX 0*SIZE(ptrba), xvec0; LD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; ADDQ $1*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; .L243_loopE: BROAD_DX MEMALPHA, xvec7; -MUL_DX xvec7, xvec15; +MUL_DX xvec7, xvec15, xvec15; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 0*SIZE(C1), xvec0; -ADD_DX xvec0, xvec15; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 0*SIZE(C1), xvec0, xvec0; +ADD_DX xvec0, xvec15, xvec15; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 0*SIZE(C1); @@ -2705,10 +2685,10 @@ ALIGN_5 EXTRA_DY $1, yvec15, xvec13; EXTRA_DY $1, yvec14, xvec12; #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec15; -ADD_DX 2*SIZE(C0), xvec13; -ADD_DX 4*SIZE(C0), xvec14; -ADD_DX 6*SIZE(C0), xvec12; +ADD_DX 0*SIZE(C0), xvec15, xvec15; +ADD_DX 2*SIZE(C0), xvec13, xvec13; +ADD_DX 4*SIZE(C0), xvec14, xvec14; +ADD_DX 6*SIZE(C0), xvec12, xvec12; #endif ST_DX xvec15, 0*SIZE(C0); ST_DX xvec13, 2*SIZE(C0); @@ -2733,18 +2713,18 @@ ALIGN_5 EXTRA_DY $1, yvec15, xvec13; EXTRA_DY $1, yvec14, xvec12; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec11; -LDH_DX 1*SIZE(C0), xvec11; -LDL_DX 2*SIZE(C0), xvec10; -LDH_DX 3*SIZE(C0), xvec10; -LDL_DX 4*SIZE(C0), xvec9; -LDH_DX 5*SIZE(C0), xvec9; -LDL_DX 6*SIZE(C0), xvec8; -LDH_DX 7*SIZE(C0), xvec8; -ADD_DX xvec11, xvec15; -ADD_DX xvec10, xvec13; -ADD_DX xvec9, xvec14; -ADD_DX xvec8, xvec12; +LDL_DX 0*SIZE(C0), xvec11, xvec11; +LDH_DX 1*SIZE(C0), xvec11, xvec11; +LDL_DX 2*SIZE(C0), xvec10, xvec10; +LDH_DX 3*SIZE(C0), xvec10, xvec10; +LDL_DX 4*SIZE(C0), xvec9, xvec9; +LDH_DX 5*SIZE(C0), xvec9, xvec9; +LDL_DX 6*SIZE(C0), xvec8, xvec8; +LDH_DX 7*SIZE(C0), xvec8, xvec8; +ADD_DX xvec11, xvec15, xvec15; +ADD_DX xvec10, xvec13, xvec13; +ADD_DX xvec9, xvec14, xvec14; +ADD_DX xvec8, xvec12, xvec12; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2878,8 +2858,8 @@ ALIGN_5 #### Writing Back #### EXTRA_DY $1, yvec15, xvec14; #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec15; -ADD_DX 2*SIZE(C0), xvec14; +ADD_DX 0*SIZE(C0), xvec15, xvec15; +ADD_DX 2*SIZE(C0), xvec14, xvec14; #endif ST_DX xvec15, 0*SIZE(C0); ST_DX xvec14, 2*SIZE(C0); @@ -2900,12 +2880,12 @@ ALIGN_5 #### Writing Back #### EXTRA_DY $1, yvec15, xvec14; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec13; -LDH_DX 1*SIZE(C0), xvec13; -LDL_DX 2*SIZE(C0), xvec12; -LDH_DX 3*SIZE(C0), xvec12; -ADD_DX xvec13, xvec15; -ADD_DX xvec12, xvec14; +LDL_DX 0*SIZE(C0), xvec13, xvec13; +LDH_DX 1*SIZE(C0), xvec13, xvec13; +LDL_DX 2*SIZE(C0), xvec12, xvec12; +LDH_DX 3*SIZE(C0), xvec12, xvec12; +ADD_DX xvec13, xvec15, xvec15; +ADD_DX xvec12, xvec14, xvec14; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2959,23 +2939,23 @@ ALIGN_5 .L331_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; BROAD_DX 1*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADD_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADD_DX xvec3, xvec15, xvec15; LD_DX 4*SIZE(ptrba), xvec4; BROAD_DX 2*SIZE(ptrbb), xvec5; -MUL_DX xvec4, xvec5; -ADD_DX xvec5, xvec15; +MUL_DX xvec4, xvec5, xvec5; +ADD_DX xvec5, xvec15, xvec15; LD_DX 6*SIZE(ptrba), xvec6; BROAD_DX 3*SIZE(ptrbb), xvec7; -MUL_DX xvec6, xvec7; -ADD_DX xvec7, xvec15; +MUL_DX xvec6, xvec7, xvec7; +ADD_DX xvec7, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; DECQ k; @@ -2993,13 +2973,13 @@ ALIGN_5 .L332_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec1; BROAD_DX 1*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADD_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADD_DX xvec3, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; .L332_loopE: @@ -3014,18 +2994,18 @@ ALIGN_5 .L333_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD_DX xvec2, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $1*SIZE, ptrbb; .L333_loopE: #### Multiply Alpha #### BROAD_DX MEMALPHA, xvec7; -MUL_DX xvec7, xvec15; +MUL_DX xvec7, xvec15, xvec15; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec14; -LDH_DX 1*SIZE(C0), xvec14; -ADD_DX xvec14, xvec15; +LDL_DX 0*SIZE(C0), xvec14, xvec14; +LDH_DX 1*SIZE(C0), xvec14, xvec14; +ADD_DX xvec14, xvec15, xvec15; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -3074,25 +3054,25 @@ SARQ $2, k; JLE .L341_loopE; ALIGN_5 .L341_bodyB: -movsd 0*SIZE(ptrba), xvec0; -movsd 0*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 0*SIZE(ptrba), xvec0; +vmovsd 0*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; -movsd 1*SIZE(ptrba), xvec0; -movsd 1*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 1*SIZE(ptrba), xvec0; +vmovsd 1*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; -movsd 2*SIZE(ptrba), xvec0; -movsd 2*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 2*SIZE(ptrba), xvec0; +vmovsd 2*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; -movsd 3*SIZE(ptrba), xvec0; -movsd 3*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 3*SIZE(ptrba), xvec0; +vmovsd 3*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; addq $4*SIZE, ptrba; addq $4*SIZE, ptrbb; decq k; @@ -3108,15 +3088,15 @@ TEST $2, %rax; JLE .L342_loopE; ALIGN_5 .L342_bodyB: -movsd 0*SIZE(ptrba), xvec0; -movsd 0*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 0*SIZE(ptrba), xvec0; +vmovsd 0*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; -movsd 1*SIZE(ptrba), xvec0; -movsd 1*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 1*SIZE(ptrba), xvec0; +vmovsd 1*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; addq $2*SIZE, ptrba; addq $2*SIZE, ptrbb; @@ -3130,20 +3110,20 @@ TEST $1, %rax; JLE .L343_loopE; ALIGN_5 .L343_bodyB: -movsd 0*SIZE(ptrba), xvec0; -movsd 0*SIZE(ptrbb), xvec1; -mulsd xvec0, xvec1; -addsd xvec1, xvec15; +vmovsd 0*SIZE(ptrba), xvec0; +vmovsd 0*SIZE(ptrbb), xvec1; +vmulsd xvec0, xvec1, xvec1; +vaddsd xvec1, xvec15, xvec15; addq $1*SIZE, ptrba; addq $1*SIZE, ptrbb; .L343_loopE: #### Writing Back #### -movsd MEMALPHA, xvec7; -mulsd xvec7, xvec15; +vmovsd MEMALPHA, xvec7; +vmulsd xvec7, xvec15, xvec15; #ifndef TRMMKERNEL -movsd 0*SIZE(C0), xvec0; -addsd xvec0, xvec15; +vmovsd 0*SIZE(C0), xvec0; +vaddsd xvec0, xvec15, xvec15; #endif movsd xvec15, 0*SIZE(C0); #if (defined(TRMMKERNEL) && defined(LEFT) && defined(TRANSA)) ||(defined(TRMMKERNEL) && !defined(LEFT) && !defined(TRANSA)) @@ -3170,6 +3150,9 @@ movq 16(%rsp), %r12; movq 24(%rsp), %r13; movq 32(%rsp), %r14; movq 40(%rsp), %r15; + +vzeroupper + #ifdef WINDOWS_ABI movq 48(%rsp), %rdi movq 56(%rsp), %rsi diff --git a/kernel/x86_64/sgemm_kernel_8x8_sandy.S b/kernel/x86_64/sgemm_kernel_8x8_sandy.S index 59458effe..20ddcaa8e 100644 --- a/kernel/x86_64/sgemm_kernel_8x8_sandy.S +++ b/kernel/x86_64/sgemm_kernel_8x8_sandy.S @@ -146,75 +146,53 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MOVQ movq #define XOR_SY vxorps -#define XOR_DY vxorpd -#define XOR_SX xorps -#define XOR_DX xorpd +#define XOR_SX vxorps #define LD_SY vmovaps -#define LD_DY vmovapd -#define LD_SX movaps -#define LD_DX movapd -#define LDL_SX movlps +#define LD_SX vmovaps +#define LDL_SX vmovlps #define LDL_SY vmovlps -#define LDH_SX movhps +#define LDH_SX vmovhps #define LDH_SY vmovhps #define ST_SY vmovaps -#define ST_DY vmovapd -#define ST_SX movaps -#define ST_DX movapd -#define STL_SX movlps +#define ST_SX vmovaps +#define STL_SX vmovlps #define STL_SY vmovlps -#define STH_SX movhps +#define STH_SX vmovhps #define STH_SY vmovhps #define EDUP_SY vmovsldup #define ODUP_SY vmovshdup -#define EDUP_SX movsldup -#define ODUP_SX movshdup -#define EDUP_DY vmovddup +#define EDUP_SX vmovsldup +#define ODUP_SX vmovshdup #define ADD_SY vaddps -#define ADD_DY vaddpd -#define ADD_SX addps -#define ADD_DX addpd +#define ADD_SX vaddps #define ADD1_DY vaddpd -#define ADD2_DY vaddpd -#define ADDSUB_DY vaddsubpd #define ADDSUB_SY vaddsubps #define MUL_SY vmulps -#define MUL_DY vmulpd -#define MUL_SX mulps -#define MUL_DX mulpd +#define MUL_SX vmulps #define SHUF_SY vperm2f128 #define SHUF_DY vperm2f128 -#define SHUF_DX pshufd -#define SHUF_SX pshufd +#define SHUF_SX vpshufd #define VPERMILP_SY vpermilps #define VPERMILP_SX vpermilps -#define VPERMILP_DY vpermilpd #define BROAD_SY vbroadcastss -#define BROAD_DY vbroadcastsd #define BROAD_SX vbroadcastss -#define BROAD_DX movddup #define MOV_SY vmovaps -#define MOV_DY vmovapd -#define MOV_SX movaps -#define MOV_DX movapd +#define MOV_SX vmovaps #define REVS_SY vshufps -#define REVS_DY vshufpd -#define REVS_SX shufps -#define REVS_DX movsd +#define REVS_SX vshufps #define EXTRA_SY vextractf128 -#define EXTRA_DY vextractf128 PROLOGUE @@ -260,6 +238,8 @@ movq old_offset, %r11 #endif #endif +vzeroupper + vmovlps ALPHA, MEMALPHA movq old_bm, bm movq old_bn, bn @@ -864,125 +844,125 @@ ALIGN_4 #### Unroll time 1 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec1; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 8*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 8*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; #### Unroll time 2 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 12*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 8*SIZE(ptrba), xvec0; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 16*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 16*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; #### Unroll time 3 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 20*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 20*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 12*SIZE(ptrba), xvec1; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 24*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 24*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; ADDQ $16*SIZE, ptrba; #### Unroll time 4 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 28*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 28*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $32*SIZE, ptrbb; LD_SX 0*SIZE(ptrba), xvec0; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 0*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; DECQ k; JG .L8_bodyB; ALIGN_4 @@ -997,65 +977,65 @@ ALIGN_4 .L9_bodyB: #### Unroll time 1 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec1; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 8*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 8*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; #### Unroll time 2 #### ADDQ $8*SIZE, ptrba; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 12*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $16*SIZE, ptrbb; LD_SX 0*SIZE(ptrba), xvec0; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; EDUP_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec9; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; ODUP_SX 0*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; .L9_loopE: #ifndef TRMMKERNEL @@ -1068,57 +1048,57 @@ ALIGN_4 .L10_bodyB: #### Unroll time 1 #### SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; ADDQ $4*SIZE, ptrba; EDUP_SX 4*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; ODUP_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $8*SIZE, ptrbb; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec11; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec11, xvec11; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec10; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec10, xvec10; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec9; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec8; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec9, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec8, xvec8; .L10_loopE: #### Multiply Alpha #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; -MUL_SX xvec7, xvec13; -MUL_SX xvec7, xvec12; -MUL_SX xvec7, xvec11; -MUL_SX xvec7, xvec10; -MUL_SX xvec7, xvec9; -MUL_SX xvec7, xvec8; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec7, xvec12, xvec12; +MUL_SX xvec7, xvec11, xvec11; +MUL_SX xvec7, xvec10, xvec10; +MUL_SX xvec7, xvec9, xvec9; +MUL_SX xvec7, xvec8, xvec8; #### Reverse Result #### MOV_SX xvec15, xvec7; -REVS_SX $0xe4, xvec13, xvec15; -REVS_SX $0xe4, xvec7, xvec13; +REVS_SX $0xe4, xvec13, xvec15, xvec15; +REVS_SX $0xe4, xvec7, xvec13, xvec13; MOV_SX xvec14, xvec7; -REVS_SX $0xe4, xvec12, xvec14; -REVS_SX $0xe4, xvec7, xvec12; +REVS_SX $0xe4, xvec12, xvec14, xvec14; +REVS_SX $0xe4, xvec7, xvec12, xvec12; MOV_SX xvec11, xvec7; -REVS_SX $0xe4, xvec9, xvec11; -REVS_SX $0xe4, xvec7, xvec9; +REVS_SX $0xe4, xvec9, xvec11, xvec11; +REVS_SX $0xe4, xvec7, xvec9, xvec9; MOV_SX xvec10, xvec7; -REVS_SX $0xe4, xvec8, xvec10; -REVS_SX $0xe4, xvec7, xvec8; +REVS_SX $0xe4, xvec8, xvec10, xvec10; +REVS_SX $0xe4, xvec7, xvec8, xvec8; #### Testing Alignment #### MOVQ C0, %rax; OR ldc, %rax; @@ -1127,14 +1107,14 @@ JNE .L10_loopEx; ALIGN_4 LEAQ (ldc,ldc,2),%rax; #ifndef TRMMKERNEL -ADD_SX 0*SIZE(C0), xvec15; -ADD_SX 0*SIZE(C0, ldc, 1), xvec14; -ADD_SX 0*SIZE(C0, ldc, 2), xvec13; -ADD_SX 0*SIZE(C0, %rax, 1), xvec12; -ADD_SX 0*SIZE(C1), xvec11; -ADD_SX 0*SIZE(C1, ldc, 1), xvec10; -ADD_SX 0*SIZE(C1, ldc, 2), xvec9; -ADD_SX 0*SIZE(C1, %rax, 1), xvec8; +ADD_SX 0*SIZE(C0), xvec15, xvec15; +ADD_SX 0*SIZE(C0, ldc,1), xvec14, xvec14; +ADD_SX 0*SIZE(C0, ldc,2), xvec13, xvec13; +ADD_SX 0*SIZE(C0, %rax,1), xvec12, xvec12; +ADD_SX 0*SIZE(C1), xvec11, xvec11; +ADD_SX 0*SIZE(C1, ldc,1), xvec10, xvec10; +ADD_SX 0*SIZE(C1, ldc,2), xvec9, xvec9; +ADD_SX 0*SIZE(C1, %rax,1), xvec8, xvec8; #endif ST_SX xvec15, 0*SIZE(C0); ST_SX xvec14, 0*SIZE(C0, ldc, 1); @@ -1161,30 +1141,30 @@ ALIGN_4 .L10_loopEx: LEAQ (ldc,ldc,2),%rax; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec7; -LDH_SX 2*SIZE(C0), xvec7; -LDL_SX 0*SIZE(C0, ldc, 1), xvec6; -LDH_SX 2*SIZE(C0, ldc, 1), xvec6; -LDL_SX 0*SIZE(C0, ldc, 2), xvec5; -LDH_SX 2*SIZE(C0, ldc, 2), xvec5; -LDL_SX 0*SIZE(C0, %rax, 1), xvec4; -LDH_SX 2*SIZE(C0, %rax, 1), xvec4; -LDL_SX 0*SIZE(C1), xvec3; -LDH_SX 2*SIZE(C1), xvec3; -LDL_SX 0*SIZE(C1, ldc, 1), xvec2; -LDH_SX 2*SIZE(C1, ldc, 1), xvec2; -LDL_SX 0*SIZE(C1, ldc, 2), xvec1; -LDH_SX 2*SIZE(C1, ldc, 2), xvec1; -LDL_SX 0*SIZE(C1, %rax, 1), xvec0; -LDH_SX 2*SIZE(C1, %rax, 1), xvec0; -ADD_SX xvec7, xvec15; -ADD_SX xvec6, xvec14; -ADD_SX xvec5, xvec13; -ADD_SX xvec4, xvec12; -ADD_SX xvec3, xvec11; -ADD_SX xvec2, xvec10; -ADD_SX xvec1, xvec9; -ADD_SX xvec0, xvec8; +LDL_SX 0*SIZE(C0), xvec7, xvec7; +LDH_SX 2*SIZE(C0), xvec7, xvec7; +LDL_SX 0*SIZE(C0, ldc, 1), xvec6, xvec6; +LDH_SX 2*SIZE(C0, ldc, 1), xvec6, xvec6; +LDL_SX 0*SIZE(C0, ldc, 2), xvec5, xvec5; +LDH_SX 2*SIZE(C0, ldc, 2), xvec5, xvec5; +LDL_SX 0*SIZE(C0, %rax, 1), xvec4, xvec4; +LDH_SX 2*SIZE(C0, %rax, 1), xvec4, xvec4; +LDL_SX 0*SIZE(C1), xvec3, xvec3; +LDH_SX 2*SIZE(C1), xvec3, xvec3; +LDL_SX 0*SIZE(C1, ldc, 1), xvec2, xvec2; +LDH_SX 2*SIZE(C1, ldc, 1), xvec2, xvec2; +LDL_SX 0*SIZE(C1, ldc, 2), xvec1, xvec1; +LDH_SX 2*SIZE(C1, ldc, 2), xvec1, xvec1; +LDL_SX 0*SIZE(C1, %rax, 1), xvec0, xvec0; +LDH_SX 2*SIZE(C1, %rax, 1), xvec0, xvec0; +ADD_SX xvec7, xvec15, xvec15; +ADD_SX xvec6, xvec14, xvec14; +ADD_SX xvec5, xvec13, xvec13; +ADD_SX xvec4, xvec12, xvec12; +ADD_SX xvec3, xvec11, xvec11; +ADD_SX xvec2, xvec10, xvec10; +ADD_SX xvec1, xvec9, xvec9; +ADD_SX xvec0, xvec8, xvec8; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); @@ -1258,63 +1238,63 @@ LD_SX 0*SIZE(ptrba), xvec0; # a1, a2, a3, a4 SHUF_SX $0x44, xvec0, xvec1; # a1, a2, a1, a2 EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; ODUP_SX 4*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; SHUF_SX $0xee, xvec0, xvec6; EDUP_SX 8*SIZE(ptrbb), xvec2; ODUP_SX 8*SIZE(ptrbb), xvec3; -MUL_SX xvec6, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec6, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec6, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec6, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec4; ODUP_SX 12*SIZE(ptrbb), xvec5; -MUL_SX xvec6, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec6, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec6, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec6, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec0; SHUF_SX $0x44, xvec0, xvec1; EDUP_SX 16*SIZE(ptrbb), xvec2; ODUP_SX 16*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 20*SIZE(ptrbb), xvec4; ODUP_SX 20*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; SHUF_SX $0xee, xvec0, xvec6; EDUP_SX 24*SIZE(ptrbb), xvec2; ODUP_SX 24*SIZE(ptrbb), xvec3; -MUL_SX xvec6, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec6, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec6, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec6, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 28*SIZE(ptrbb), xvec4; ODUP_SX 28*SIZE(ptrbb), xvec5; -MUL_SX xvec6, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec6, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec6, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec6, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $8*SIZE, ptrba; ADDQ $32*SIZE, ptrbb; @@ -1334,32 +1314,32 @@ LD_SX 0*SIZE(ptrba), xvec0; # a1, a2, a3, a4 SHUF_SX $0x44, xvec0, xvec1; # a1, a2, a1, a2 EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; ODUP_SX 4*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; SHUF_SX $0xee, xvec0, xvec6; EDUP_SX 8*SIZE(ptrbb), xvec2; ODUP_SX 8*SIZE(ptrbb), xvec3; -MUL_SX xvec6, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec6, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec6, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec6, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 12*SIZE(ptrbb), xvec4; ODUP_SX 12*SIZE(ptrbb), xvec5; -MUL_SX xvec6, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec6, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec6, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec6, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $4*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -1376,40 +1356,40 @@ LD_SX 0*SIZE(ptrba), xvec0; # a1, a2, a3, a4 SHUF_SX $0x44, xvec0, xvec1; # a1, a2, a1, a2 EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; EDUP_SX 4*SIZE(ptrbb), xvec4; ODUP_SX 4*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $2*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; .L13_loopE: LEAQ (ldc,ldc,2),%rax; #### Multiply Alpha #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; -MUL_SX xvec7, xvec13; -MUL_SX xvec7, xvec12; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec7, xvec12, xvec12; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec11; -LDH_SX 0*SIZE(C0, ldc, 2), xvec11; -LDL_SX 0*SIZE(C0, ldc, 1), xvec10; -LDH_SX 0*SIZE(C0, %rax, 1), xvec10; -LDL_SX 0*SIZE(C1), xvec9; -LDH_SX 0*SIZE(C1, ldc, 2), xvec9; -LDL_SX 0*SIZE(C1, ldc, 1), xvec8; -LDH_SX 0*SIZE(C1, %rax, 1), xvec8; -ADD_SX xvec11, xvec15; -ADD_SX xvec10, xvec14; -ADD_SX xvec9, xvec13; -ADD_SX xvec8, xvec12; +LDL_SX 0*SIZE(C0), xvec11, xvec11; +LDH_SX 0*SIZE(C0, ldc, 2), xvec11, xvec11; +LDL_SX 0*SIZE(C0, ldc, 1), xvec10, xvec10; +LDH_SX 0*SIZE(C0, %rax, 1), xvec10, xvec10; +LDL_SX 0*SIZE(C1), xvec9, xvec9; +LDH_SX 0*SIZE(C1, ldc, 2), xvec9, xvec9; +LDL_SX 0*SIZE(C1, ldc, 1), xvec8, xvec8; +LDH_SX 0*SIZE(C1, %rax,1), xvec8, xvec8; +ADD_SX xvec11, xvec15, xvec15; +ADD_SX xvec10, xvec14, xvec14; +ADD_SX xvec9, xvec13, xvec13; +ADD_SX xvec8, xvec12, xvec12; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 0*SIZE(C0, ldc, 2); @@ -1471,35 +1451,35 @@ ALIGN_4 .L14_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; BROAD_SX 1*SIZE(ptrba), xvec1; LD_SX 8*SIZE(ptrbb), xvec4; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; LD_SX 12*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; BROAD_SX 2*SIZE(ptrba), xvec0; LD_SX 16*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; LD_SX 20*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; BROAD_SX 3*SIZE(ptrba), xvec1; LD_SX 24*SIZE(ptrbb), xvec4; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; LD_SX 28*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; ADDQ $4*SIZE, ptrba; ADDQ $32*SIZE, ptrbb; @@ -1517,19 +1497,19 @@ ALIGN_4 .L15_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; BROAD_SX 1*SIZE(ptrba), xvec1; LD_SX 8*SIZE(ptrbb), xvec4; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; LD_SX 12*SIZE(ptrbb), xvec5; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; ADDQ $2*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -1544,18 +1524,18 @@ ALIGN_4 .L16_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; LD_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; ADDQ $1, ptrba; ADDQ $4, ptrbb; .L16_loopE: BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; LEAQ (ldc,ldc,2),%rax; SHUF_SX $0xff, xvec15, xvec13; @@ -1676,96 +1656,96 @@ ALIGN_4 ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 4*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 8*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 12*SIZE(ptrba), xvec1; #### Unroll time 2 #### ODUP_SX 4*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 8*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 16*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 20*SIZE(ptrba), xvec1; #### Unroll time 3 #### ODUP_SX 8*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 12*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; ADDQ $16*SIZE, ptrbb; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 24*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 28*SIZE(ptrba), xvec1; ADDQ $32*SIZE, ptrba; @@ -1773,32 +1753,32 @@ ADDQ $32*SIZE, ptrba; ODUP_SX -4*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 0*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 0*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 4*SIZE(ptrba), xvec1; DECQ k; JG .L211_bodyB; @@ -1816,33 +1796,33 @@ ALIGN_4 ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 4*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; ADDQ $8*SIZE, ptrbb; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 8*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 12*SIZE(ptrba), xvec1; ADDQ $16*SIZE, ptrba; @@ -1850,31 +1830,31 @@ ADDQ $16*SIZE, ptrba; ODUP_SX -4*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; SHUF_SX $0x4e, xvec3, xvec5; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; EDUP_SX 0*SIZE(ptrbb), xvec2; MOV_SX xvec4, xvec6; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; LD_SX 0*SIZE(ptrba), xvec0; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; LD_SX 4*SIZE(ptrba), xvec1; .L212_loopE: @@ -1889,70 +1869,70 @@ ALIGN_4 ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; MOV_SX xvec2, xvec6; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; ADDQ $4*SIZE, ptrbb; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; MOV_SX xvec3, xvec7; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec13; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec13, xvec13; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec12; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec12, xvec12; MOV_SX xvec4, xvec6; ADDQ $8*SIZE, ptrba; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec11; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec10; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec11, xvec11; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec10, xvec10; MOV_SX xvec5, xvec7; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec9; -MUL_SX xvec1, xvec7; -ADD_SX xvec7, xvec8; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec9, xvec9; +MUL_SX xvec1, xvec7, xvec7; +ADD_SX xvec7, xvec8, xvec8; .L213_loopE: #### Multiply Alpha #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; -MUL_SX xvec7, xvec13; -MUL_SX xvec7, xvec12; -MUL_SX xvec7, xvec11; -MUL_SX xvec7, xvec10; -MUL_SX xvec7, xvec9; -MUL_SX xvec7, xvec8; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec7, xvec12, xvec12; +MUL_SX xvec7, xvec11, xvec11; +MUL_SX xvec7, xvec10, xvec10; +MUL_SX xvec7, xvec9, xvec9; +MUL_SX xvec7, xvec8, xvec8; #### Writing Back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C1), xvec1; -LDL_SX 0*SIZE(C0, ldc, 1), xvec2; -LDH_SX 2*SIZE(C1, ldc, 1), xvec2; -LDL_SX 4*SIZE(C0, ldc, 1), xvec3; -LDH_SX 6*SIZE(C1, ldc, 1), xvec3; -LDL_SX 0*SIZE(C1), xvec4; -LDH_SX 2*SIZE(C0), xvec4; -LDL_SX 4*SIZE(C1), xvec5; -LDH_SX 6*SIZE(C0), xvec5; -LDL_SX 0*SIZE(C1, ldc, 1), xvec6; -LDH_SX 2*SIZE(C0, ldc, 1), xvec6; -LDL_SX 4*SIZE(C1, ldc, 1), xvec7; -LDH_SX 6*SIZE(C0, ldc, 1), xvec7; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; -ADD_SX xvec2, xvec13; -ADD_SX xvec3, xvec12; -ADD_SX xvec4, xvec11; -ADD_SX xvec5, xvec10; -ADD_SX xvec6, xvec9; -ADD_SX xvec7, xvec8; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C1), xvec1, xvec1; +LDL_SX 0*SIZE(C0, ldc, 1), xvec2, xvec2; +LDH_SX 2*SIZE(C1, ldc, 1), xvec2, xvec2; +LDL_SX 4*SIZE(C0, ldc, 1), xvec3, xvec3; +LDH_SX 6*SIZE(C1, ldc, 1), xvec3, xvec3; +LDL_SX 0*SIZE(C1), xvec4, xvec4; +LDH_SX 2*SIZE(C0), xvec4, xvec4; +LDL_SX 4*SIZE(C1), xvec5, xvec5; +LDH_SX 6*SIZE(C0), xvec5, xvec5; +LDL_SX 0*SIZE(C1, ldc, 1), xvec6, xvec6; +LDH_SX 2*SIZE(C0, ldc, 1), xvec6, xvec6; +LDL_SX 4*SIZE(C1, ldc, 1), xvec7, xvec7; +LDH_SX 6*SIZE(C0, ldc, 1), xvec7, xvec7; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; +ADD_SX xvec2, xvec13, xvec13; +ADD_SX xvec3, xvec12, xvec12; +ADD_SX xvec4, xvec11, xvec11; +ADD_SX xvec5, xvec10, xvec10; +ADD_SX xvec6, xvec9, xvec9; +ADD_SX xvec7, xvec8, xvec8; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); @@ -2028,64 +2008,64 @@ EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec1; EDUP_SX 4*SIZE(ptrbb), xvec2; ODUP_SX 4*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 8*SIZE(ptrba), xvec0; EDUP_SX 8*SIZE(ptrbb), xvec2; ODUP_SX 8*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 12*SIZE(ptrba), xvec1; EDUP_SX 12*SIZE(ptrbb), xvec2; ODUP_SX 12*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15 +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15 SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $16*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -2106,32 +2086,32 @@ EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; LD_SX 4*SIZE(ptrba), xvec1; EDUP_SX 4*SIZE(ptrbb), xvec2; ODUP_SX 4*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec1, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec1, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec1, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec1, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec13 -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13 +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $8*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; .L222_loopE: @@ -2148,39 +2128,39 @@ EDUP_SX 0*SIZE(ptrbb), xvec2; ODUP_SX 0*SIZE(ptrbb), xvec3; SHUF_SX $0x4e, xvec2, xvec4; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; SHUF_SX $0x4e, xvec3, xvec5; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec13; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec12; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec13, xvec13; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec12, xvec12; ADDQ $4*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; .L223_loopE: #### Multiply Alpha #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; -MUL_SX xvec7, xvec13; -MUL_SX xvec7, xvec12; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec7, xvec12, xvec12; #### Writing back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 0*SIZE(C0, ldc, 1), xvec1; -LDH_SX 2*SIZE(C1, ldc, 1), xvec1; -LDL_SX 0*SIZE(C1), xvec2; -LDH_SX 2*SIZE(C0), xvec2; -LDL_SX 0*SIZE(C1, ldc, 1), xvec3; -LDH_SX 2*SIZE(C0, ldc, 1), xvec3; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; -ADD_SX xvec2, xvec13; -ADD_SX xvec3, xvec12; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 0*SIZE(C0, ldc, 1), xvec1, xvec1; +LDH_SX 2*SIZE(C1, ldc, 1), xvec1, xvec1; +LDL_SX 0*SIZE(C1), xvec2, xvec2; +LDH_SX 2*SIZE(C0), xvec2, xvec2; +LDL_SX 0*SIZE(C1, ldc, 1), xvec3, xvec3; +LDH_SX 2*SIZE(C0, ldc, 1), xvec3, xvec3; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; +ADD_SX xvec2, xvec13, xvec13; +ADD_SX xvec3, xvec12, xvec12; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); @@ -2242,35 +2222,35 @@ LD_SX 0*SIZE(ptrba), xvec0; EDUP_SX 0*SIZE(ptrbb), xvec4; ODUP_SX 0*SIZE(ptrbb), xvec5; SHUF_SX $0x44, xvec0, xvec1; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; SHUF_SX $0xee, xvec0, xvec2; EDUP_SX 4*SIZE(ptrbb), xvec6; ODUP_SX 4*SIZE(ptrbb), xvec7; -MUL_SX xvec2, xvec6; -ADD_SX xvec6, xvec15; -MUL_SX xvec2, xvec7; -ADD_SX xvec7, xvec14; +MUL_SX xvec2, xvec6, xvec6; +ADD_SX xvec6, xvec15, xvec15; +MUL_SX xvec2, xvec7, xvec7; +ADD_SX xvec7, xvec14, xvec14; LD_SX 4*SIZE(ptrba), xvec0; EDUP_SX 8*SIZE(ptrbb), xvec4; ODUP_SX 8*SIZE(ptrbb), xvec5; SHUF_SX $0x44, xvec0, xvec1; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; SHUF_SX $0xee, xvec0, xvec2; EDUP_SX 12*SIZE(ptrbb), xvec6; ODUP_SX 12*SIZE(ptrbb), xvec7; -MUL_SX xvec2, xvec6; -ADD_SX xvec6, xvec15; -MUL_SX xvec2, xvec7; -ADD_SX xvec7, xvec14; +MUL_SX xvec2, xvec6, xvec6; +ADD_SX xvec6, xvec15, xvec15; +MUL_SX xvec2, xvec7, xvec7; +ADD_SX xvec7, xvec14, xvec14; ADDQ $8*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; @@ -2290,18 +2270,18 @@ LD_SX 0*SIZE(ptrba), xvec0; EDUP_SX 0*SIZE(ptrbb), xvec4; ODUP_SX 0*SIZE(ptrbb), xvec5; SHUF_SX $0x44, xvec0, xvec1; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; SHUF_SX $0xee, xvec0, xvec2; EDUP_SX 4*SIZE(ptrbb), xvec6; ODUP_SX 4*SIZE(ptrbb), xvec7; -MUL_SX xvec2, xvec6; -ADD_SX xvec6, xvec15; -MUL_SX xvec2, xvec7; -ADD_SX xvec7, xvec14; +MUL_SX xvec2, xvec6, xvec6; +ADD_SX xvec6, xvec15, xvec15; +MUL_SX xvec2, xvec7, xvec7; +ADD_SX xvec7, xvec14, xvec14; ADDQ $4*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2318,10 +2298,10 @@ LD_SX 0*SIZE(ptrba), xvec0; EDUP_SX 0*SIZE(ptrbb), xvec4; ODUP_SX 0*SIZE(ptrbb), xvec5; SHUF_SX $0x44, xvec0, xvec1; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec15; -MUL_SX xvec1, xvec5; -ADD_SX xvec5, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec15, xvec15; +MUL_SX xvec1, xvec5, xvec5; +ADD_SX xvec5, xvec14, xvec14; ADDQ $2*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -2392,23 +2372,23 @@ ALIGN_4 .L241_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; BROAD_SX 1*SIZE(ptrba), xvec2; LD_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec2, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec2, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; BROAD_SX 2*SIZE(ptrba), xvec4; LD_SX 8*SIZE(ptrbb), xvec5; -MUL_SX xvec4, xvec5; -ADD_SX xvec5, xvec15; +MUL_SX xvec4, xvec5, xvec5; +ADD_SX xvec5, xvec15, xvec15; BROAD_SX 3*SIZE(ptrba), xvec6; LD_SX 12*SIZE(ptrbb), xvec7; -MUL_SX xvec6, xvec7; -ADD_SX xvec7, xvec15; +MUL_SX xvec6, xvec7, xvec7; +ADD_SX xvec7, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $16*SIZE, ptrbb; DECQ k; @@ -2425,13 +2405,13 @@ ALIGN_4 .L242_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; BROAD_SX 1*SIZE(ptrba), xvec2; LD_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec2, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec2, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2446,14 +2426,14 @@ ALIGN_4; .L243_bodyB: BROAD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; ADDQ $1*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; .L243_loopE: #### Multiply Alpha #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; +MUL_SX xvec7, xvec15, xvec15; SHUF_SX $0xff, xvec15, xvec14; SHUF_SX $0xaa, xvec15, xvec13; SHUF_SX $0x55, xvec15, xvec12; @@ -2546,34 +2526,34 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; SHUF_SX $0xfa, xvec2, xvec3; LD_SX 8*SIZE(ptrba), xvec0; LD_SX 12*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; LD_SX 4*SIZE(ptrbb), xvec2; SHUF_SX $0x50, xvec2, xvec3; @@ -2581,34 +2561,34 @@ LD_SX 16*SIZE(ptrba), xvec0; LD_SX 20*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; SHUF_SX $0xfa, xvec2, xvec3; LD_SX 24*SIZE(ptrba), xvec0; LD_SX 28*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; ADDQ $32*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2630,34 +2610,34 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; SHUF_SX $0xfa, xvec2, xvec3; LD_SX 8*SIZE(ptrba), xvec0; LD_SX 12*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; ADDQ $16*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -2676,40 +2656,40 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrba), xvec1; MOV_SX xvec3, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; SHUF_SX $0x4e, xvec4, xvec5; -MUL_SX xvec1, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec1, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; MOV_SX xvec5, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec13; -MUL_SX xvec1, xvec6; -ADD_SX xvec6, xvec12; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec13, xvec13; +MUL_SX xvec1, xvec6, xvec6; +ADD_SX xvec6, xvec12, xvec12; ADDQ $8*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; .L313_loopE: BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; -MUL_SX xvec7, xvec13; -MUL_SX xvec7, xvec12; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; +MUL_SX xvec7, xvec13, xvec13; +MUL_SX xvec7, xvec12, xvec12; #### Writing Back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 4*SIZE(C0), xvec1; -LDH_SX 6*SIZE(C1), xvec1; -LDL_SX 0*SIZE(C1), xvec2; -LDH_SX 2*SIZE(C0), xvec2; -LDL_SX 4*SIZE(C1), xvec3; -LDH_SX 6*SIZE(C0), xvec3; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; -ADD_SX xvec2, xvec13; -ADD_SX xvec3, xvec12; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 4*SIZE(C0), xvec1, xvec1; +LDH_SX 6*SIZE(C1), xvec1, xvec1; +LDL_SX 0*SIZE(C1), xvec2, xvec2; +LDH_SX 2*SIZE(C0), xvec2, xvec2; +LDL_SX 4*SIZE(C1), xvec3, xvec3; +LDH_SX 6*SIZE(C0), xvec3, xvec3; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; +ADD_SX xvec2, xvec13, xvec13; +ADD_SX xvec3, xvec12, xvec12; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); @@ -2774,35 +2754,35 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x50, xvec2, xvec3; SHUF_SX $0x05, xvec2, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; LD_SX 4*SIZE(ptrba), xvec0; SHUF_SX $0xfa, xvec2, xvec5; SHUF_SX $0xaf, xvec2, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec15; -MUL_SX xvec0, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec15, xvec15; +MUL_SX xvec0, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; LD_SX 8*SIZE(ptrba), xvec0; LD_SX 4*SIZE(ptrbb), xvec2; SHUF_SX $0x50, xvec2, xvec3; SHUF_SX $0x05, xvec2, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; LD_SX 12*SIZE(ptrba), xvec0; SHUF_SX $0xfa, xvec2, xvec5; SHUF_SX $0xaf, xvec2, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec15; -MUL_SX xvec0, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec15, xvec15; +MUL_SX xvec0, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; ADDQ $16*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; @@ -2822,18 +2802,18 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x50, xvec2, xvec3; SHUF_SX $0x05, xvec2, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; LD_SX 4*SIZE(ptrba), xvec0; SHUF_SX $0xfa, xvec2, xvec5; SHUF_SX $0xaf, xvec2, xvec6; -MUL_SX xvec0, xvec5; -ADD_SX xvec5, xvec15; -MUL_SX xvec0, xvec6; -ADD_SX xvec6, xvec14; +MUL_SX xvec0, xvec5, xvec5; +ADD_SX xvec5, xvec15, xvec15; +MUL_SX xvec0, xvec6, xvec6; +ADD_SX xvec6, xvec14, xvec14; ADDQ $8*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -2850,25 +2830,25 @@ LD_SX 0*SIZE(ptrba), xvec0; LD_SX 0*SIZE(ptrbb), xvec2; SHUF_SX $0x50, xvec2, xvec3; SHUF_SX $0x05, xvec2, xvec4; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec15; -MUL_SX xvec0, xvec4; -ADD_SX xvec4, xvec14; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec15, xvec15; +MUL_SX xvec0, xvec4, xvec4; +ADD_SX xvec4, xvec14, xvec14; ADDQ $4*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; .L323_loopE: BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; #### Writing back #### #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C1), xvec0; -LDL_SX 0*SIZE(C1), xvec1; -LDH_SX 2*SIZE(C0), xvec1; -ADD_SX xvec0, xvec15; -ADD_SX xvec1, xvec14; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C1), xvec0, xvec0; +LDL_SX 0*SIZE(C1), xvec1, xvec1; +LDH_SX 2*SIZE(C0), xvec1, xvec1; +ADD_SX xvec0, xvec15, xvec15; +ADD_SX xvec1, xvec14, xvec14; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C1); @@ -2928,19 +2908,19 @@ LD_SX 0*SIZE(ptrba), xvec0; # a0, a1, a2, a3 EDUP_SX 0*SIZE(ptrbb), xvec2; # b0, b0, b2, b2 ODUP_SX 0*SIZE(ptrbb), xvec3; # b1, b1, b3, b3 -MUL_SX xvec0, xvec2; # c00, c10 -ADD_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; # C01, c11 -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; LD_SX 4*SIZE(ptrba), xvec0; EDUP_SX 4*SIZE(ptrbb), xvec2; ODUP_SX 4*SIZE(ptrbb), xvec3; -MUL_SX xvec0, xvec2; -ADD_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; ADDQ $8*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; DECQ k; @@ -2959,10 +2939,10 @@ LD_SX 0*SIZE(ptrba), xvec0; # a0, a1, a2, a3 EDUP_SX 0*SIZE(ptrbb), xvec2; # b0, b0, b2, b2 ODUP_SX 0*SIZE(ptrbb), xvec3; # b1, b1, b3, b3 -MUL_SX xvec0, xvec2; # c00, c10 -ADD_SX xvec2, xvec15; -MUL_SX xvec0, xvec3; # C01, c11 -ADD_SX xvec3, xvec14; +MUL_SX xvec0, xvec2, xvec2; +ADD_SX xvec2, xvec15, xvec15; +MUL_SX xvec0, xvec3, xvec3; +ADD_SX xvec3, xvec14, xvec14; ADDQ $4*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -2985,7 +2965,7 @@ mulss xvec0, xvec2; addss xvec2, xvec15; mulss xvec1, xvec3; SHUF_SX $0xe1, xvec3, xvec4; -ADD_SX xvec4, xvec15; +ADD_SX xvec4, xvec15, xvec15; movss 1*SIZE(ptrbb), xvec5; XOR_SY yvec6, yvec6, yvec6; @@ -2994,26 +2974,26 @@ mulss xvec0, xvec5; addss xvec5, xvec14; mulss xvec1, xvec6; SHUF_SX $0xe1, xvec6, xvec7; -ADD_SX xvec7, xvec14 +ADD_SX xvec7, xvec14, xvec14 ADDQ $2*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; .L333_loopE: BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; -MUL_SX xvec7, xvec14; +MUL_SX xvec7, xvec15, xvec15; +MUL_SX xvec7, xvec14, xvec14; SHUF_SX $0xee, xvec15, xvec13; SHUF_SX $0xee, xvec14, xvec12; SHUF_SX $0x44, xvec15, xvec11; SHUF_SX $0x44, xvec14, xvec10; -ADD_SX xvec13, xvec11; -ADD_SX xvec12, xvec10; +ADD_SX xvec13, xvec11, xvec11; +ADD_SX xvec12, xvec10, xvec10; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDL_SX 0*SIZE(C1), xvec1; -ADD_SX xvec0, xvec11; -ADD_SX xvec1, xvec10; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDL_SX 0*SIZE(C1), xvec1, xvec1; +ADD_SX xvec0, xvec11, xvec11; +ADD_SX xvec1, xvec10, xvec10; #endif STL_SX xvec11, 0*SIZE(C0); STL_SX xvec10, 0*SIZE(C1); @@ -3305,14 +3285,14 @@ SHUF_SX $0xee, xvec15, xvec12; SHUF_SX $0x44, xvec14, xvec11; SHUF_SX $0xee, xvec14, xvec10; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDL_SX 2*SIZE(C0), xvec1; -LDL_SX 4*SIZE(C0), xvec2; -LDL_SX 6*SIZE(C0), xvec3; -ADD_SX xvec0, xvec13; -ADD_SX xvec1, xvec12; -ADD_SX xvec2, xvec11; -ADD_SX xvec3, xvec10; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDL_SX 2*SIZE(C0), xvec1, xvec1; +LDL_SX 4*SIZE(C0), xvec2, xvec2; +LDL_SX 6*SIZE(C0), xvec3, xvec3; +ADD_SX xvec0, xvec13, xvec13; +ADD_SX xvec1, xvec12, xvec12; +ADD_SX xvec2, xvec11, xvec11; +ADD_SX xvec3, xvec10, xvec10; #endif STL_SX xvec13, 0*SIZE(C0); STL_SX xvec12, 2*SIZE(C0); @@ -3368,23 +3348,23 @@ ALIGN_4 .L421_bodyB: LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; LD_SX 4*SIZE(ptrba), xvec0; BROAD_SX 1*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; LD_SX 8*SIZE(ptrba), xvec0; BROAD_SX 2*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; LD_SX 12*SIZE(ptrba), xvec0; BROAD_SX 3*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; ADDQ $16*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; DECQ k; @@ -3401,13 +3381,13 @@ ALIGN_4 .L422_bodyB: LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; LD_SX 4*SIZE(ptrba), xvec0; BROAD_SX 1*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; @@ -3422,19 +3402,19 @@ ALIGN_4 .L423_bodyB: LD_SX 0*SIZE(ptrba), xvec0; BROAD_SX 0*SIZE(ptrbb), xvec1; -MUL_SX xvec0, xvec1; -ADD_SX xvec1, xvec15; +MUL_SX xvec0, xvec1, xvec1; +ADD_SX xvec1, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $1*SIZE, ptrbb; .L423_loopE: #### Writing back #### BROAD_SX MEMALPHA, xvec7; -MUL_SX xvec7, xvec15; +MUL_SX xvec7, xvec15, xvec15; #ifndef TRMMKERNEL -LDL_SX 0*SIZE(C0), xvec0; -LDH_SX 2*SIZE(C0), xvec0; -ADD_SX xvec0, xvec15; +LDL_SX 0*SIZE(C0), xvec0, xvec0; +LDH_SX 2*SIZE(C0), xvec0, xvec0; +ADD_SX xvec0, xvec15, xvec15; #endif STL_SX xvec15, 0*SIZE(C0); STH_SX xvec15, 2*SIZE(C0); @@ -3485,37 +3465,37 @@ SARQ $2, k; JLE .L431_loopE; ALIGN_4 .L431_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 1*SIZE(ptrba), xvec1; -movss 0*SIZE(ptrbb), xvec2; -mulss xvec2, xvec0; -addss xvec0, xvec15; -mulss xvec2, xvec1; -addss xvec1, xvec14; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 1*SIZE(ptrba), xvec1; +vmovss 0*SIZE(ptrbb), xvec2; +vmulss xvec2, xvec0, xvec0; +vaddss xvec0, xvec15, xvec15; +vmulss xvec2, xvec1, xvec1; +vaddss xvec1, xvec14, xvec14; -movss 2*SIZE(ptrba), xvec3; -movss 3*SIZE(ptrba), xvec4; -movss 1*SIZE(ptrbb), xvec5; -mulss xvec5, xvec3; -addss xvec3, xvec15; -mulss xvec5, xvec4; -addss xvec4, xvec14; +vmovss 2*SIZE(ptrba), xvec3; +vmovss 3*SIZE(ptrba), xvec4; +vmovss 1*SIZE(ptrbb), xvec5; +vmulss xvec5, xvec3, xvec3; +vaddss xvec3, xvec15, xvec15; +vmulss xvec5, xvec4, xvec4; +vaddss xvec4, xvec14, xvec14; -movss 4*SIZE(ptrba), xvec0; -movss 5*SIZE(ptrba), xvec1; -movss 2*SIZE(ptrbb), xvec2; -mulss xvec2, xvec0; -addss xvec0, xvec15; -mulss xvec2, xvec1; -addss xvec1, xvec14; +vmovss 4*SIZE(ptrba), xvec0; +vmovss 5*SIZE(ptrba), xvec1; +vmovss 2*SIZE(ptrbb), xvec2; +vmulss xvec2, xvec0, xvec0; +vaddss xvec0, xvec15, xvec15; +vmulss xvec2, xvec1, xvec1; +vaddss xvec1, xvec14, xvec14; -movss 6*SIZE(ptrba), xvec3; -movss 7*SIZE(ptrba), xvec4; -movss 3*SIZE(ptrbb), xvec5; -mulss xvec5, xvec3; -addss xvec3, xvec15; -mulss xvec5, xvec4; -addss xvec4, xvec14; +vmovss 6*SIZE(ptrba), xvec3; +vmovss 7*SIZE(ptrba), xvec4; +vmovss 3*SIZE(ptrbb), xvec5; +vmulss xvec5, xvec3, xvec3; +vaddss xvec3, xvec15, xvec15; +vmulss xvec5, xvec4, xvec4; +vaddss xvec4, xvec14, xvec14; addq $8*SIZE, ptrba; addq $4*SIZE, ptrbb; decq k; @@ -3530,21 +3510,21 @@ TEST $2, kkk; JLE .L432_loopE; ALIGN_4 .L432_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 1*SIZE(ptrba), xvec1; -movss 0*SIZE(ptrbb), xvec2; -mulss xvec2, xvec0; -addss xvec0, xvec15; -mulss xvec2, xvec1; -addss xvec1, xvec14; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 1*SIZE(ptrba), xvec1; +vmovss 0*SIZE(ptrbb), xvec2; +vmulss xvec2, xvec0, xvec0; +vaddss xvec0, xvec15, xvec15; +vmulss xvec2, xvec1, xvec1; +vaddss xvec1, xvec14, xvec14; -movss 2*SIZE(ptrba), xvec3; -movss 3*SIZE(ptrba), xvec4; -movss 1*SIZE(ptrbb), xvec5; -mulss xvec5, xvec3; -addss xvec3, xvec15; -mulss xvec5, xvec4; -addss xvec4, xvec14; +vmovss 2*SIZE(ptrba), xvec3; +vmovss 3*SIZE(ptrba), xvec4; +vmovss 1*SIZE(ptrbb), xvec5; +vmulss xvec5, xvec3, xvec3; +vaddss xvec3, xvec15, xvec15; +vmulss xvec5, xvec4, xvec4; +vaddss xvec4, xvec14, xvec14; addq $4*SIZE, ptrba; addq $2*SIZE, ptrbb; @@ -3557,28 +3537,28 @@ TEST $1, kkk; JLE .L433_loopE; ALIGN_4 .L433_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 1*SIZE(ptrba), xvec1; -movss 0*SIZE(ptrbb), xvec2; -mulss xvec2, xvec0; -addss xvec0, xvec15; -mulss xvec2, xvec1; -addss xvec1, xvec14; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 1*SIZE(ptrba), xvec1; +vmovss 0*SIZE(ptrbb), xvec2; +vmulss xvec2, xvec0, xvec0; +vaddss xvec0, xvec15, xvec15; +vmulss xvec2, xvec1, xvec1; +vaddss xvec1, xvec14, xvec14; addq $2*SIZE, ptrba; addq $1*SIZE, ptrbb; .L433_loopE: #### Writing Back #### -movss MEMALPHA, xvec7; -mulss xvec7, xvec15; -mulss xvec7, xvec14; +vmovss MEMALPHA, xvec7; +vmulss xvec7, xvec15, xvec15; +vmulss xvec7, xvec14, xvec14; #ifndef TRMMKERNEL -addss 0*SIZE(C0), xvec15; -addss 1*SIZE(C0), xvec14; +vaddss 0*SIZE(C0), xvec15, xvec15; +vaddss 1*SIZE(C0), xvec14, xvec14; #endif -movss xvec15, 0*SIZE(C0); -movss xvec14, 1*SIZE(C0); +vmovss xvec15, 0*SIZE(C0); +vmovss xvec14, 1*SIZE(C0); #if (defined(TRMMKERNEL) && defined(LEFT) && defined(TRANSA)) ||(defined(TRMMKERNEL) && !defined(LEFT) && !defined(TRANSA)) MOVQ bk, %rax; SUBQ kkk, %rax; @@ -3625,25 +3605,25 @@ SARQ $2, k; JLE .L441_loopE; ALIGN_4 .L441_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 0*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 0*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; -movss 1*SIZE(ptrba), xvec0; -movss 1*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 1*SIZE(ptrba), xvec0; +vmovss 1*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; -movss 2*SIZE(ptrba), xvec0; -movss 2*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 2*SIZE(ptrba), xvec0; +vmovss 2*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; -movss 3*SIZE(ptrba), xvec0; -movss 3*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 3*SIZE(ptrba), xvec0; +vmovss 3*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; addq $4*SIZE, ptrba; addq $4*SIZE, ptrbb; decq k; @@ -3658,15 +3638,15 @@ TEST $2, kkk; JLE .L442_loopE; ALIGN_4 .L442_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 0*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 0*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; -movss 1*SIZE(ptrba), xvec0; -movss 1*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 1*SIZE(ptrba), xvec0; +vmovss 1*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; addq $2*SIZE, ptrba; addq $2*SIZE, ptrbb; @@ -3679,21 +3659,21 @@ TEST $1, kkk; JLE .L443_loopE; ALIGN_4 .L443_bodyB: -movss 0*SIZE(ptrba), xvec0; -movss 0*SIZE(ptrbb), xvec1; -mulss xvec0, xvec1; -addss xvec1, xvec15; +vmovss 0*SIZE(ptrba), xvec0; +vmovss 0*SIZE(ptrbb), xvec1; +vmulss xvec0, xvec1, xvec1; +vaddss xvec1, xvec15, xvec15; addq $1*SIZE, ptrba; addq $1*SIZE, ptrbb; .L443_loopE: #### Writing Back #### -movss MEMALPHA, xvec7; -mulss xvec7, xvec15; +vmovss MEMALPHA, xvec7; +vmulss xvec7, xvec15, xvec15; #ifndef TRMMKERNEL -addss 0*SIZE(C0), xvec15; +vaddss 0*SIZE(C0), xvec15, xvec15; #endif -movss xvec15, 0*SIZE(C0); +vmovss xvec15, 0*SIZE(C0); #if (defined(TRMMKERNEL) && defined(LEFT) && defined(TRANSA)) ||(defined(TRMMKERNEL) && !defined(LEFT) && !defined(TRANSA)) MOVQ bk, %rax; SUBQ kkk, %rax; @@ -3711,6 +3691,7 @@ MOV bk, k; SALQ $2, k; ADDQ k, bb; ADDQ ldc, C; + .L40_loopE: movq 0(%rsp), %rbx; movq 8(%rsp), %rbp; @@ -3718,6 +3699,9 @@ movq 16(%rsp), %r12; movq 24(%rsp), %r13; movq 32(%rsp), %r14; movq 40(%rsp), %r15; + +vzeroupper + #ifdef WINDOWS_ABI movq 48(%rsp), %rdi movq 56(%rsp), %rsi @@ -3732,6 +3716,7 @@ movq 40(%rsp), %r15; movups 192(%rsp), %xmm14 movups 208(%rsp), %xmm15 #endif + addq $STACKSIZE, %rsp; ret diff --git a/kernel/x86_64/zgemm_kernel_4x4_sandy.S b/kernel/x86_64/zgemm_kernel_4x4_sandy.S index f6f9f707f..9f6fb8a5f 100644 --- a/kernel/x86_64/zgemm_kernel_4x4_sandy.S +++ b/kernel/x86_64/zgemm_kernel_4x4_sandy.S @@ -148,74 +148,49 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #undef MOVQ #define MOVQ movq -#define XOR_SY vxorps #define XOR_DY vxorpd -#define XOR_SX xorps -#define XOR_DX xorpd +#define XOR_DX vxorpd -#define LD_SY vmovaps #define LD_DY vmovapd -#define LD_SX movaps -#define LD_DX movapd +#define LD_DX vmovapd #define LDL_DY vmovlpd -#define LDL_DX movlpd +#define LDL_DX vmovlpd #define LDH_DY vmovhpd -#define LDH_DX movhpd +#define LDH_DX vmovhpd -#define ST_SY vmovaps #define ST_DY vmovapd -#define ST_SX movaps -#define ST_DX movapd +#define ST_DX vmovapd #define STL_DY vmovlpd -#define STL_DX movlpd +#define STL_DX vmovlpd #define STH_DY vmovhpd -#define STH_DX movhpd +#define STH_DX vmovhpd -#define EDUP_SY vmovsldup -#define ODUP_SY vmovshdup -#define EDUP_SX movsldup -#define ODUP_SX movshdup #define EDUP_DY vmovddup -#define ADD_SY vaddps #define ADD_DY vaddpd -#define ADD_SX addps -#define ADD_DX addpd +#define ADD_DX vaddpd #define SUB_DY vsubpd -#define SUB_DX subpd +#define SUB_DX vsubpd #define ADDSUB_DY vaddsubpd -#define ADDSUB_DX addsubpd -#define ADDSUB_SY vaddsubps +#define ADDSUB_DX vaddsubpd -#define MUL_SY vmulps #define MUL_DY vmulpd -#define MUL_SX mulps -#define MUL_DX mulpd +#define MUL_DX vmulpd -#define SHUF_SY vperm2f128 #define SHUF_DY vperm2f128 -#define SHUF_DX pshufd -#define SHUF_SX pshufd +#define SHUF_DX vpshufd -#define VPERMILP_SY vpermilps -#define VPERMILP_SX vpermilps #define VPERMILP_DY vpermilpd -#define BROAD_SY vbroadcastss #define BROAD_DY vbroadcastsd -#define BROAD_SX vbroadcastss -#define BROAD_DX movddup +#define BROAD_DX vmovddup -#define MOV_SY vmovaps #define MOV_DY vmovapd -#define MOV_SX movaps -#define MOV_DX movapd +#define MOV_DX vmovapd -#define REVS_SY vshufps #define REVS_DY vshufpd -#define REVS_SX shufps -#define REVS_DX movsd +#define REVS_DX vmovsd #define EXTRA_DY vextractf128 @@ -282,6 +257,8 @@ movq old_offset, %r11; #endif #endif +vzeroupper + vmovlps %xmm0, MEMALPHA_R vmovlps %xmm1, MEMALPHA_I movq old_bm, bm @@ -1373,14 +1350,14 @@ EXTRA_DY $1, yvec14, xvec6; EXTRA_DY $1, yvec13, xvec5; EXTRA_DY $1, yvec12, xvec4; #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0), xvec15; -ADD_DX 2*SIZE(C0, ldc, 1), xvec7; -ADD_DX 0*SIZE(C0, ldc, 1), xvec13; -ADD_DX 2*SIZE(C0), xvec5; -ADD_DX 0*SIZE(C1), xvec14; -ADD_DX 2*SIZE(C1, ldc, 1), xvec6; -ADD_DX 0*SIZE(C1, ldc, 1), xvec12; -ADD_DX 2*SIZE(C1), xvec4; +ADD_DX 0*SIZE(C0), xvec15, xvec15; +ADD_DX 2*SIZE(C0, ldc, 1), xvec7, xvec7; +ADD_DX 0*SIZE(C0, ldc, 1), xvec13, xvec13; +ADD_DX 2*SIZE(C0), xvec5, xvec5; +ADD_DX 0*SIZE(C1), xvec14, xvec14; +ADD_DX 2*SIZE(C1, ldc, 1), xvec6, xvec6; +ADD_DX 0*SIZE(C1, ldc, 1), xvec12, xvec12; +ADD_DX 2*SIZE(C1), xvec4, xvec4; #endif ST_DX xvec15, 0*SIZE(C0); ST_DX xvec7, 2*SIZE(C0, ldc, 1); @@ -1410,18 +1387,18 @@ EXTRA_DY $1, yvec14, xvec6; EXTRA_DY $1, yvec13, xvec5; EXTRA_DY $2, yvec12, xvec4; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0, ldc, 1), xvec1; -LDH_DX 3*SIZE(C0, ldc, 1), xvec1; -LDL_DX 0*SIZE(C0, ldc, 1), xvec2; -LDH_DX 1*SIZE(C0, ldc, 1), xvec2; -LDL_DX 2*SIZE(C0), xvec3; -LDH_DX 3*SIZE(C0), xvec3; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; -ADD_DX xvec2, xvec13; -ADD_DX xvec3, xvec5; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0, ldc, 1), xvec1, xvec1; +LDH_DX 3*SIZE(C0, ldc, 1), xvec1, xvec1; +LDL_DX 0*SIZE(C0, ldc, 1), xvec2, xvec2; +LDH_DX 1*SIZE(C0, ldc, 1), xvec2, xvec2; +LDL_DX 2*SIZE(C0), xvec3, xvec3; +LDH_DX 3*SIZE(C0), xvec3, xvec3; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; +ADD_DX xvec2, xvec13, xvec13; +ADD_DX xvec3, xvec5, xvec5; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -1432,18 +1409,18 @@ STH_DX xvec13, 1*SIZE(C0, ldc, 1); STL_DX xvec6, 2*SIZE(C0); STH_DX xvec6, 3*SIZE(C0); #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C1), xvec0; -LDH_DX 1*SIZE(C1), xvec0; -LDL_DX 2*SIZE(C1, ldc, 1), xvec1; -LDH_DX 3*SIZE(C1, ldc, 1), xvec1; -LDL_DX 0*SIZE(C1, ldc, 1), xvec2; -LDH_DX 1*SIZE(C1, ldc, 1), xvec2; -LDL_DX 2*SIZE(C1), xvec3; -LDH_DX 3*SIZE(C1), xvec3; -ADD_DX xvec0, xvec14; -ADD_DX xvec1, xvec6; -ADD_DX xvec2, xvec12; -ADD_DX xvec3, xvec4; +LDL_DX 0*SIZE(C1), xvec0, xvec0; +LDH_DX 1*SIZE(C1), xvec0, xvec0; +LDL_DX 2*SIZE(C1, ldc, 1), xvec1, xvec1; +LDH_DX 3*SIZE(C1, ldc, 1), xvec1, xvec1; +LDL_DX 0*SIZE(C1, ldc, 1), xvec2, xvec2; +LDH_DX 1*SIZE(C1, ldc, 1), xvec2, xvec2; +LDL_DX 2*SIZE(C1), xvec3, xvec3; +LDH_DX 3*SIZE(C1), xvec3, xvec3; +ADD_DX xvec0, xvec14, xvec14; +ADD_DX xvec1, xvec6, xvec6; +ADD_DX xvec2, xvec12, xvec12; +ADD_DX xvec3, xvec4, xvec4; #endif STL_DX xvec14, 0*SIZE(C1); STH_DX xvec14, 1*SIZE(C1); @@ -1680,18 +1657,18 @@ ADD2_DY yvec4, yvec14, yvec14; EXTRA_DY $1, yvec15, xvec7; EXTRA_DY $1, yvec14, xvec6; #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 0*SIZE(C0, ldc, 1), xvec1; -LDH_DX 1*SIZE(C0, ldc, 1), xvec1; -LDL_DX 0*SIZE(C1), xvec2; -LDH_DX 1*SIZE(C1), xvec2; -LDL_DX 0*SIZE(C1, ldc, 1), xvec3; -LDH_DX 1*SIZE(C1, ldc, 1), xvec3; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; -ADD_DX xvec2, xvec14; -ADD_DX xvec3, xvec6; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 0*SIZE(C0, ldc, 1), xvec1, xvec1; +LDH_DX 1*SIZE(C0, ldc, 1), xvec1, xvec1; +LDL_DX 0*SIZE(C1), xvec2, xvec2; +LDH_DX 1*SIZE(C1), xvec2, xvec2; +LDL_DX 0*SIZE(C1, ldc, 1), xvec3, xvec3; +LDH_DX 1*SIZE(C1, ldc, 1), xvec3, xvec3; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; +ADD_DX xvec2, xvec14, xvec14; +ADD_DX xvec3, xvec6, xvec6; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2063,14 +2040,14 @@ JNE .L213_loopEx; ALIGN_5 #### Writing back #### #ifndef TRMMKERNEL -ADD_DX 0*SIZE(C0),xvec15; -ADD_DX 2*SIZE(C1),xvec7; -ADD_DX 4*SIZE(C0),xvec14; -ADD_DX 6*SIZE(C1),xvec6; -ADD_DX 0*SIZE(C1),xvec13; -ADD_DX 2*SIZE(C0),xvec5; -ADD_DX 4*SIZE(C1),xvec12; -ADD_DX 6*SIZE(C0),xvec4; +ADD_DX 0*SIZE(C0), xvec15, xvec15; +ADD_DX 2*SIZE(C1), xvec7, xvec7; +ADD_DX 4*SIZE(C0), xvec14, xvec14; +ADD_DX 6*SIZE(C1), xvec6, xvec6; +ADD_DX 0*SIZE(C1), xvec13, xvec13; +ADD_DX 2*SIZE(C0), xvec5, xvec5; +ADD_DX 4*SIZE(C1), xvec12, xvec12; +ADD_DX 6*SIZE(C0), xvec4, xvec4; #endif ST_DX xvec15,0*SIZE(C0); ST_DX xvec7,2*SIZE(C1); @@ -2098,18 +2075,18 @@ JMP .L21_loopE; ALIGN_5 .L213_loopEx: #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C1), xvec1; -LDH_DX 3*SIZE(C1), xvec1; -LDL_DX 4*SIZE(C0), xvec2; -LDH_DX 5*SIZE(C0), xvec2; -LDL_DX 6*SIZE(C1), xvec3; -LDH_DX 7*SIZE(C1), xvec3; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; -ADD_DX xvec2, xvec14; -ADD_DX xvec3, xvec6; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C1), xvec1, xvec1; +LDH_DX 3*SIZE(C1), xvec1, xvec1; +LDL_DX 4*SIZE(C0), xvec2, xvec2; +LDH_DX 5*SIZE(C0), xvec2, xvec2; +LDL_DX 6*SIZE(C1), xvec3, xvec3; +LDH_DX 7*SIZE(C1), xvec3, xvec3; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; +ADD_DX xvec2, xvec14, xvec14; +ADD_DX xvec3, xvec6, xvec6; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2120,18 +2097,18 @@ STH_DX xvec14, 5*SIZE(C0); STL_DX xvec6, 6*SIZE(C1); STH_DX xvec6, 7*SIZE(C1); #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C1), xvec3; -LDH_DX 1*SIZE(C1), xvec3; -LDL_DX 2*SIZE(C0), xvec2; -LDH_DX 3*SIZE(C0), xvec2; -LDL_DX 4*SIZE(C1), xvec1; -LDH_DX 5*SIZE(C1), xvec1; -LDL_DX 6*SIZE(C0), xvec0; -LDH_DX 7*SIZE(C0), xvec0; -ADD_DX xvec3, xvec13; -ADD_DX xvec2, xvec5; -ADD_DX xvec1, xvec12; -ADD_DX xvec0, xvec4; +LDL_DX 0*SIZE(C1), xvec3, xvec3; +LDH_DX 1*SIZE(C1), xvec3, xvec3; +LDL_DX 2*SIZE(C0), xvec2, xvec2; +LDH_DX 3*SIZE(C0), xvec2, xvec2; +LDL_DX 4*SIZE(C1), xvec1, xvec1; +LDH_DX 5*SIZE(C1), xvec1, xvec1; +LDL_DX 6*SIZE(C0), xvec0, xvec0; +LDH_DX 7*SIZE(C0), xvec0, xvec0; +ADD_DX xvec3, xvec13, xvec13; +ADD_DX xvec2, xvec5, xvec5; +ADD_DX xvec1, xvec12, xvec12; +ADD_DX xvec0, xvec4, xvec4; #endif STL_DX xvec13, 0*SIZE(C1); STH_DX xvec13, 1*SIZE(C1); @@ -2384,18 +2361,18 @@ EXTRA_DY $1, yvec15, xvec7; EXTRA_DY $1, yvec13, xvec5; #### Write back #### #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C1), xvec1; -LDH_DX 3*SIZE(C1), xvec1; -LDL_DX 0*SIZE(C1), xvec2; -LDH_DX 1*SIZE(C1), xvec2; -LDL_DX 2*SIZE(C0), xvec3; -LDH_DX 3*SIZE(C0), xvec3; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; -ADD_DX xvec2, xvec13; -ADD_DX xvec3, xvec5; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C1), xvec1, xvec1; +LDH_DX 3*SIZE(C1), xvec1, xvec1; +LDL_DX 0*SIZE(C1), xvec2, xvec2; +LDH_DX 1*SIZE(C1), xvec2, xvec2; +LDL_DX 2*SIZE(C0), xvec3, xvec3; +LDH_DX 3*SIZE(C0), xvec3, xvec3; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; +ADD_DX xvec2, xvec13, xvec13; +ADD_DX xvec3, xvec5, xvec5; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2582,12 +2559,12 @@ ADD2_DY yvec5, yvec15, yvec15; EXTRA_DY $1, yvec15, xvec7; #### Writing Back #### #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 0*SIZE(C1), xvec1; -LDH_DX 1*SIZE(C1), xvec1; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 0*SIZE(C1), xvec1, xvec1; +LDH_DX 1*SIZE(C1), xvec1, xvec1; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -2845,18 +2822,18 @@ EXTRA_DY $1, yvec15, xvec7; EXTRA_DY $1, yvec14, xvec6; #### Writing Back #### #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0), xvec1; -LDH_DX 3*SIZE(C0), xvec1; -LDL_DX 4*SIZE(C0), xvec2; -LDH_DX 5*SIZE(C0), xvec2; -LDL_DX 6*SIZE(C0), xvec3; -LDH_DX 7*SIZE(C0), xvec3; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; -ADD_DX xvec2, xvec14; -ADD_DX xvec3, xvec6; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0), xvec1, xvec1; +LDH_DX 3*SIZE(C0), xvec1, xvec1; +LDL_DX 4*SIZE(C0), xvec2, xvec2; +LDH_DX 5*SIZE(C0), xvec2, xvec2; +LDL_DX 6*SIZE(C0), xvec3, xvec3; +LDH_DX 7*SIZE(C0), xvec3, xvec3; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; +ADD_DX xvec2, xvec14, xvec14; +ADD_DX xvec3, xvec6, xvec6; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -3026,12 +3003,12 @@ ADD2_DY yvec5, yvec15, yvec15; EXTRA_DY $1, yvec15, xvec7; #### Writing Back #### #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -LDL_DX 2*SIZE(C0), xvec1; -LDH_DX 3*SIZE(C0), xvec1; -ADD_DX xvec0, xvec15; -ADD_DX xvec1, xvec7; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +LDL_DX 2*SIZE(C0), xvec1, xvec1; +LDH_DX 3*SIZE(C0), xvec1, xvec1; +ADD_DX xvec0, xvec15, xvec15; +ADD_DX xvec1, xvec7, xvec7; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -3084,43 +3061,43 @@ ALIGN_5 .L331_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 1*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec0; BROAD_DX 2*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 3*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; LD_DX 4*SIZE(ptrba), xvec0; BROAD_DX 4*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 5*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; LD_DX 6*SIZE(ptrba), xvec0; BROAD_DX 6*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 7*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; ADDQ $8*SIZE, ptrba; ADDQ $8*SIZE, ptrbb; DECQ k; @@ -3137,23 +3114,23 @@ ALIGN_5 .L332_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 1*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; LD_DX 2*SIZE(ptrba), xvec0; BROAD_DX 2*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 3*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; ADDQ $4*SIZE, ptrba; ADDQ $4*SIZE, ptrbb; @@ -3168,13 +3145,13 @@ ALIGN_5 .L333_bodyB: LD_DX 0*SIZE(ptrba), xvec0; BROAD_DX 0*SIZE(ptrbb), xvec2; -MUL_DX xvec0, xvec2; -ADD1_DX xvec2, xvec15; +MUL_DX xvec0, xvec2, xvec2; +ADD1_DX xvec2, xvec15, xvec15; SHUF_DX $0x4e, xvec0, xvec1; BROAD_DX 1*SIZE(ptrbb), xvec3; -MUL_DX xvec1, xvec3; -ADDSUB_DX xvec3, xvec15; +MUL_DX xvec1, xvec3, xvec3; +ADDSUB_DX xvec3, xvec15, xvec15; ADDQ $2*SIZE, ptrba; ADDQ $2*SIZE, ptrbb; @@ -3182,14 +3159,14 @@ ADDQ $2*SIZE, ptrbb; #### Handle #### XOR_DY yvec7, yvec7, yvec7; #if defined(RN) || defined(RT) || defined(CN) || defined(CT) -ADDSUB_DX xvec15, xvec7; +ADDSUB_DX xvec15, xvec7, xvec7; MOV_DX xvec7, xvec15; #elif defined(NR) || defined(NC) || defined(TR) || defined(TC) -SUB_DX xvec15, xvec7; +SUB_DX xvec15, xvec7, xvec7; MOV_DX xvec7, xvec15; #elif defined(RR) || defined(RC) || defined(CR) || defined(CC) SHUF_DX $0x4e, xvec15, xvec15; -ADDSUB_DX xvec15, xvec7; +ADDSUB_DX xvec15, xvec7, xvec7; MOV_DX xvec7, xvec15; SHUF_DX $0x4e, xvec15, xvec15; #endif @@ -3199,14 +3176,14 @@ BROAD_DX MEMALPHA_R,xvec7; BROAD_DX MEMALPHA_I,xvec6; #### Multiply Alpha #### SHUF_DX $0x4e, xvec15, xvec5; -MUL_DX xvec7, xvec15; -MUL_DX xvec6, xvec5; -ADDSUB_DX xvec5, xvec15; +MUL_DX xvec7, xvec15, xvec15; +MUL_DX xvec6, xvec5, xvec5; +ADDSUB_DX xvec5, xvec15, xvec15; #### Writing back #### #ifndef TRMMKERNEL -LDL_DX 0*SIZE(C0), xvec0; -LDH_DX 1*SIZE(C0), xvec0; -ADD_DX xvec0, xvec15; +LDL_DX 0*SIZE(C0), xvec0, xvec0; +LDH_DX 1*SIZE(C0), xvec0, xvec0; +ADD_DX xvec0, xvec15, xvec15; #endif STL_DX xvec15, 0*SIZE(C0); STH_DX xvec15, 1*SIZE(C0); @@ -3237,6 +3214,9 @@ movq 24(%rsp), %r13; movq 32(%rsp), %r14; movq 40(%rsp), %r15; + +vzeroupper + #ifdef WINDOWS_ABI movq 48(%rsp), %rdi movq 56(%rsp), %rsi