1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __MOVS_H__ 3 #define __MOVS_H__ 4 5 /* 6 ** movs.h 7 ** 8 ** Inline assembly macros to generate movs & related instructions 9 */ 10 11 /* Set DFC register value */ 12 13 #define SET_DFC(x) \ 14 __asm__ __volatile__ (" movec %0,%/dfc" : : "d" (x)); 15 16 /* Get DFC register value */ 17 18 #define GET_DFC(x) \ 19 __asm__ __volatile__ (" movec %/dfc, %0" : "=d" (x) : ); 20 21 /* Set SFC register value */ 22 23 #define SET_SFC(x) \ 24 __asm__ __volatile__ (" movec %0,%/sfc" : : "d" (x)); 25 26 /* Get SFC register value */ 27 28 #define GET_SFC(x) \ 29 __asm__ __volatile__ (" movec %/sfc, %0" : "=d" (x) : ); 30 31 #define SET_VBR(x) \ 32 __asm__ __volatile__ (" movec %0,%/vbr" : : "r" (x)); 33 34 #define GET_VBR(x) \ 35 __asm__ __volatile__ (" movec %/vbr, %0" : "=g" (x) : ); 36 37 /* Set a byte using the "movs" instruction */ 38 39 #define SET_CONTROL_BYTE(addr,value) \ 40 __asm__ __volatile__ (" movsb %0, %1@" : : "d" (value), "a" (addr)); 41 42 /* Get a byte using the "movs" instruction */ 43 44 #define GET_CONTROL_BYTE(addr,value) \ 45 __asm__ __volatile__ (" movsb %1@, %0" : "=d" (value) : "a" (addr)); 46 47 /* Set a (long)word using the "movs" instruction */ 48 49 #define SET_CONTROL_WORD(addr,value) \ 50 __asm__ __volatile__ (" movsl %0, %1@" : : "d" (value), "a" (addr)); 51 52 /* Get a (long)word using the "movs" instruction */ 53 54 #define GET_CONTROL_WORD(addr,value) \ 55 __asm__ __volatile__ (" movsl %1@, %0" : "=d" (value) : "a" (addr)); 56 #endif 57