powerpc/64s: Avoid a branch in masked_[H]interrupt()
authorNicholas Piggin <npiggin@gmail.com>
Fri, 11 Aug 2017 16:38:59 +0000 (02:38 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 23 Aug 2017 13:02:48 +0000 (23:02 +1000)
Interrupts which do not require EE to be cleared can all be tested
with a single bitwise test.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/exceptions-64s.S

index 3c36ecb..caf083d 100644 (file)
@@ -1370,10 +1370,8 @@ masked_##_H##interrupt:                                  \
        ori     r10,r10,0xffff;                         \
        mtspr   SPRN_DEC,r10;                           \
        b       MASKED_DEC_HANDLER_LABEL;               \
-1:     cmpwi   r10,PACA_IRQ_DBELL;                     \
-       beq     2f;                                     \
-       cmpwi   r10,PACA_IRQ_HMI;                       \
-       beq     2f;                                     \
+1:     andi.   r10,r10,(PACA_IRQ_DBELL|PACA_IRQ_HMI);  \
+       bne     2f;                                     \
        mfspr   r10,SPRN_##_H##SRR1;                    \
        rldicl  r10,r10,48,1; /* clear MSR_EE */        \
        rotldi  r10,r10,16;                             \