123 строки
1.8 KiB
ArmAsm
123 строки
1.8 KiB
ArmAsm
! 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
|