powerpc/math-emu: Remove -w build flag and fix warnings
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Fri, 2 Sep 2022 16:00:09 +0000 (18:00 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 5 Sep 2022 07:28:25 +0000 (17:28 +1000)
As reported by Nathan, the module_init() macro was not taken into
account because the header was missing. That means spe_mathemu_init()
was never called.

This should have been detected by gcc at build time, but due to
'-w' flag it went undetected.

Removing that flag leads to many warnings hence errors.

Fix those warnings then remove the -w flag.

Reported-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/2663961738a46073713786d4efeb53100ca156e7.1662134272.git.christophe.leroy@csgroup.eu
arch/powerpc/math-emu/Makefile
arch/powerpc/math-emu/math.c
arch/powerpc/math-emu/math_efp.c
include/math-emu/op-common.h

index a879403..26fef2e 100644 (file)
@@ -16,5 +16,3 @@ obj-$(CONFIG_SPE)             += math_efp.o
 
 CFLAGS_fabs.o = -fno-builtin-fabs
 CFLAGS_math.o = -fno-builtin-fabs
-
-ccflags-y = -w
index 36761bd..936a9a1 100644 (file)
@@ -24,9 +24,9 @@ FLOATFUNC(mtfsf);
 FLOATFUNC(mtfsfi);
 
 #ifdef CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED
-#undef FLOATFUNC(x)
+#undef FLOATFUNC
 #define FLOATFUNC(x)   static inline int x(void *op1, void *op2, void *op3, \
-                                                void *op4) { }
+                                                void *op4) { return 0; }
 #endif
 
 FLOATFUNC(fadd);
@@ -396,28 +396,28 @@ do_mathemu(struct pt_regs *regs)
 
        case XCR:
                op0 = (void *)&regs->ccr;
-               op1 = (void *)((insn >> 23) & 0x7);
+               op1 = (void *)(long)((insn >> 23) & 0x7);
                op2 = (void *)&current->thread.TS_FPR((insn >> 16) & 0x1f);
                op3 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
                break;
 
        case XCRL:
                op0 = (void *)&regs->ccr;
-               op1 = (void *)((insn >> 23) & 0x7);
-               op2 = (void *)((insn >> 18) & 0x7);
+               op1 = (void *)(long)((insn >> 23) & 0x7);
+               op2 = (void *)(long)((insn >> 18) & 0x7);
                break;
 
        case XCRB:
-               op0 = (void *)((insn >> 21) & 0x1f);
+               op0 = (void *)(long)((insn >> 21) & 0x1f);
                break;
 
        case XCRI:
-               op0 = (void *)((insn >> 23) & 0x7);
-               op1 = (void *)((insn >> 12) & 0xf);
+               op0 = (void *)(long)((insn >> 23) & 0x7);
+               op1 = (void *)(long)((insn >> 12) & 0xf);
                break;
 
        case XFLB:
-               op0 = (void *)((insn >> 17) & 0xff);
+               op0 = (void *)(long)((insn >> 17) & 0xff);
                op1 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
                break;
 
index aa3bb8d..f01e347 100644 (file)
@@ -219,6 +219,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                case AB:
                case XCR:
                        FP_UNPACK_SP(SA, va.wp + 1);
+                       fallthrough;
                case XB:
                        FP_UNPACK_SP(SB, vb.wp + 1);
                        break;
@@ -227,8 +228,8 @@ int do_spe_mathemu(struct pt_regs *regs)
                        break;
                }
 
-               pr_debug("SA: %ld %08lx %ld (%ld)\n", SA_s, SA_f, SA_e, SA_c);
-               pr_debug("SB: %ld %08lx %ld (%ld)\n", SB_s, SB_f, SB_e, SB_c);
+               pr_debug("SA: %d %08x %d (%d)\n", SA_s, SA_f, SA_e, SA_c);
+               pr_debug("SB: %d %08x %d (%d)\n", SB_s, SB_f, SB_e, SB_c);
 
                switch (func) {
                case EFSABS:
@@ -279,7 +280,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                        } else {
                                SB_e += (func == EFSCTSF ? 31 : 32);
                                FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
-                                               (func == EFSCTSF));
+                                               (func == EFSCTSF) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -288,7 +289,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                        FP_CLEAR_EXCEPTIONS;
                        FP_UNPACK_DP(DB, vb.dp);
 
