powerpc BUG_ON() is based on using twnei or tdnei instruction,
which obliges gcc to format the condition into a 0 or 1 value
in a register.

By using a generic implementation, gcc will generate a branch
to the unconditional trap generated by BUG().

As modern powerpc implement branch folding, that's even more efficient.

See below the difference at the entry of system_call_exception.

With the patch:

        00000000 <system_call_exception>:
           0:   81 6a 00 84     lwz     r11,132(r10)
           4:   90 6a 00 88     stw     r3,136(r10)
           8:   71 60 00 02     andi.   r0,r11,2
           c:   41 82 00 70     beq     7c <system_call_exception+0x7c>
          10:   71 60 40 00     andi.   r0,r11,16384
          14:   41 82 00 6c     beq     80 <system_call_exception+0x80>
          18:   71 6b 80 00     andi.   r11,r11,32768
          1c:   41 82 00 68     beq     84 <system_call_exception+0x84>
          20:   94 21 ff e0     stwu    r1,-32(r1)
          24:   93 e1 00 1c     stw     r31,28(r1)
          28:   7d 8c 42 e6     mftb    r12
        ...
          7c:   0f e0 00 00     twui    r0,0
          80:   0f e0 00 00     twui    r0,0
          84:   0f e0 00 00     twui    r0,0

Without the patch:

        00000000 <system_call_exception>:
           0:   94 21 ff e0     stwu    r1,-32(r1)
           4:   93 e1 00 1c     stw     r31,28(r1)
           8:   90 6a 00 88     stw     r3,136(r10)
           c:   81 6a 00 84     lwz     r11,132(r10)
          10:   69 60 00 02     xori    r0,r11,2
          14:   54 00 ff fe     rlwinm  r0,r0,31,31,31
          18:   0f 00 00 00     twnei   r0,0
          1c:   69 60 40 00     xori    r0,r11,16384
          20:   54 00 97 fe     rlwinm  r0,r0,18,31,31
          24:   0f 00 00 00     twnei   r0,0
          28:   69 6b 80 00     xori    r11,r11,32768
          2c:   55 6b 8f fe     rlwinm  r11,r11,17,31,31
          30:   0f 0b 00 00     twnei   r11,0
          34:   7d 8c 42 e6     mftb    r12

Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
---
 arch/powerpc/include/asm/bug.h | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
index d1635ffbb179..21103d3e1f29 100644
--- a/arch/powerpc/include/asm/bug.h
+++ b/arch/powerpc/include/asm/bug.h
@@ -69,15 +69,6 @@
        unreachable();                                          \
 } while (0)
 
-#define BUG_ON(x) do {                                         \
-       if (__builtin_constant_p(x)) {                          \
-               if (x)                                          \
-                       BUG();                                  \
-       } else {                                                \
-               BUG_ENTRY(PPC_TLNEI " %4, 0", 0, "r" ((__force long)(x)));      
\
-       }                                                       \
-} while (0)
-
 #define __WARN_FLAGS(flags) BUG_ENTRY("twi 31, 0, 0", BUGFLAG_WARNING | 
(flags))
 
 #define WARN_ON(x) ({                                          \
@@ -94,7 +85,6 @@
 })
 
 #define HAVE_ARCH_BUG
-#define HAVE_ARCH_BUG_ON
 #define HAVE_ARCH_WARN_ON
 #endif /* __ASSEMBLY __ */
 #else
-- 
2.25.0

Reply via email to