Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * (C) Copyright 2007 Michal Simek
      4  *
      5  * Michal  SIMEK <monstr (at) monstr.eu>
      6  */
      7 
      8 /* FSL macros */
      9 #define NGET(val, fslnum) \
     10 	__asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val));
     11 
     12 #define GET(val, fslnum) \
     13 	__asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val));
     14 
     15 #define NCGET(val, fslnum) \
     16 	__asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val));
     17 
     18 #define CGET(val, fslnum) \
     19 	__asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val));
     20 
     21 #define NPUT(val, fslnum) \
     22 	__asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val));
     23 
     24 #define PUT(val, fslnum) \
     25 	__asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val));
     26 
     27 #define NCPUT(val, fslnum) \
     28 	__asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val));
     29 
     30 #define CPUT(val, fslnum) \
     31 	__asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val));
     32 
     33 /* CPU dependent */
     34 /* machine status register */
     35 #define MFS(val, reg) \
     36 	__asm__ __volatile__ ("mfs %0," #reg :"=r" (val));
     37 
     38 #define MTS(val, reg) \
     39 	__asm__ __volatile__ ("mts " #reg ", %0"::"r" (val));
     40 
     41 /* get return address from interrupt */
     42 #define R14(val) \
     43 	__asm__ __volatile__ ("addi %0, r14, 0":"=r" (val));
     44 
     45 /* get return address from interrupt */
     46 #define R17(val) \
     47 	__asm__ __volatile__ ("addi %0, r17, 0" : "=r" (val));
     48 
     49 #define NOP	__asm__ __volatile__ ("nop");
     50 
     51 /* use machine status registe USE_MSR_REG */
     52 #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 1
     53 #define MSRSET(val) \
     54 	__asm__ __volatile__ ("msrset r0," #val );
     55 
     56 #define MSRCLR(val) \
     57 	__asm__ __volatile__ ("msrclr r0," #val );
     58 
     59 #else
     60 #define MSRSET(val)						\
     61 {								\
     62 	register unsigned tmp;					\
     63 	__asm__ __volatile__ ("					\
     64 			mfs	%0, rmsr;			\
     65 			ori	%0, %0, "#val";			\
     66 			mts	rmsr, %0;			\
     67 			nop;"					\
     68 			: "=r" (tmp)				\
     69 			: "d" (val)				\
     70 			: "memory");				\
     71 }
     72 
     73 #define MSRCLR(val)						\
     74 {								\
     75 	register unsigned tmp;					\
     76 	__asm__ __volatile__ ("					\
     77 			mfs	%0, rmsr;			\
     78 			andi	%0, %0, ~"#val";		\
     79 			mts	rmsr, %0;			\
     80 			nop;"					\
     81 			: "=r" (tmp)				\
     82 			: "d" (val)				\
     83 			: "memory");				\
     84 }
     85 #endif
     86