blob: 409f1b59e0de9be981b4cada75667773d388873a [file] [log] [blame]
/*
* Copyright (c) 2019-2020 Cobham Gaisler AB
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/toolchain.h>
#include <zephyr/linker/sections.h>
#include <zephyr/arch/sparc/sparc.h>
GTEXT(__sparc_trap_sw_set_pil)
/*
* Set processor interrupt level
*
* Handler for SPARC trap 0x89: trap_instruction, defined as "Reserved for the
* operating system" by SPARC-ABI.
*
* entry:
* - %l0: psr
* - %l1: pc
* - %l2: npc
* - %i0: New processor interrupt level
*
* return:
* - %i0: Old processor interrupt level
*/
SECTION_FUNC(TEXT, __sparc_trap_sw_set_pil)
/* %l5: new %psr */
sll %i0, PSR_PIL_BIT, %i0
andn %l0, PSR_PIL, %l5
or %l5, %i0, %l5
wr %l5, %psr
nop
nop
nop
and %l0, PSR_PIL, %l3
srl %l3, PSR_PIL_BIT, %i0
jmp %l2
rett %l2 + 4