]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
armv8: Simplify switch_el macro
authorAndre Przywara <andre.przywara@arm.com>
Fri, 11 Feb 2022 11:29:38 +0000 (11:29 +0000)
committerTom Rini <trini@konsulko.com>
Wed, 2 Mar 2022 18:59:29 +0000 (13:59 -0500)
The switch_el macro is a neat contraption to handle cases where we need
different code depending on the current exception level, but its
implementation was longer than needed.

Simplify it by doing just one comparison, then using the different
condition codes to branch to the desired target. PState.CurrentEL just
holds two bits, and since we don't care about EL0, we can use >, =, < to
select EL3, EL2 and EL1, respectively.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
arch/arm/include/asm/macro.h

index ec0171e0e6c9aeb1350e5df70285710971fd0113..acd519020d7f45dd590be610107b8e5b4a30c928 100644 (file)
@@ -69,12 +69,10 @@ lr  .req    x30
  */
 .macro switch_el, xreg, el3_label, el2_label, el1_label
        mrs     \xreg, CurrentEL
-       cmp     \xreg, 0xc
-       b.eq    \el3_label
-       cmp     \xreg, 0x8
+       cmp     \xreg, #0x8
+       b.gt    \el3_label
        b.eq    \el2_label
-       cmp     \xreg, 0x4
-       b.eq    \el1_label
+       b.lt    \el1_label
 .endm
 
 /*