Replace most vpermpd calls in the Haswell DTRSM_RN kernel
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Sat, 3 Aug 2019 10:40:13 +0000 (12:40 +0200)
committerGitHub <noreply@github.com>
Sat, 3 Aug 2019 10:40:13 +0000 (12:40 +0200)
kernel/x86_64/dtrsm_kernel_RN_haswell.c

index 9ab78fc..cb939e7 100644 (file)
@@ -132,7 +132,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "1:                                                                     \n\t"
 
        "       vmovups         (%8,%1,4), %%ymm4                               \n\t"   // read a
-        "       vpermpd         $0xb1  , %%ymm0 , %%ymm3                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm0 , %%ymm3                     \n\t"   // was vpermpd 0xb1
 
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm8                        \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm12                       \n\t"
@@ -143,7 +143,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
 
         "       vpermpd         $0x1b  , %%ymm3 , %%ymm0                       \n\t"
        "       vmovups       32(%9,%1,8), %%ymm6                               \n\t"   // read b1
-        "       vpermpd         $0xb1  , %%ymm0 , %%ymm3                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm0 , %%ymm3                     \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm10                       \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm14                       \n\t"
 
@@ -160,7 +160,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm8                        \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm12                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm4 , %%ymm4                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm4 , %%ymm4                     \n\t"
        "       vmovups         (%9,%1,8), %%ymm1                               \n\t"   // read b0
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm9                        \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm13                       \n\t"
@@ -170,7 +170,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm10                       \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm14                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm4 , %%ymm4                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm4 , %%ymm4                     \n\t"
        "       addq            $8, %1                                          \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm11                       \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm15                       \n\t"
@@ -185,7 +185,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm8                        \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm12                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm0 , %%ymm0                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm0 , %%ymm0                     \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm9                        \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm13                       \n\t"
 
@@ -193,7 +193,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm10                       \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm14                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm0 , %%ymm0                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm0 , %%ymm0                     \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm1 , %%ymm11                       \n\t"
        "       vfmadd231pd     %%ymm0 , %%ymm2 , %%ymm15                       \n\t"
 
@@ -204,7 +204,7 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm8                        \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm12                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm4 , %%ymm4                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm4 , %%ymm4                     \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm9                        \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm13                       \n\t"
 
@@ -212,42 +212,38 @@ static void dtrsm_RN_solve_opt(BLASLONG n, FLOAT *a, FLOAT *b, FLOAT *c, BLASLON
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm10                       \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm14                       \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm4 , %%ymm4                       \n\t"
+        "       vpermilpd         $0x05  , %%ymm4 , %%ymm4                     \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm5 , %%ymm11                       \n\t"
        "       vfmadd231pd     %%ymm4 , %%ymm6 , %%ymm15                       \n\t"
 
        "3:                                                             \n\t"   
 
-        "       vpermpd         $0xb1  , %%ymm9 , %%ymm9                \n\t"
-        "       vpermpd         $0xb1  , %%ymm11, %%ymm11               \n\t"
+        "       vpermilpd         $0x05  , %%ymm9 , %%ymm9                \n\t"
+        "       vpermilpd         $0x05  , %%ymm11, %%ymm11               \n\t"
 
         "       vblendpd        $0x0a  , %%ymm9 , %%ymm8 , %%ymm0       \n\t"
         "       vblendpd        $0x05  , %%ymm9 , %%ymm8 , %%ymm1       \n\t"
         "       vblendpd        $0x0a  , %%ymm11, %%ymm10, %%ymm2       \n\t"
         "       vblendpd        $0x05  , %%ymm11, %%ymm10, %%ymm3       \n\t"
 
-        "       vpermpd         $0x1b  , %%ymm2 , %%ymm2                \n\t"
-        "       vpermpd         $0x1b  , %%ymm3 , %%ymm3                \n\t"
-        "       vpermpd         $0xb1  , %%ymm2 , %%ymm2                \n\t"
-        "       vpermpd         $0xb1  , %%ymm3 , %%ymm3                \n\t"
+        "       vperm2f128         $0x01  , %%ymm2 , %%ymm2 , %%ymm2    \n\t"
+        "       vperm2f128         $0x01  , %%ymm3 , %%ymm3 , %%ymm3    \n\t"
 
         "       vblendpd        $0x03  , %%ymm0 , %%ymm2 , %%ymm8       \n\t"
         "       vblendpd        $0x03  , %%ymm1 , %%ymm3 , %%ymm9       \n\t"
         "       vblendpd        $0x03  , %%ymm2 , %%ymm0 , %%ymm10      \n\t"
         "       vblendpd        $0x03  , %%ymm3 , %%ymm1 , %%ymm11      \n\t"
 
-        "       vpermpd         $0xb1  , %%ymm13, %%ymm13               \n\t"
-        "       vpermpd         $0xb1  , %%ymm15, %%ymm15               \n\t"
+        "       vpermilpd         $0x05  , %%ymm13, %%ymm13               \n\t"
+        "       vpermilpd         $0x05  , %%ymm15, %%ymm15               \n\t"
 
         "       vblendpd        $0x0a  , %%ymm13, %%ymm12, %%ymm0       \n\t"
         "       vblendpd        $0x05  , %%ymm13, %%ymm12, %%ymm1       \n\t"
         "       vblendpd        $0x0a  , %%ymm15, %%ymm14, %%ymm2       \n\t"
         "       vblendpd        $0x05  , %%ymm15, %%ymm14, %%ymm3       \n\t"
 
-        "       vpermpd         $0x1b  , %%ymm2 , %%ymm2                \n\t"
-        "       vpermpd         $0x1b  , %%ymm3 , %%ymm3                \n\t"
-        "       vpermpd         $0xb1  , %%ymm2 , %%ymm2                \n\t"
-        "       vpermpd         $0xb1  , %%ymm3 , %%ymm3                \n\t"
+        "       vperm2f128         $0x01  , %%ymm2 , %%ymm2 , %%ymm2       \n\t"
+        "       vperm2f128         $0x01  , %%ymm3 , %%ymm3 , %%ymm3       \n\t"
 
         "       vblendpd        $0x03  , %%ymm0 , %%ymm2 , %%ymm12      \n\t"
         "       vblendpd        $0x03  , %%ymm1 , %%ymm3 , %%ymm13      \n\t"