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

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
...@@ -16,5 +16,3 @@ obj-$(CONFIG_SPE) += math_efp.o ...@@ -16,5 +16,3 @@ obj-$(CONFIG_SPE) += math_efp.o
CFLAGS_fabs.o = -fno-builtin-fabs CFLAGS_fabs.o = -fno-builtin-fabs
CFLAGS_math.o = -fno-builtin-fabs CFLAGS_math.o = -fno-builtin-fabs
ccflags-y = -w
...@@ -24,9 +24,9 @@ FLOATFUNC(mtfsf); ...@@ -24,9 +24,9 @@ FLOATFUNC(mtfsf);
FLOATFUNC(mtfsfi); FLOATFUNC(mtfsfi);
#ifdef CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED #ifdef CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED
#undef FLOATFUNC(x) #undef FLOATFUNC
#define FLOATFUNC(x) static inline int x(void *op1, void *op2, void *op3, \ #define FLOATFUNC(x) static inline int x(void *op1, void *op2, void *op3, \
void *op4) { } void *op4) { return 0; }
#endif #endif
FLOATFUNC(fadd); FLOATFUNC(fadd);
...@@ -396,28 +396,28 @@ do_mathemu(struct pt_regs *regs) ...@@ -396,28 +396,28 @@ do_mathemu(struct pt_regs *regs)
case XCR: case XCR:
op0 = (void *)&regs->ccr; op0 = (void *)&regs->ccr;
op1 = (void *)((insn >> 23) & 0x7); op1 = (void *)(long)((insn >> 23) & 0x7);
op2 = (void *)&current->thread.TS_FPR((insn >> 16) & 0x1f); op2 = (void *)&current->thread.TS_FPR((insn >> 16) & 0x1f);
op3 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f); op3 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
break; break;
case XCRL: case XCRL:
op0 = (void *)&regs->ccr; op0 = (void *)&regs->ccr;
op1 = (void *)((insn >> 23) & 0x7); op1 = (void *)(long)((insn >> 23) & 0x7);
op2 = (void *)((insn >> 18) & 0x7); op2 = (void *)(long)((insn >> 18) & 0x7);
break; break;
case XCRB: case XCRB:
op0 = (void *)((insn >> 21) & 0x1f); op0 = (void *)(long)((insn >> 21) & 0x1f);
break; break;
case XCRI: case XCRI:
op0 = (void *)((insn >> 23) & 0x7); op0 = (void *)(long)((insn >> 23) & 0x7);
op1 = (void *)((insn >> 12) & 0xf); op1 = (void *)(long)((insn >> 12) & 0xf);
break; break;
case XFLB: case XFLB:
op0 = (void *)((insn >> 17) & 0xff); op0 = (void *)(long)((insn >> 17) & 0xff);
op1 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f); op1 = (void *)&current->thread.TS_FPR((insn >> 11) & 0x1f);
break; break;
......
...@@ -219,6 +219,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -219,6 +219,7 @@ int do_spe_mathemu(struct pt_regs *regs)
case AB: case AB:
case XCR: case XCR:
FP_UNPACK_SP(SA, va.wp + 1); FP_UNPACK_SP(SA, va.wp + 1);
fallthrough;
case XB: case XB:
FP_UNPACK_SP(SB, vb.wp + 1); FP_UNPACK_SP(SB, vb.wp + 1);
break; break;
...@@ -227,8 +228,8 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -227,8 +228,8 @@ int do_spe_mathemu(struct pt_regs *regs)
break; break;
} }
pr_debug("SA: %ld %08lx %ld (%ld)\n", SA_s, SA_f, SA_e, SA_c); pr_debug("SA: %d %08x %d (%d)\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("SB: %d %08x %d (%d)\n", SB_s, SB_f, SB_e, SB_c);
switch (func) { switch (func) {
case EFSABS: case EFSABS:
...@@ -279,7 +280,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -279,7 +280,7 @@ int do_spe_mathemu(struct pt_regs *regs)
} else { } else {
SB_e += (func == EFSCTSF ? 31 : 32); SB_e += (func == EFSCTSF ? 31 : 32);
FP_TO_INT_ROUND_S(vc.wp[1], SB, 32, FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
(func == EFSCTSF)); (func == EFSCTSF) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -288,7 +289,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -288,7 +289,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_CLEAR_EXCEPTIONS; FP_CLEAR_EXCEPTIONS;
FP_UNPACK_DP(DB, vb.dp); 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); DB_s, DB_f1, DB_f0, DB_e, DB_c);
FP_CONV(S, D, 1, 2, SR, DB); FP_CONV(S, D, 1, 2, SR, DB);
...@@ -302,7 +303,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -302,7 +303,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_ROUND_S(vc.wp[1], SB, 32, FP_TO_INT_ROUND_S(vc.wp[1], SB, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -313,7 +314,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -313,7 +314,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_S(vc.wp[1], SB, 32, FP_TO_INT_S(vc.wp[1], SB, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -323,7 +324,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -323,7 +324,7 @@ int do_spe_mathemu(struct pt_regs *regs)
break; break;
pack_s: 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); FP_PACK_SP(vc.wp + 1, SR);
goto update_regs; goto update_regs;
...@@ -347,6 +348,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -347,6 +348,7 @@ int do_spe_mathemu(struct pt_regs *regs)
case AB: case AB:
case XCR: case XCR:
FP_UNPACK_DP(DA, va.dp); FP_UNPACK_DP(DA, va.dp);
fallthrough;
case XB: case XB:
FP_UNPACK_DP(DB, vb.dp); FP_UNPACK_DP(DB, vb.dp);
break; break;
...@@ -355,9 +357,9 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -355,9 +357,9 @@ int do_spe_mathemu(struct pt_regs *regs)
break; 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); 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); DB_s, DB_f1, DB_f0, DB_e, DB_c);
switch (func) { switch (func) {
...@@ -409,7 +411,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -409,7 +411,7 @@ int do_spe_mathemu(struct pt_regs *regs)
} else { } else {
DB_e += (func == EFDCTSF ? 31 : 32); DB_e += (func == EFDCTSF ? 31 : 32);
FP_TO_INT_ROUND_D(vc.wp[1], DB, 32, FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
(func == EFDCTSF)); (func == EFDCTSF) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -418,7 +420,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -418,7 +420,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_CLEAR_EXCEPTIONS; FP_CLEAR_EXCEPTIONS;
FP_UNPACK_SP(SB, vb.wp + 1); 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); SB_s, SB_f, SB_e, SB_c);
FP_CONV(D, S, 2, 1, DR, SB); FP_CONV(D, S, 2, 1, DR, SB);
...@@ -432,7 +434,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -432,7 +434,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_D(vc.dp[0], DB, 64, FP_TO_INT_D(vc.dp[0], DB, 64,
((func & 0x1) == 0)); ((func & 0x1) == 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -443,7 +445,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -443,7 +445,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_ROUND_D(vc.wp[1], DB, 32, FP_TO_INT_ROUND_D(vc.wp[1], DB, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -454,7 +456,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -454,7 +456,7 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_D(vc.wp[1], DB, 32, FP_TO_INT_D(vc.wp[1], DB, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -464,7 +466,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -464,7 +466,7 @@ int do_spe_mathemu(struct pt_regs *regs)
break; break;
pack_d: 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); DR_s, DR_f1, DR_f0, DR_e, DR_c);
FP_PACK_DP(vc.dp, DR); FP_PACK_DP(vc.dp, DR);
...@@ -493,6 +495,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -493,6 +495,7 @@ int do_spe_mathemu(struct pt_regs *regs)
case XCR: case XCR:
FP_UNPACK_SP(SA0, va.wp); FP_UNPACK_SP(SA0, va.wp);
FP_UNPACK_SP(SA1, va.wp + 1); FP_UNPACK_SP(SA1, va.wp + 1);
fallthrough;
case XB: case XB:
FP_UNPACK_SP(SB0, vb.wp); FP_UNPACK_SP(SB0, vb.wp);
FP_UNPACK_SP(SB1, vb.wp + 1); FP_UNPACK_SP(SB1, vb.wp + 1);
...@@ -503,13 +506,13 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -503,13 +506,13 @@ int do_spe_mathemu(struct pt_regs *regs)
break; 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); 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); 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); 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); SB1_s, SB1_f, SB1_e, SB1_c);
switch (func) { switch (func) {
...@@ -568,7 +571,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -568,7 +571,7 @@ int do_spe_mathemu(struct pt_regs *regs)
} else { } else {
SB0_e += (func == EVFSCTSF ? 31 : 32); SB0_e += (func == EVFSCTSF ? 31 : 32);
FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32, FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
(func == EVFSCTSF)); (func == EVFSCTSF) ? 1 : 0);
} }
if (SB1_c == FP_CLS_NAN) { if (SB1_c == FP_CLS_NAN) {
vc.wp[1] = 0; vc.wp[1] = 0;
...@@ -576,7 +579,7 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -576,7 +579,7 @@ int do_spe_mathemu(struct pt_regs *regs)
} else { } else {
SB1_e += (func == EVFSCTSF ? 31 : 32); SB1_e += (func == EVFSCTSF ? 31 : 32);
FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32, FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
(func == EVFSCTSF)); (func == EVFSCTSF) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -587,14 +590,14 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -587,14 +590,14 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32, FP_TO_INT_ROUND_S(vc.wp[0], SB0, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
if (SB1_c == FP_CLS_NAN) { if (SB1_c == FP_CLS_NAN) {
vc.wp[1] = 0; vc.wp[1] = 0;
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32, FP_TO_INT_ROUND_S(vc.wp[1], SB1, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -605,14 +608,14 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -605,14 +608,14 @@ int do_spe_mathemu(struct pt_regs *regs)
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_S(vc.wp[0], SB0, 32, FP_TO_INT_S(vc.wp[0], SB0, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
if (SB1_c == FP_CLS_NAN) { if (SB1_c == FP_CLS_NAN) {
vc.wp[1] = 0; vc.wp[1] = 0;
FP_SET_EXCEPTION(FP_EX_INVALID); FP_SET_EXCEPTION(FP_EX_INVALID);
} else { } else {
FP_TO_INT_S(vc.wp[1], SB1, 32, FP_TO_INT_S(vc.wp[1], SB1, 32,
((func & 0x3) != 0)); ((func & 0x3) != 0) ? 1 : 0);
} }
goto update_regs; goto update_regs;
...@@ -622,9 +625,9 @@ int do_spe_mathemu(struct pt_regs *regs) ...@@ -622,9 +625,9 @@ int do_spe_mathemu(struct pt_regs *regs)
break; break;
pack_vs: 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); 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); SR1_s, SR1_f, SR1_e, SR1_c);
FP_PACK_SP(vc.wp, SR0); FP_PACK_SP(vc.wp, SR0);
......
...@@ -662,12 +662,14 @@ do { \ ...@@ -662,12 +662,14 @@ do { \
if (X##_e < 0) \ if (X##_e < 0) \
{ \ { \
FP_SET_EXCEPTION(FP_EX_INEXACT); \ FP_SET_EXCEPTION(FP_EX_INEXACT); \
fallthrough; \
case FP_CLS_ZERO: \ case FP_CLS_ZERO: \
r = 0; \ r = 0; \
} \ } \
else if (X##_e >= rsize - (rsigned > 0 || X##_s) \ else if (X##_e >= rsize - (rsigned > 0 || X##_s) \
|| (!rsigned && X##_s)) \ || (!rsigned && X##_s)) \
{ /* overflow */ \ { /* overflow */ \
fallthrough; \
case FP_CLS_NAN: \ case FP_CLS_NAN: \
case FP_CLS_INF: \ case FP_CLS_INF: \
if (rsigned == 2) \ if (rsigned == 2) \
...@@ -767,6 +769,7 @@ do { \ ...@@ -767,6 +769,7 @@ do { \
if (X##_e >= rsize - (rsigned > 0 || X##_s) \ if (X##_e >= rsize - (rsigned > 0 || X##_s) \
|| (!rsigned && X##_s)) \ || (!rsigned && X##_s)) \
{ /* overflow */ \ { /* overflow */ \
fallthrough; \
case FP_CLS_NAN: \ case FP_CLS_NAN: \
case FP_CLS_INF: \ case FP_CLS_INF: \
if (!rsigned) \ if (!rsigned) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment