diff mbox series

[1/3] MIPS: jump_label: Remove redundant nops

Message ID 20190405225014.15236-1-paul.burton@mips.com (mailing list archive)
State Mainlined
Commit c838b580ca9dcf16b07aa72bb61a914e9db0fd2c
Headers show
Series [1/3] MIPS: jump_label: Remove redundant nops | expand

Commit Message

Paul Burton April 5, 2019, 10:50 p.m. UTC
Both arch_static_branch() & arch_static_branch_jump() emit a control
transfer instruction (ie. branch or jump) without disabling assembler
re-ordering. As such the assembler will automatically fill their delay
slots.

Both functions follow their branch or jump with an explicit nop that at
first appears to be there to fill the delay slot, but given that the
assembler will do that the explicit nops serve no purpose & we end up
with our branch or jump followed by 2 nops. Remove the redundant nops.

Signed-off-by: Paul Burton <paul.burton@mips.com>
---

 arch/mips/include/asm/jump_label.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Paul Burton April 15, 2019, 5:37 p.m. UTC | #1
Hello,

Paul Burton wrote:
> Both arch_static_branch() & arch_static_branch_jump() emit a control
> transfer instruction (ie. branch or jump) without disabling assembler
> re-ordering. As such the assembler will automatically fill their delay
> slots.
> 
> Both functions follow their branch or jump with an explicit nop that at
> first appears to be there to fill the delay slot, but given that the
> assembler will do that the explicit nops serve no purpose & we end up
> with our branch or jump followed by 2 nops. Remove the redundant nops.
> 
> Signed-off-by: Paul Burton <paul.burton@mips.com>

Series applied to mips-next.

Thanks,
    Paul

[ This message was auto-generated; if you believe anything is incorrect
  then please email paul.burton@mips.com to report it. ]
diff mbox series

Patch

diff --git a/arch/mips/include/asm/jump_label.h b/arch/mips/include/asm/jump_label.h
index e4456e450f94..df04449b261b 100644
--- a/arch/mips/include/asm/jump_label.h
+++ b/arch/mips/include/asm/jump_label.h
@@ -29,7 +29,7 @@ 
 static __always_inline bool arch_static_branch(struct static_key *key, bool branch)
 {
 	asm_volatile_goto("1:\t" B_INSN " 2f\n\t"
-		"2:\tnop\n\t"
+		"2:\t.insn\n\t"
 		".pushsection __jump_table,  \"aw\"\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 		".popsection\n\t"
@@ -43,7 +43,6 @@  static __always_inline bool arch_static_branch(struct static_key *key, bool bran
 static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch)
 {
 	asm_volatile_goto("1:\tj %l[l_yes]\n\t"
-		"nop\n\t"
 		".pushsection __jump_table,  \"aw\"\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 		".popsection\n\t"