Commit 7245fc5b authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/math-emu: Remove -w build flag and fix warnings



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: default avatarNathan Chancellor <nathan@kernel.org>
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: default avatarNathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/2663961738a46073713786d4efeb53100ca156e7.1662134272.git.christophe.leroy@csgroup.eu
parent cfe0d370
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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
+9 −9
Original line number Diff line number Diff line
@@ -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;

+30 −27
Original line number Diff line number Diff line
@@ -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 @@ int do_spe_mathemu(struct pt_regs *regs)
		case AB:
		case XCR:
			FP_UNPACK_DP(DA, va.dp);
			fallthrough;
		case XB:
			FP_UNPACK_DP(DB, vb.dp);
			break;
@@ -355,9 +357,9 @@ int do_spe_mathemu(struct pt_regs *regs)
			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 @@ int do_spe_mathemu(struct pt_regs *regs)
			} 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 @@ int do_spe_mathemu(struct pt_regs *regs)
			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 @@ int do_spe_mathemu(struct pt_regs *regs)
				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 @@ int do_spe_mathemu(struct pt_regs *regs)
				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 @@ int do_spe_mathemu(struct pt_regs *regs)
				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 @@ int do_spe_mathemu(struct pt_regs *regs)
		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 @@ int do_spe_mathemu(struct pt_regs *regs)
		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 @@ int do_spe_mathemu(struct pt_regs *regs)
			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 @@ int do_spe_mathemu(struct pt_regs *regs)
			} 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 @@ int do_spe_mathemu(struct pt_regs *regs)
			} 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 @@ int do_spe_mathemu(struct pt_regs *regs)
				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 @@ int do_spe_mathemu(struct pt_regs *regs)
				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 @@ int do_spe_mathemu(struct pt_regs *regs)
		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);
+3 −0
Original line number Diff line number Diff line
@@ -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)							\