File: /usr/src/linux/include/asm-m68k/movs.h

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