Merge tag '4.16-minor-rc-SMB3-fixes' of git://git.samba.org/sfrench/cifs-2.6
[sfrench/cifs-2.6.git] / arch / mips / include / asm / msa.h
index b1845102f8f9d28f7ae424f9b10904a7eef9b13f..b4f9577ed96a66656d5a940a8e7656811573c2c5 100644 (file)
@@ -160,7 +160,23 @@ static inline void init_msa_upper(void)
        _init_msa_upper();
 }
 
-#ifdef TOOLCHAIN_SUPPORTS_MSA
+#ifndef TOOLCHAIN_SUPPORTS_MSA
+/*
+ * Define assembler macros using .word for the c[ft]cmsa instructions in order
+ * to allow compilation with toolchains that do not support MSA. Once all
+ * toolchains in use support MSA these can be removed.
+ */
+_ASM_MACRO_2R(cfcmsa, rd, cs,
+       _ASM_INSN_IF_MIPS(0x787e0019 | __cs << 11 | __rd << 6)
+       _ASM_INSN32_IF_MM(0x587e0016 | __cs << 11 | __rd << 6));
+_ASM_MACRO_2R(ctcmsa, cd, rs,
+       _ASM_INSN_IF_MIPS(0x783e0019 | __rs << 11 | __cd << 6)
+       _ASM_INSN32_IF_MM(0x583e0016 | __rs << 11 | __cd << 6));
+#define _ASM_SET_MSA ""
+#else /* TOOLCHAIN_SUPPORTS_MSA */
+#define _ASM_SET_MSA ".set\tfp=64\n\t"                         \
+                    ".set\tmsa\n\t"
+#endif
 
 #define __BUILD_MSA_CTL_REG(name, cs)                          \
 static inline unsigned int read_msa_##name(void)               \
@@ -168,8 +184,7 @@ static inline unsigned int read_msa_##name(void)            \
        unsigned int reg;                                       \
        __asm__ __volatile__(                                   \
        "       .set    push\n"                                 \
-       "       .set    fp=64\n"                                \
-       "       .set    msa\n"                                  \
+       _ASM_SET_MSA                                            \
        "       cfcmsa  %0, $" #cs "\n"                         \
        "       .set    pop\n"                                  \
        : "=r"(reg));                                           \
@@ -180,52 +195,12 @@ static inline void write_msa_##name(unsigned int val)             \
 {                                                              \
        __asm__ __volatile__(                                   \
        "       .set    push\n"                                 \
-       "       .set    fp=64\n"                                \
-       "       .set    msa\n"                                  \
+       _ASM_SET_MSA                                            \
        "       ctcmsa  $" #cs ", %0\n"                         \
        "       .set    pop\n"                                  \
        : : "r"(val));                                          \
 }
 
-#else /* !TOOLCHAIN_SUPPORTS_MSA */
-
-/*
- * Define functions using .word for the c[ft]cmsa instructions in order to
- * allow compilation with toolchains that do not support MSA. Once all
- * toolchains in use support MSA these can be removed.
- */
-
-#define __BUILD_MSA_CTL_REG(name, cs)                          \
-static inline unsigned int read_msa_##name(void)               \
-{                                                              \
-       unsigned int reg;                                       \
-       __asm__ __volatile__(                                   \
-       "       .set    push\n"                                 \
-       "       .set    noat\n"                                 \
-       "       # cfcmsa $1, $%1\n"                             \
-       _ASM_INSN_IF_MIPS(0x787e0059 | %1 << 11)                \
-       _ASM_INSN32_IF_MM(0x587e0056 | %1 << 11)                \
-       "       move    %0, $1\n"                               \
-       "       .set    pop\n"                                  \
-       : "=r"(reg) : "i"(cs));                                 \
-       return reg;                                             \
-}                                                              \
-                                                               \
-static inline void write_msa_##name(unsigned int val)          \
-{                                                              \
-       __asm__ __volatile__(                                   \
-       "       .set    push\n"                                 \
-       "       .set    noat\n"                                 \
-       "       move    $1, %0\n"                               \
-       "       # ctcmsa $%1, $1\n"                             \
-       _ASM_INSN_IF_MIPS(0x783e0819 | %1 << 6)                 \
-       _ASM_INSN32_IF_MM(0x583e0816 | %1 << 6)                 \
-       "       .set    pop\n"                                  \
-       : : "r"(val), "i"(cs));                                 \
-}
-
-#endif /* !TOOLCHAIN_SUPPORTS_MSA */
-
 __BUILD_MSA_CTL_REG(ir, 0)
 __BUILD_MSA_CTL_REG(csr, 1)
 __BUILD_MSA_CTL_REG(access, 2)