1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * (C) Copyright 2007 Michal Simek
5 * Michal SIMEK <monstr@monstr.eu>
9 #define NGET(val, fslnum) \
10 __asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val));
12 #define GET(val, fslnum) \
13 __asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val));
15 #define NCGET(val, fslnum) \
16 __asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val));
18 #define CGET(val, fslnum) \
19 __asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val));
21 #define NPUT(val, fslnum) \
22 __asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val));
24 #define PUT(val, fslnum) \
25 __asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val));
27 #define NCPUT(val, fslnum) \
28 __asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val));
30 #define CPUT(val, fslnum) \
31 __asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val));
34 /* machine status register */
35 #define MFS(val, reg) \
36 __asm__ __volatile__ ("mfs %0," #reg :"=r" (val));
38 #define MTS(val, reg) \
39 __asm__ __volatile__ ("mts " #reg ", %0"::"r" (val));
41 /* get return address from interrupt */
43 __asm__ __volatile__ ("addi %0, r14, 0":"=r" (val));
45 /* get return address from interrupt */
47 __asm__ __volatile__ ("addi %0, r17, 0" : "=r" (val));
49 #define NOP __asm__ __volatile__ ("nop");
51 /* use machine status registe USE_MSR_REG */
52 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 1
54 __asm__ __volatile__ ("msrset r0," #val );
57 __asm__ __volatile__ ("msrclr r0," #val );
62 register unsigned tmp; \
63 __asm__ __volatile__ (" \
75 register unsigned tmp; \
76 __asm__ __volatile__ (" \
78 andi %0, %0, ~"#val"; \