1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PARISC_SPECIAL_INSNS_H
3 #define __PARISC_SPECIAL_INSNS_H
7 __asm__ __volatile__( \
9 "8:\tlpa %%r0(%1),%0\n" \
11 ASM_EXCEPTIONTABLE_ENTRY(8b, 9b, \
12 "or %%r0,%%r0,%%r0") \
20 #define lpa_user(va) ({ \
22 __asm__ __volatile__( \
24 "8:\tlpa %%r0(%%sr3,%1),%0\n" \
26 ASM_EXCEPTIONTABLE_ENTRY(8b, 9b, \
27 "or %%r0,%%r0,%%r0") \
35 #define CR_EIEM 15 /* External Interrupt Enable Mask */
36 #define CR_CR16 16 /* CR16 Interval Timer */
37 #define CR_EIRR 23 /* External Interrupt Request Register */
39 #define mfctl(reg) ({ \
41 __asm__ __volatile__( \
43 "=r" (cr) : "i" (reg) \
48 #define mtctl(gr, cr) \
49 __asm__ __volatile__("mtctl %0,%1" \
51 : "r" (gr), "i" (cr) : "memory")
53 #define get_eiem() mfctl(CR_EIEM)
54 #define set_eiem(val) mtctl(val, CR_EIEM)
56 #define mfsp(reg) ({ \
58 __asm__ __volatile__( \
60 : "=r" (cr) : "i"(reg) \
65 #define mtsp(val, cr) \
66 { if (__builtin_constant_p(val) && ((val) == 0)) \
67 __asm__ __volatile__("mtsp %%r0,%0" : : "i" (cr) : "memory"); \
69 __asm__ __volatile__("mtsp %0,%1" \
71 : "r" (val), "i" (cr) : "memory"); }
73 #endif /* __PARISC_SPECIAL_INSNS_H */