-                       pr_debug("DB: %ld %08lx %08lx %ld (%ld)\n",
+                       pr_debug("DB: %d %08x %08x %d (%d)\n",
                                        DB_s, DB_f1, DB_f0, DB_e, DB_c);
 
                        FP_CONV(S, D, 1, 2, SR, DB);
@@ -302,7 +303,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -313,7 +314,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_S(vc.wp[1], SB, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -323,7 +324,7 @@ int do_spe_mathemu(struct pt_regs *regs)
                break;
 
 pack_s:
-               pr_debug("SR: %ld %08lx %ld (%ld)\n", SR_s, SR_f, SR_e, SR_c);
+               pr_debug("SR: %d %08x %d (%d)\n", SR_s, SR_f, SR_e, SR_c);
 
                FP_PACK_SP(vc.wp + 1, SR);
                goto update_regs;
@@ -347,6 +348,7 @@ cmp_s:
                case AB:
                case XCR:
                        FP_UNPACK_DP(DA, va.dp);
+                       fallthrough;
                case XB:
                        FP_UNPACK_DP(DB, vb.dp);
                        break;
@@ -355,9 +357,9 @@ cmp_s:
                        break;
                }
 
-               pr_debug("DA: %ld %08lx %08lx %ld (%ld)\n",
+               pr_debug("DA: %d %08x %08x %d (%d)\n",
                                DA_s, DA_f1, DA_f0, DA_e, DA_c);
-               pr_debug("DB: %ld %08lx %08lx %ld (%ld)\n",
+               pr_debug("DB: %d %08x %08x %d (%d)\n",
                                DB_s, DB_f1, DB_f0, DB_e, DB_c);
 
                switch (func) {
@@ -409,7 +411,7 @@ cmp_s:
                        } else {
                                DB_e += (func == EFDCTSF ? 31 : 32);
                                FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
-                                               (func == EFDCTSF));
+                                               (func == EFDCTSF) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -418,7 +420,7 @@ cmp_s:
                        FP_CLEAR_EXCEPTIONS;
                        FP_UNPACK_SP(SB, vb.wp + 1);
 
-                       pr_debug("SB: %ld %08lx %ld (%ld)\n",
+                       pr_debug("SB: %d %08x %d (%d)\n",
                                        SB_s, SB_f, SB_e, SB_c);
 
                        FP_CONV(D, S, 2, 1, DR, SB);
@@ -432,7 +434,7 @@ cmp_s:
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_D(vc.dp[0], DB, 64,
-                                               ((func & 0x1) == 0));
+                                               ((func & 0x1) == 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -443,7 +445,7 @@ cmp_s:
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -454,7 +456,7 @@ cmp_s:
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_D(vc.wp[1], DB, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -464,7 +466,7 @@ cmp_s:
                break;
 
 pack_d:
-               pr_debug("DR: %ld %08lx %08lx %ld (%ld)\n",
+               pr_debug("DR: %d %08x %08x %d (%d)\n",
                                DR_s, DR_f1, DR_f0, DR_e, DR_c);
 
                FP_PACK_DP(vc.dp, DR);
@@ -493,6 +495,7 @@ cmp_d:
                case XCR:
                        FP_UNPACK_SP(SA0, va.wp);
                        FP_UNPACK_SP(SA1, va.wp + 1);
+                       fallthrough;
                case XB:
                        FP_UNPACK_SP(SB0, vb.wp);
                        FP_UNPACK_SP(SB1, vb.wp + 1);
@@ -503,13 +506,13 @@ cmp_d:
                        break;
                }
 
-               pr_debug("SA0: %ld %08lx %ld (%ld)\n",
+               pr_debug("SA0: %d %08x %d (%d)\n",
                                SA0_s, SA0_f, SA0_e, SA0_c);
-               pr_debug("SA1: %ld %08lx %ld (%ld)\n",
+               pr_debug("SA1: %d %08x %d (%d)\n",
                                SA1_s, SA1_f, SA1_e, SA1_c);
-               pr_debug("SB0: %ld %08lx %ld (%ld)\n",
+               pr_debug("SB0: %d %08x %d (%d)\n",
                                SB0_s, SB0_f, SB0_e, SB0_c);
-               pr_debug("SB1: %ld %08lx %ld (%ld)\n",
+               pr_debug("SB1: %d %08x %d (%d)\n",
                                SB1_s, SB1_f, SB1_e, SB1_c);
 
                switch (func) {
@@ -568,7 +571,7 @@ cmp_d:
                        } else {
                                SB0_e += (func == EVFSCTSF ? 31 : 32);
                                FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
-                                               (func == EVFSCTSF));
+                                               (func == EVFSCTSF) ? 1 : 0);
                        }
                        if (SB1_c == FP_CLS_NAN) {
                                vc.wp[1] = 0;
@@ -576,7 +579,7 @@ cmp_d:
                        } else {
                                SB1_e += (func == EVFSCTSF ? 31 : 32);
                                FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
-                                               (func == EVFSCTSF));
+                                               (func == EVFSCTSF) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -587,14 +590,14 @@ cmp_d:
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        if (SB1_c == FP_CLS_NAN) {
                                vc.wp[1] = 0;
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -605,14 +608,14 @@ cmp_d:
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_S(vc.wp[0], SB0, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        if (SB1_c == FP_CLS_NAN) {
                                vc.wp[1] = 0;
                                FP_SET_EXCEPTION(FP_EX_INVALID);
                        } else {
                                FP_TO_INT_S(vc.wp[1], SB1, 32,
-                                               ((func & 0x3) != 0));
+                                               ((func & 0x3) != 0) ? 1 : 0);
                        }
                        goto update_regs;
 
@@ -622,9 +625,9 @@ cmp_d:
                break;
 
 pack_vs:
-               pr_debug("SR0: %ld %08lx %ld (%ld)\n",
+               pr_debug("SR0: %d %08x %d (%d)\n",
                                SR0_s, SR0_f, SR0_e, SR0_c);
-               pr_debug("SR1: %ld %08lx %ld (%ld)\n",
+               pr_debug("SR1: %d %08x %d (%d)\n",
                                SR1_s, SR1_f, SR1_e, SR1_c);
 
                FP_PACK_SP(vc.wp, SR0);
index 4b57bbb..8ce066c 100644 (file)
@@ -662,12 +662,14 @@ do {                                                                      \
        if (X##_e < 0)                                                          \
          {                                                                     \
            FP_SET_EXCEPTION(FP_EX_INEXACT);                                    \
+           fallthrough;                                                        \
          case FP_CLS_ZERO:                                                     \
            r = 0;                                                              \
          }                                                                     \
        else if (X##_e >= rsize - (rsigned > 0 || X##_s)                        \
                 || (!rsigned && X##_s))                                        \
          {     /* overflow */                                                  \
+           fallthrough;                                                        \
          case FP_CLS_NAN:                                                      \
          case FP_CLS_INF:                                                      \
            if (rsigned == 2)                                                   \
@@ -767,6 +769,7 @@ do {                                                                        \
        if (X##_e >= rsize - (rsigned > 0 || X##_s)                             \
            || (!rsigned && X##_s))                                             \
          {     /* overflow */                                                  \
+           fallthrough;                                                        \
          case FP_CLS_NAN:                                                      \
          case FP_CLS_INF:                                                      \
            if (!rsigned)                                                       \