Commit b5f9b666 authored by Anton Blanchard's avatar Anton Blanchard Committed by Benjamin Herrenschmidt
Browse files

powerpc: Hardcode popcnt instructions for old assemblers



The popcnt instructions went into binutils relatively recently. As with a
number of other instructions, create macros and hardcode them.

Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent b8c49def
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@
#define PPC_INST_NOP			0x60000000
#define PPC_INST_POPCNTB		0x7c0000f4
#define PPC_INST_POPCNTB_MASK		0xfc0007fe
#define PPC_INST_POPCNTD		0x7c0003f4
#define PPC_INST_POPCNTW		0x7c0002f4
#define PPC_INST_RFCI			0x4c000066
#define PPC_INST_RFDI			0x4c00004e
#define PPC_INST_RFMCI			0x4c00004c
@@ -88,6 +90,12 @@
					__PPC_RB(b) | __PPC_EH(eh))
#define PPC_MSGSND(b)		stringify_in_c(.long PPC_INST_MSGSND | \
					__PPC_RB(b))
#define PPC_POPCNTB(a, s)	stringify_in_c(.long PPC_INST_POPCNTB | \
					__PPC_RA(a) | __PPC_RS(s))
#define PPC_POPCNTD(a, s)	stringify_in_c(.long PPC_INST_POPCNTD | \
					__PPC_RA(a) | __PPC_RS(s))
#define PPC_POPCNTW(a, s)	stringify_in_c(.long PPC_INST_POPCNTW | \
					__PPC_RA(a) | __PPC_RS(s))
#define PPC_RFCI		stringify_in_c(.long PPC_INST_RFCI)
#define PPC_RFDI		stringify_in_c(.long PPC_INST_RFDI)
#define PPC_RFMCI		stringify_in_c(.long PPC_INST_RFMCI)
+7 −7
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ BEGIN_FTR_SECTION
	nop
	nop
FTR_SECTION_ELSE
	popcntb	r3,r3
	PPC_POPCNTB(r3,r3)
	clrldi	r3,r3,64-8
	blr
ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
@@ -42,14 +42,14 @@ BEGIN_FTR_SECTION
	nop
FTR_SECTION_ELSE
  BEGIN_FTR_SECTION_NESTED(50)
	popcntb r3,r3
	PPC_POPCNTB(r3,r3)
	srdi	r4,r3,8
	add	r3,r4,r3
	clrldi	r3,r3,64-8
	blr
  FTR_SECTION_ELSE_NESTED(50)
	clrlwi  r3,r3,16
	popcntw	r3,r3
	PPC_POPCNTW(r3,r3)
	clrldi	r3,r3,64-8
	blr
  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
@@ -66,7 +66,7 @@ BEGIN_FTR_SECTION
	nop
FTR_SECTION_ELSE
  BEGIN_FTR_SECTION_NESTED(51)
	popcntb r3,r3
	PPC_POPCNTB(r3,r3)
	srdi	r4,r3,16
	add	r3,r4,r3
	srdi	r4,r3,8
@@ -74,7 +74,7 @@ FTR_SECTION_ELSE
	clrldi	r3,r3,64-8
	blr
  FTR_SECTION_ELSE_NESTED(51)
	popcntw	r3,r3
	PPC_POPCNTW(r3,r3)
	clrldi	r3,r3,64-8
	blr
  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
@@ -93,7 +93,7 @@ BEGIN_FTR_SECTION
	nop
FTR_SECTION_ELSE
  BEGIN_FTR_SECTION_NESTED(52)
	popcntb r3,r3
	PPC_POPCNTB(r3,r3)
	srdi	r4,r3,32
	add	r3,r4,r3
	srdi	r4,r3,16
@@ -103,7 +103,7 @@ FTR_SECTION_ELSE
	clrldi	r3,r3,64-8
	blr
  FTR_SECTION_ELSE_NESTED(52)
	popcntd	r3,r3
	PPC_POPCNTD(r3,r3)
	clrldi	r3,r3,64-8
	blr
  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)