powerpc/lib: Fix "integer constant is too large" build failure
My powerpc-linux-gnu-gcc v4.4.5 compiler can't build a 32-bit kernel any more: arch/powerpc/lib/sstep.c: In function 'do_popcnt': arch/powerpc/lib/sstep.c:1068: error: integer constant is too large for 'long' type arch/powerpc/lib/sstep.c:1069: error: integer constant is too large for 'long' type arch/powerpc/lib/sstep.c:1069: error: integer constant is too large for 'long' type arch/powerpc/lib/sstep.c:1070: error: integer constant is too large for 'long' type arch/powerpc/lib/sstep.c:1079: error: integer constant is too large for 'long' type arch/powerpc/lib/sstep.c: In function 'do_prty': arch/powerpc/lib/sstep.c:1117: error: integer constant is too large for 'long' type This file gets compiled with -std=gnu89 which means a constant can be given the type 'long' even if it won't fit. Fix the errors with a 'ULL' suffix on the relevant constants. Fixes:2c979c489f
("powerpc/lib/sstep: Add prty instruction emulation") Fixes:dcbd19b48d
("powerpc/lib/sstep: Add popcnt instruction emulation") Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
c0beffc4f4
Коммит
20acf7fc94
|
@ -1065,9 +1065,10 @@ static nokprobe_inline void do_popcnt(const struct pt_regs *regs,
|
|||
{
|
||||
unsigned long long out = v1;
|
||||
|
||||
out -= (out >> 1) & 0x5555555555555555;
|
||||
out = (0x3333333333333333 & out) + (0x3333333333333333 & (out >> 2));
|
||||
out = (out + (out >> 4)) & 0x0f0f0f0f0f0f0f0f;
|
||||
out -= (out >> 1) & 0x5555555555555555ULL;
|
||||
out = (0x3333333333333333ULL & out) +
|
||||
(0x3333333333333333ULL & (out >> 2));
|
||||
out = (out + (out >> 4)) & 0x0f0f0f0f0f0f0f0fULL;
|
||||
|
||||
if (size == 8) { /* popcntb */
|
||||
op->val = out;
|
||||
|
@ -1076,7 +1077,7 @@ static nokprobe_inline void do_popcnt(const struct pt_regs *regs,
|
|||
out += out >> 8;
|
||||
out += out >> 16;
|
||||
if (size == 32) { /* popcntw */
|
||||
op->val = out & 0x0000003f0000003f;
|
||||
op->val = out & 0x0000003f0000003fULL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1114,7 +1115,7 @@ static nokprobe_inline void do_prty(const struct pt_regs *regs,
|
|||
|
||||
res ^= res >> 16;
|
||||
if (size == 32) { /* prtyw */
|
||||
op->val = res & 0x0000000100000001;
|
||||
op->val = res & 0x0000000100000001ULL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче