1 #ifndef _ASM_M32R_ASSEMBLER_H
2 #define _ASM_M32R_ASSEMBLER_H
5 * linux/asm-m32r/assembler.h
7 * Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org>
9 * This file contains M32R architecture specific macro definitions.
22 #define M32R_LOCK __STR(lock)
23 #define M32R_UNLOCK __STR(unlock)
25 #define M32R_LOCK __STR(ld)
26 #define M32R_UNLOCK __STR(st)
31 #define ENTRY(name) ENTRY_M name
41 * LDIMM - load immediate value
42 * STI - enable interruption
43 * CLI - disable interruption
48 #define LDIMM(reg,x) LDIMM reg x
51 or3
\reg
, \reg
, #low(\x)
54 #if !(defined(CONFIG_CHIP_M32102) || defined(CONFIG_CHIP_M32104))
55 #define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg
56 .macro ENABLE_INTERRUPTS reg
58 ; WORKAROUND
: "-> nop" is a workaround
for the
M32700(TS1
).
61 #define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg
62 .macro DISABLE_INTERRUPTS reg
64 ; WORKAROUND
: "-> nop" is a workaround
for the
M32700(TS1
).
66 #else /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */
67 #define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg
68 .macro ENABLE_INTERRUPTS reg
70 or3
\reg
, \reg
, #0x0040
74 #define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg
75 .macro DISABLE_INTERRUPTS reg
77 and3
\reg
, \reg
, #0xffbf
80 #endif /* CONFIG_CHIP_M32102 */
97 #if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
106 #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
112 push r13
; dummy push acc1h
113 push r13
; dummy push acc1l
115 #error unknown isa configuration
118 push r13
; syscall_nr (default: -1)
129 addi sp
, #-4 ; room for implicit pt_regs parameter
150 addi r15
, #4 ; Skip syscall number
151 #if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
160 #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
161 pop r13
; dummy pop acc1h
162 pop r13
; dummy pop acc1l
168 #error unknown isa configuration
174 addi sp
, #8 ; Skip bbpsw, bbpc
180 addi sp
, #4 ; Skip orig_r0
186 .section __ex_table
,"a"
192 #define GET_CURRENT(reg) get_current reg
193 .macro get_current reg
198 #if !(defined(CONFIG_CHIP_M32102) || defined(CONFIG_CHIP_M32104))
199 .macro SWITCH_TO_KERNEL_STACK
200 ; switch to kernel
stack (spi
)
203 #else /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */
204 .macro SWITCH_TO_KERNEL_STACK
205 push r0
; save r0
for working
207 and3 r0
, r0
, #0x00ff7f
210 bltz r0
, 1f
; check BSM
-bit
212 ;; called from kernel context
: previous stack
= spi
217 ;; called from user context
: previous stack
= spu
221 ld r0
, @
(-4,r0
) ; retrieve r0
225 #endif /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */
227 #endif /* __ASSEMBLY__ */
229 #endif /* _ASM_M32R_ASSEMBLER_H */