forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
1.9 KiB
123 lines
1.9 KiB
! SPDX-License-Identifier: GPL-2.0 |
|
! entry.S macro define |
|
|
|
.macro cli |
|
stc sr, r0 |
|
or #0xf0, r0 |
|
ldc r0, sr |
|
.endm |
|
|
|
.macro sti |
|
mov #0xfffffff0, r11 |
|
extu.b r11, r11 |
|
not r11, r11 |
|
stc sr, r10 |
|
and r11, r10 |
|
#ifdef CONFIG_CPU_HAS_SR_RB |
|
stc k_g_imask, r11 |
|
or r11, r10 |
|
#endif |
|
ldc r10, sr |
|
.endm |
|
|
|
.macro get_current_thread_info, ti, tmp |
|
#ifdef CONFIG_CPU_HAS_SR_RB |
|
stc r7_bank, \ti |
|
#else |
|
mov #((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp |
|
shll8 \tmp |
|
shll2 \tmp |
|
mov r15, \ti |
|
and \tmp, \ti |
|
#endif |
|
.endm |
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS |
|
|
|
.macro TRACE_IRQS_ON |
|
mov.l r0, @-r15 |
|
mov.l r1, @-r15 |
|
mov.l r2, @-r15 |
|
mov.l r3, @-r15 |
|
mov.l r4, @-r15 |
|
mov.l r5, @-r15 |
|
mov.l r6, @-r15 |
|
mov.l r7, @-r15 |
|
|
|
mov.l 7834f, r0 |
|
jsr @r0 |
|
nop |
|
|
|
mov.l @r15+, r7 |
|
mov.l @r15+, r6 |
|
mov.l @r15+, r5 |
|
mov.l @r15+, r4 |
|
mov.l @r15+, r3 |
|
mov.l @r15+, r2 |
|
mov.l @r15+, r1 |
|
mov.l @r15+, r0 |
|
mov.l 7834f, r0 |
|
|
|
bra 7835f |
|
nop |
|
.balign 4 |
|
7834: .long trace_hardirqs_on |
|
7835: |
|
.endm |
|
.macro TRACE_IRQS_OFF |
|
|
|
mov.l r0, @-r15 |
|
mov.l r1, @-r15 |
|
mov.l r2, @-r15 |
|
mov.l r3, @-r15 |
|
mov.l r4, @-r15 |
|
mov.l r5, @-r15 |
|
mov.l r6, @-r15 |
|
mov.l r7, @-r15 |
|
|
|
mov.l 7834f, r0 |
|
jsr @r0 |
|
nop |
|
|
|
mov.l @r15+, r7 |
|
mov.l @r15+, r6 |
|
mov.l @r15+, r5 |
|
mov.l @r15+, r4 |
|
mov.l @r15+, r3 |
|
mov.l @r15+, r2 |
|
mov.l @r15+, r1 |
|
mov.l @r15+, r0 |
|
mov.l 7834f, r0 |
|
|
|
bra 7835f |
|
nop |
|
.balign 4 |
|
7834: .long trace_hardirqs_off |
|
7835: |
|
.endm |
|
|
|
#else |
|
.macro TRACE_IRQS_ON |
|
.endm |
|
|
|
.macro TRACE_IRQS_OFF |
|
.endm |
|
#endif |
|
|
|
#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4) |
|
# define PREF(x) pref @x |
|
#else |
|
# define PREF(x) nop |
|
#endif |
|
|
|
/* |
|
* Macro for use within assembly. Because the DWARF unwinder |
|
* needs to use the frame register to unwind the stack, we |
|
* need to setup r14 with the value of the stack pointer as |
|
* the return address is usually on the stack somewhere. |
|
*/ |
|
.macro setup_frame_reg |
|
#ifdef CONFIG_DWARF_UNWINDER |
|
mov r15, r14 |
|
#endif |
|
.endm
|
|
|