zephyr/arch/rx/core/isr_exit.S
Duy Nguyen fb7bdf0df4 arch: Initial support for RX architecture support
This commit add require code for supporting RX architecture
to Zephyr, it include:
- Add require config and CMakelists for RX arch
- Intialization startup code for RX
- Interrupt and exception handling
- Thread creation adn thread context switch
- irq offload using SW interrupt

Signed-off-by: Duy Nguyen <duy.nguyen.xa@renesas.com>
2025-05-02 09:18:16 +02:00

40 lines
1.3 KiB
ArmAsm

/*
* Copyright (c) 2024 Renesas Electronics Corporation
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/toolchain.h>
.list
.section .text
GTEXT(_z_rx_irq_exit)
_z_rx_irq_exit:
mov #__kernel, r1 ; Load the base address of _kernel into r1
mov r1, r3 ; Load the base address of _kernel into r1
add #___cpu_t_current_OFFSET, r1 ; Add the offset for the 'current' field to r1
mov [r1], r2 ; Load the value of _kernel.cpus[0].current into r2
push r2 ; Save old_thread to the stack
; Get the next thread to schedule
mov #0,r1 ; Use r1 to pass NULL since we haven't saved the context yet
bsr _z_get_next_switch_handle ; Call the function
; The return value of z_get_next_switch_handle will now be in r1
; Restore old_thread from the stack
pop r2 ; Restore old_thread from the stack
; Check if a switch is necessary
cmp #0, r1
bz no_switch ; If new_thread (in r1) is NULL, jump to no_switch
add #___thread_t_switch_handle_OFFSET, r2
; Call arch_switch to perform the context switch
bsr _z_rx_arch_switch ; r1: new_thread->switch_handle, r2: old_thread->switch_handle
no_switch:
rts