ARCv2: entry: push out the Z flag unclobber from common EXCEPTION_PROLOGUE
authorVineet Gupta <vgupta@synopsys.com>
Wed, 10 Apr 2019 02:16:37 +0000 (19:16 -0700)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 1 Jul 2019 18:02:22 +0000 (11:02 -0700)
commit23c0cbd0c75c3b564850294427fd2be2bc2a015b
tree1d21578cc359eddd8f3ab6f58bb4a0a77de4ddb0
parent45869eb0c0afd72bd5ab2437d4b00915697c044a
ARCv2: entry: push out the Z flag unclobber from common EXCEPTION_PROLOGUE

Upon a taken interrupt/exception from User mode, HS hardware auto sets Z flag.
This helps shave a few instructions from EXCEPTION_PROLOGUE by eliding
re-reading ERSTATUS and some bit fiddling.

However TLB Miss Exception handler can clobber the CPU flags and still end
up in EXCEPTION_PROLOGUE in the slow path handling TLB handling case:

   EV_TLBMissD
     do_slow_path_pf
       EV_TLBProtV (aliased to call_do_page_fault)
          EXCEPTION_PROLOGUE

As a result, EXCEPTION_PROLOGUE need to "unclobber" the Z flag which this
patch changes. It is now pushed out to TLB Miss Exception handler.
The reasons beings:

 - The flag restoration is only needed for slowpath TLB Miss Exception
   handling, but currently being in EXCEPTION_PROLOGUE penalizes all
   exceptions such as ProtV and syscall Trap, where Z flag is already
   as expected.

 - Pushing unclobber out to where it was clobbered is much cleaner and
   also serves to document the fact.

 - Makes EXCEPTION_PROLGUE similar to INTERRUPT_PROLOGUE so easier to
   refactor the common parts which is what this series aims to do

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/entry-arcv2.h
arch/arc/mm/tlbex.S