armv8: Simplify switch_el macro

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>
This commit is contained in:
Andre Przywara 2022-02-11 11:29:38 +00:00 committed by Tom Rini
parent 7ab2e47d27
commit f660fe0bd3

View 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
/*