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: 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
This commit is contained in:
parent
cfe0d370e0
commit
7245fc5bb7
@ -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);
|
|||||||
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)
|
|||||||
|
|
||||||
case XCR:
|
case XCR:
|
||||||
op0 = (void *)®s->ccr;
|
op0 = (void *)®s->ccr;
|
||||||
op1 = (void *)((insn >> 23) & 0x7);
|
op1 = (void *)(long)((insn >> 23) & 0x7);
|
||||||
op2 = (void *)¤t->thread.TS_FPR((insn >> 16) & 0x1f);
|
op2 = (void *)¤t->thread.TS_FPR((insn >> 16) & 0x1f);
|
||||||
op3 = (void *)¤t->thread.TS_FPR((insn >> 11) & 0x1f);
|
op3 = (void *)¤t->thread.TS_FPR((insn >> 11) & 0x1f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XCRL:
|
case XCRL:
|
||||||
op0 = (void *)®s->ccr;
|
op0 = (void *)®s->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 *)¤t->thread.TS_FPR((insn >> 11) & 0x1f);
|
op1 = (void *)¤t->thread.TS_FPR((insn >> 11) & 0x1f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -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)
|
|||||||
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)
|
|||||||
} 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
} 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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_s:
|
|||||||
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 @@ cmp_d:
|
|||||||
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 @@ cmp_d:
|
|||||||
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 @@ cmp_d:
|
|||||||
} 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 @@ cmp_d:
|
|||||||
} 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 @@ cmp_d:
|
|||||||
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 @@ cmp_d:
|
|||||||
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 @@ cmp_d:
|
|||||||
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 { \
|
|||||||
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 { \
|
|||||||
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) \
|
||||||
|
Loading…
Reference in New Issue
Block a user