Optimise cswap for POWER9
authorMatt Brown <matthew.brown.dev@gmail.com>
Wed, 14 Jun 2017 06:36:10 +0000 (16:36 +1000)
committerMatt Brown <matthew.brown.dev@gmail.com>
Wed, 14 Jun 2017 06:59:53 +0000 (16:59 +1000)
Use lxvd2x instruction instead of lxvw4x.
lxvd2x performs far better on the new POWER architecture than lxvw4x.

kernel/power/cswap_microk_power8.c

index 1dd03dc88401552174af5d60f2f85bf227f68184..8d7d0c0b9f46e711eac976f20d7122eb1c006904 100644 (file)
@@ -42,91 +42,91 @@ static void cswap_kernel_32 (long n, float *x, float *y)
        ".p2align       5               \n"
      "1:                               \n\t"
 
-       "lxvw4x         32, 0, %4       \n\t"
-       "lxvw4x         33, %5, %4      \n\t"
-       "lxvw4x         34, %6, %4      \n\t"
-       "lxvw4x         35, %7, %4      \n\t"
-       "lxvw4x         36, %8, %4      \n\t"
-       "lxvw4x         37, %9, %4      \n\t"
-       "lxvw4x         38, %10, %4     \n\t"
-       "lxvw4x         39, %11, %4     \n\t"
+       "lxvd2x         32, 0, %4       \n\t"
+       "lxvd2x         33, %5, %4      \n\t"
+       "lxvd2x         34, %6, %4      \n\t"
+       "lxvd2x         35, %7, %4      \n\t"
+       "lxvd2x         36, %8, %4      \n\t"
+       "lxvd2x         37, %9, %4      \n\t"
+       "lxvd2x         38, %10, %4     \n\t"
+       "lxvd2x         39, %11, %4     \n\t"
 
        "addi           %4, %4, 128     \n\t"
 
-       "lxvw4x         40, 0, %4       \n\t"
-       "lxvw4x         41, %5, %4      \n\t"
-       "lxvw4x         42, %6, %4      \n\t"
-       "lxvw4x         43, %7, %4      \n\t"
-       "lxvw4x         44, %8, %4      \n\t"
-       "lxvw4x         45, %9, %4      \n\t"
-       "lxvw4x         46, %10, %4     \n\t"
-       "lxvw4x         47, %11, %4     \n\t"
+       "lxvd2x         40, 0, %4       \n\t"
+       "lxvd2x         41, %5, %4      \n\t"
+       "lxvd2x         42, %6, %4      \n\t"
+       "lxvd2x         43, %7, %4      \n\t"
+       "lxvd2x         44, %8, %4      \n\t"
+       "lxvd2x         45, %9, %4      \n\t"
+       "lxvd2x         46, %10, %4     \n\t"
+       "lxvd2x         47, %11, %4     \n\t"
 
        "addi           %4, %4, -128    \n\t"
 
-       "lxvw4x         48, 0, %3       \n\t"
-       "lxvw4x         49, %5, %3      \n\t"
-       "lxvw4x         50, %6, %3      \n\t"
-       "lxvw4x         51, %7, %3      \n\t"
-       "lxvw4x         0, %8, %3       \n\t"
-       "lxvw4x         1, %9, %3       \n\t"
-       "lxvw4x         2, %10, %3      \n\t"
-       "lxvw4x         3, %11, %3      \n\t"
+       "lxvd2x         48, 0, %3       \n\t"
+       "lxvd2x         49, %5, %3      \n\t"
+       "lxvd2x         50, %6, %3      \n\t"
+       "lxvd2x         51, %7, %3      \n\t"
+       "lxvd2x         0, %8, %3       \n\t"
+       "lxvd2x         1, %9, %3       \n\t"
+       "lxvd2x         2, %10, %3      \n\t"
+       "lxvd2x         3, %11, %3      \n\t"
 
        "addi           %3, %3, 128     \n\t"
 
-       "lxvw4x         4, 0, %3        \n\t"
-       "lxvw4x         5, %5, %3       \n\t"
-       "lxvw4x         6, %6, %3       \n\t"
-       "lxvw4x         7, %7, %3       \n\t"
-       "lxvw4x         8, %8, %3       \n\t"
-       "lxvw4x         9, %9, %3       \n\t"
-       "lxvw4x         10, %10, %3     \n\t"
-       "lxvw4x         11, %11, %3     \n\t"
+       "lxvd2x         4, 0, %3        \n\t"
+       "lxvd2x         5, %5, %3       \n\t"
+       "lxvd2x         6, %6, %3       \n\t"
+       "lxvd2x         7, %7, %3       \n\t"
+       "lxvd2x         8, %8, %3       \n\t"
+       "lxvd2x         9, %9, %3       \n\t"
+       "lxvd2x         10, %10, %3     \n\t"
+       "lxvd2x         11, %11, %3     \n\t"
 
        "addi           %3, %3, -128    \n\t"
 
-       "stxvw4x                32, 0, %3       \n\t"
-       "stxvw4x                33, %5, %3      \n\t"
-       "stxvw4x                34, %6, %3      \n\t"
-       "stxvw4x                35, %7, %3      \n\t"
-       "stxvw4x                36, %8, %3      \n\t"
-       "stxvw4x                37, %9, %3      \n\t"
-       "stxvw4x                38, %10, %3     \n\t"
-       "stxvw4x                39, %11, %3     \n\t"
+       "stxvd2x                32, 0, %3       \n\t"
+       "stxvd2x                33, %5, %3      \n\t"
+       "stxvd2x                34, %6, %3      \n\t"
+       "stxvd2x                35, %7, %3      \n\t"
+       "stxvd2x                36, %8, %3      \n\t"
+       "stxvd2x                37, %9, %3      \n\t"
+       "stxvd2x                38, %10, %3     \n\t"
+       "stxvd2x                39, %11, %3     \n\t"
 
        "addi           %3, %3, 128     \n\t"
 
-       "stxvw4x                40, 0, %3       \n\t"
-       "stxvw4x                41, %5, %3      \n\t"
-       "stxvw4x                42, %6, %3      \n\t"
-       "stxvw4x                43, %7, %3      \n\t"
-       "stxvw4x                44, %8, %3      \n\t"
-       "stxvw4x                45, %9, %3      \n\t"
-       "stxvw4x                46, %10, %3     \n\t"
-       "stxvw4x                47, %11, %3     \n\t"
+       "stxvd2x                40, 0, %3       \n\t"
+       "stxvd2x                41, %5, %3      \n\t"
+       "stxvd2x                42, %6, %3      \n\t"
+       "stxvd2x                43, %7, %3      \n\t"
+       "stxvd2x                44, %8, %3      \n\t"
+       "stxvd2x                45, %9, %3      \n\t"
+       "stxvd2x                46, %10, %3     \n\t"
+       "stxvd2x                47, %11, %3     \n\t"
 
        "addi           %3, %3, 128     \n\t"
 
-       "stxvw4x                48, 0, %4       \n\t"
-       "stxvw4x                49, %5, %4      \n\t"
-       "stxvw4x                50, %6, %4      \n\t"
-       "stxvw4x                51, %7, %4      \n\t"
-       "stxvw4x                0, %8, %4       \n\t"
-       "stxvw4x                1, %9, %4       \n\t"
-       "stxvw4x                2, %10, %4      \n\t"
-       "stxvw4x                3, %11, %4      \n\t"
+       "stxvd2x                48, 0, %4       \n\t"
+       "stxvd2x                49, %5, %4      \n\t"
+       "stxvd2x                50, %6, %4      \n\t"
+       "stxvd2x                51, %7, %4      \n\t"
+       "stxvd2x                0, %8, %4       \n\t"
+       "stxvd2x                1, %9, %4       \n\t"
+       "stxvd2x                2, %10, %4      \n\t"
+       "stxvd2x                3, %11, %4      \n\t"
 
        "addi           %4, %4, 128     \n\t"
 
-       "stxvw4x                4, 0, %4        \n\t"
-       "stxvw4x                5, %5, %4       \n\t"
-       "stxvw4x                6, %6, %4       \n\t"
-       "stxvw4x                7, %7, %4       \n\t"
-       "stxvw4x                8, %8, %4       \n\t"
-       "stxvw4x                9, %9, %4       \n\t"
-       "stxvw4x                10, %10, %4     \n\t"
-       "stxvw4x                11, %11, %4     \n\t"
+       "stxvd2x                4, 0, %4        \n\t"
+       "stxvd2x                5, %5, %4       \n\t"
+       "stxvd2x                6, %6, %4       \n\t"
+       "stxvd2x                7, %7, %4       \n\t"
+       "stxvd2x                8, %8, %4       \n\t"
+       "stxvd2x                9, %9, %4       \n\t"
+       "stxvd2x                10, %10, %4     \n\t"
+       "stxvd2x                11, %11, %4     \n\t"
 
        "addi           %4, %4, 128     \n\t"