summaryrefslogtreecommitdiff
path: root/libcpu/risc-v/common/cpu_gcc.S
blob: 1659e0ed2ba9c44f1800032fc1a3e7e16db21143 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
 * Copyright (c) 2006-2025, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2025-04-20     GuEe-GUI     The first version
 */

#include <csr.h>

#ifdef RT_USING_SMP
#define rt_hw_interrupt_disable rt_hw_local_irq_disable
#define rt_hw_interrupt_enable rt_hw_local_irq_enable
#endif

    .section ".text","ax"

START_POINT(rt_hw_interrupt_is_disabled)
    csrr    a0, CSR_STATUS
    andi    a0, a0, SR_IE
    seqz    a0, a0
    ret
START_POINT_END(rt_hw_interrupt_is_disabled)

START_POINT(rt_hw_interrupt_enable)
    /* Restore to old csr */
    csrs    CSR_STATUS, a0
    ret
START_POINT_END(rt_hw_interrupt_enable)

START_POINT(rt_hw_interrupt_disable)
    /* Clear IE */
    csrrci  a0, CSR_STATUS, SR_IE
    ret
START_POINT_END(rt_hw_interrupt_disable)